2011-03-24 6 views
1

は、私はこれは私がLINE_STRIP 使用している場合は、私が enter image description here水平線の描画方法は?私は運動を学ぶようにOpenGLに新しいです

を持っており、何の頂点の位置

を含むMXNマトリックスのグリッドからの水平ラインのセットを描くことにしました頂点配列とインデックスを使用してenter image description here

コードスニペットは素晴らしいことだろう、私はちょうど私がすべてのヘルプを参照し、コード例 でプレイする必要があるテキストブックからの概念を得ることができるように思わカントあまり理解されるであろう!


@Thomas は、それがその後、私はこれが結果

enter image description here

です

points.beginUpdateVertices(); 
for (int n = 0; n < totalPoints; n++) { 
    points.updateVertex(n, pointsPos[indices[n]].x, pointsPos[indices[n]].y, pointsPos[indices[n]].z); 
} 
points.endUpdateVertices(); 

をすることによって更新し、描画次のコード

totalPoints = GRID_ROWS * 2 * (GRID_COLUMNS - 1); 
indices = new int[totalPoints]; 

points = new GLModel(this, totalPoints, LINES, GLModel.DYNAMIC); 
int n = 0; 
points.beginUpdateVertices(); 
for (int row = 0; row < GRID_ROWS; row++) { 
    for (int col = 0; col < GRID_COLUMNS - 1; col++) { 
    int rowoffset = row * GRID_COLUMNS; 
    int n0 = rowoffset + col; 
    int n1 = rowoffset + col + 1; 

    points.updateVertex(n, pointsPos[n0].x, pointsPos[n0].y, pointsPos[n0].z); 
    indices[n] = n0; 
    n++; 

    points.updateVertex(n, pointsPos[n1].x, pointsPos[n1].y, pointsPos[n1].z); 
    indices[n] = n1; 
    n++; 
    } 
} 
points.endUpdateVertices(); 

で作業ガットループ

for (int col = 0; col < GRID_COLUMNS; col++) { 
for (int row = 0; row < GRID_ROWS - 1; row++) { 
    int offset = col * GRID_ROWS; 
    int n0 = offset + row; 
    int n1 = offset + row + 1; 
    indices[n++] = n0; 
    indices[n++] = n1; 
    } 
} 

ため、入れ子を変更することにより、


修正それが今、私は

おかげagin行と列の数に制限はありません!

答えて

4

セグメントごとに線を引いてインデックスを再利用する必要があります。つまり、最初の部分では(0,1)、(1,2)、(2,3)などの線を描きます。 。

編集:

を使用すると、4×5列(4行、行あたり5つの頂点を)持っていると仮定します。あなたは、この(擬似コード)などの指標を計算することができます:

Vertex[] v = new Vertex[20]; // 20 vertices in the grid 
for(int row = 0; row < numrows; row++) // numrows = 4 
{ 
    int rowoffset = row * numcols ; //0, 4, 8, 12 
    for(int col = 0; col < (numcols - 1); col++) //numcols = 5 
    { 
    addLineIndices(rowoffset + col, rowoffset + col +1); //adds (0,1), (1,2), (2,3) and (3, 4) for the first row 
    } 
} 

は、その後の例ではnumrows * (numcols - 1) linesegments(GL_LINES)、すなわち16のためのドローコールを発行します。 addLineIndicesは、1つの線分のインデックスペアをインデックス配列に追加し、次に描画呼び出しに供給されることに注意してください。

+0

ありがとう、チャームのように動作しますが、n x nグリッドでは動作しません。m x nとは動作しません。したがって、行数が列数と異なる場合、図面が乱雑になります。 –

+0

これはn x mでも有効です。例えば、numcolsが5の場合、rowoffsetは0,5,10,15でなければなりません。計算や頂点配列に何か問題があると思われます。あなたの質問にいくつかのコードを追加できましたか? – Thomas

関連する問題