0

とを使用してプロットしたい頂点のNx4配列がglVertexArrayありglDrawArrayます。2D散布図として。私は現在、次のように配列を初期化します。

GLint data[4][MAX_N_POINT];

for (int j=0; j<MAX_N_POINT; j++)
{
    data[j][0] = 200 + rand()%20 - 10; // X Dimension
    data[j][1] = 400 + rand()%20 - 10; // Y Dimension
    data[j][2] = 600 + rand()%20 - 10; // Z Dimension
    data[j][3] = 1; // W Dimension
}

次に、2D散布図を次のように描画します。

glVertexPointer(4, GL_INT, 0, data);
glDrawArrays(GL_POINTS, 0, nPlot);

これは次のように正しく表示されます:

ここに画像の説明を入力してください

注:背景の色付きの正方形は、ポイントが正しい位置にあるかどうかを簡単に判断できるようになっています

ただし、2次元プロットのみが必要なので、2つの未使用の次元をスキップしたいと思います。頂点のポイントが2つしかないことを伝えglVertexPointerてから、頂点間のストライドも2に設定してみましたが、思ったとおりに機能していないようです。

glVertexPointer(2, GL_INT, 2, data2); 
glDrawArrays(GL_POINTS, 0, nPlot);

ただし、これをプロットすると、非常に異なる結果が得られ、ポイントがXxY、YxZ、ZxWに表示されます。

ここに画像の説明を入力してください

ストライド変数の適切な機能を誤解しましたか?そうでない場合、下のプロットが上のプロットに似るようにストライドを適切に設定するにはどうすればよいですか?

4

1 に答える 1

2

ストライドはベクトル間の「ギャップ」ではなく、ストライドはベクトルの開始位置間の距離です。したがって、あなたの場合、ベクトルは「sizeof(int)* 4」離れています。これは、使用するストライド距離です。

glVertexPointer(2, GL_INT, sizeof(GLint)*4, data2); 
于 2011-10-06T17:52:31.903 に答える