4

私は OpenGL ES を学び始めたばかりですが、頂点とインデックスがどのように機能するかを理解するのに苦労しています。私の現在の理解では、頂点は形状自体のポイントであり、インデックスは頂点ポイント内の「三角形」を表しています。以下のように頂点とインデックスポイントを定義するチュートリアルに従っています...

頂点データ

-1.0f、-1.0f 1.0f、-1.0f -1.0f、1.0f 1.0f、1.0f

指数データ

0,3,1, 0,2,3

インデックスの定義は常に 1 つの頂点から開始する必要があることは理解していますが、私にとっては、これらの数値が足し合わないだけです。これを紙に描くと、実際に描かれるイメージは、「王冠」の形を作る 2 つの三角形が一緒になっているように見えます。私が期待している「クラウン」ではなく、これが実際に正方形を描いている理由を誰かが説明できますか?

Square クラスのソース コード:

public class Square {

private FloatBuffer mFVertexBuffer;
private ByteBuffer mColorBuffer;
private ByteBuffer mIndexBuffer;

public Square() {

    // 2D Points
    float[] square = {

    -1.0f, -1.0f, 
    1.0f, -1.0f, 
    -1.0f, 1.0f, 
    1.0f, 1.0f,         

    };

    byte maxColor = (byte) 225;

    /**
     * Each line below represents RGB + Alpha transparency
     */
    byte colors[] = {

    0, maxColor, 0, maxColor,
    0, maxColor, maxColor, maxColor,
    0, 0, 0, maxColor, 
    maxColor, 0, maxColor, maxColor,

    };

    //triangles
    byte[] indicies = {

            0,3,1,
            0,2,3

    };

    /**
     * Make sure that bytes are in correct order, otherwise they might be
     * drawn backwards
     */
    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(square.length * 4);
    byteBuffer.order(ByteOrder.nativeOrder());
    mFVertexBuffer = byteBuffer.order(ByteOrder.nativeOrder())
            .asFloatBuffer();
    mFVertexBuffer.put(square);
    mFVertexBuffer.position(0);

    mColorBuffer = ByteBuffer.allocateDirect(colors.length);
    mColorBuffer.put(colors);
    mColorBuffer.position(0);

    mIndexBuffer = ByteBuffer.allocateDirect(indicies.length);
    mIndexBuffer.put(indicies);
    mIndexBuffer.position(0);
}

public void draw(GL10 gl) {

    /**
     * Make open GL only draw the front of the triangle (GL_CW = Graphics
     * Library Clockwise)
     * 
     * Back of triangle will not be drawn
     */
    gl.glFrontFace(GL11.GL_CW);

    /**
     * specifies number of elements per vertex
     * 
     * specifies floating point type
     * 
     * Sets stride = 0 bytes* (Stride allows to use different types of data
     * interchangably with opengl )
     */
    gl.glVertexPointer(2, GL11.GL_FLOAT, 0, mFVertexBuffer);

    // 4 because we are using 4 colors in our color bufer array
    gl.glColorPointer(4, GL11.GL_UNSIGNED_BYTE, 0, mColorBuffer);

    /**
     * draws the image
     * 
     * first argument specifies geomety format
     */
    gl.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_UNSIGNED_BYTE,
            mIndexBuffer);

    // Reset to CounterClockwise
    gl.glFrontFace(GL11.GL_CCW);

}

}

さらに情報が必要な場合はお知らせください...

4

2 に答える 2

4

4 つの頂点を定義しました。

2    3

0    1

次に、インデックスによって 2 つの三角形 0-3-1 が定義されました。

     .
   ...
  ....
 .....

および 0-2-3:

.....
....
...
.

それらを組み合わせると正方形になります。

于 2013-09-10T16:44:53.757 に答える
0

インデックスが正しくないと思います。一番下の線を描いてから一番上の頂点に移動してみてください。あなたのインデックスを正しく描写している場合、それらは実際に正方形を描こうとしています。

トライ:
0, 1, 3
0, 1, 2

その代わり

編集:私も注文を混同しました、間違いを修正しました

于 2013-09-10T16:28:34.317 に答える