これは、OpenGLを使用して線を描画する必要がありますが、GL_POINTSを使用する必要があります。OpenGL:GL_POINTSのみを使用して線を描画する
Iは、水平線とP1(-1、-1)にP2(1、-1)それをテストしています。
void line2(double x1, double y1, double x2, double y2, double precision, int r, int g, int b){
double m = 0.0; // slope
double c = (y1 - m*x1); // constant
double j = y1; // starting y value
// check division by 0
if (x2-x1 == 0)
m = 0;
else
m = (y2-y1)/(x2-x1);
glColor3f(r,g,b);
glBegin(GL_POINTS);
for (double i = x1; i < x2; i+=precision){
j = m*i + c; // result of y from line function
glVertex2f(i,j);
}
glEnd();
}
でそれを呼び出す:
line2(-1,-1,1,-1,0.000001, 102, 102, 255);
は私に水平の破線を与える
My機能は、ライン関数y = MX + Cを使用しています。それは連続していません。精度を増やすと、メモリが原因でプログラムがハングする可能性があります。
更新:私が気づいたのは、複数の行をレンダリングすることです。最初の行が点滅します。だから、私がline()を何度も呼び出すと、パラメータに関わらず、1行目は常に点滅し、他は完璧です。
行を表示するには、より良い方法(数式またはループ)がありますか?
ありがとうございました!
は、複数の描画呼び出しを使用してみてください(ただし、小さな例えば<40をそれらを保ちます)。頂点の作成を分割(頂点の数/ 40)し、問題ごとに描画コールを発行します。あなたは主に頂点バッファとシェーダを経由してこれを行うのOpenGL 3.3+で あなたはfollingを行うことができるかもしれない: 1.追加の頂点を追加するために頂点バッファを経由して 2.コールジオメトリシェーダをあなたのスタートとエンドポイントを提出してください。精度を一定の変数(CPUからGPUにメモリをプッシュするために使用)として渡します。 3.レンダリング: – somnium
最初に値のベクトルを作成してから頂点属性として渡す – Charlie
jの増分も一定であるため、毎回 'j'を計算することを避けることもできます: ' double jInc = m * precision' ループを以下のように変更してください: 'for(double i = x1、j = y1; i
JMA