1

AndEngine を使用して、triangle_strip と line_strip で描画されたメッシュに質問があります。

私は triple_strip を使用して 2D 地形を生成しています。三角形はこの方法で作成されます

    1  3
    |\ |\
    | \| \
    0  2  4


    final int pSegmentsCount    = 51;                       
    final int pVertexCount      = ( Mesh.VERTEX_SIZE * (pSegmentsCount) );  
    final float pColor          = new Color(0f,0f,0f).getABGRPackedFloat();
    final float pSegmentWidth   = ( CAMERA_WIDTH/pSegmentsCount );

    float[] pBufferData = new float[pVertexCount];      
    mHeightOffsetCurrent = new float[pVertexCount];     
    float x = 0f,y = 0f;
    for (int i = 0;i<(pSegmentsCount);i++){
        if (i%2!=0) { //every 3rd point goes up 2-4-6 , 0-1-3-5 stays down at 0 , x increments every third point
            y = 200;
        } else {
            x = pSegmentWidth*i; //step right by segment
            y = 0;
        }
        mHeightOffsetCurrent[i] = 0; //init default offset 
        pBufferData[(i * Mesh.VERTEX_SIZE) + Mesh.VERTEX_INDEX_X] = x;
        pBufferData[(i * Mesh.VERTEX_SIZE) + Mesh.VERTEX_INDEX_Y] = y;
        pBufferData[(i * Mesh.VERTEX_SIZE) + Mesh.COLOR_INDEX] = pColor;
    }
    pBufferData[((pSegmentsCount-1) * Mesh.VERTEX_SIZE) + Mesh.VERTEX_INDEX_Y] = -300;

    final VertexBufferObjectManager VBOM = getVertexBufferObjectManager();
    final HighPerformanceMeshVertexBufferObject pMeshVBO = new HighPerformanceMeshVertexBufferObject(VBOM, pBufferData, pVertexCount, DrawType.DYNAMIC, true, Mesh.VERTEXBUFFEROBJECTATTRIBUTES_DEFAULT);
    pMesh = new Mesh(0, 0,pVertexCount,DrawMode.LINE_STRIP,pMeshVBO);

私はそれをよりよく説明するために最後の頂点のy位置を変更しています

ここに私が得るものがあります、

line_strip ここに画像の説明を入力

三角形ストリップ ここに画像の説明を入力

最後の点の Y を 0 に設定すると、開始点への勾配のある線がまだ表示されます。

私が間違っていることは何ですか?最後の要素が最初の要素に接続されている理由と、これを修正する方法は? 配列は glDrawArrays によって描画されます。

public static final int VERTEX_INDEX_X = 0;
public static final int VERTEX_INDEX_Y = Mesh.VERTEX_INDEX_X + 1;
public static final int COLOR_INDEX = Mesh.VERTEX_INDEX_Y + 1;
public static final int VERTEX_SIZE = 2 + 1;
4

0 に答える 0