[英]OpenGL ES only draws a single triangle
我已經編寫了使用索引從 4 個頂點繪制 2 個三角形的代碼:
GLES20.glUseProgram ( shader );
GLES20.glEnableVertexAttribArray ( posLoc );
GLES20.glVertexAttribPointer ( posLoc , 3 , GLES20.GL_FLOAT , false , 12 , field.verticesBuffer );
//GLES20.glDrawElements ( GL10.GL_TRIANGLES , 3 , GL10.GL_UNSIGNED_SHORT , field.indicesBuffer );
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, field.vertices.length/3);
GLES20.glDisableVertexAttribArray ( posLoc );
GLES20.glUseProgram ( 0 );
每次抽獎調用一次。 我嘗試過glDrawArrays
和glDrawElements
都無濟於事。 我的頂點和索引定義如下:
public static class Field
{
private final int BYTES_PER_FLOAT = 4;
private final int BYTES_PER_SHORT = 2;
public float vertices [ ] = {
- 0.5f , + 0.5f , + 0.0f , // top
// left
- 0.5f , - 0.5f , + 0.0f , // bottom
// left
+ 0.5f , - 0.5f , + 0.0f , // bottom
// right
+ 0.5f , + 0.5f , + 0.0f , // top
// right
};
public short indices [ ] = { 0 , 1 , 2 , 3, 0, 2 };
public FloatBuffer verticesBuffer = ByteBuffer.allocateDirect ( vertices.length * BYTES_PER_FLOAT ).order ( ByteOrder.nativeOrder ( ) ).asFloatBuffer ( );
public ShortBuffer indicesBuffer = ByteBuffer.allocateDirect ( indices.length * BYTES_PER_SHORT ).order ( ByteOrder.nativeOrder ( ) ).asShortBuffer ( );
public Field ( )
{
verticesBuffer.put ( vertices ).position ( 0 );
indicesBuffer.put ( indices ).position ( 0 );
}
}
大多數情況下,代碼與Android 的開發者網站上的代碼完全相同。 我已經在這個問題上摸索了很長一段時間,並且真的很想了解為什么代碼不起作用。 我有一些常規的 OpenGL 背景,但我對 OpenGL ES 真的很陌生。 如果您需要查看我的着色器代碼或任何其他代碼,請詢問。
您應該使用您嘗試過的glDrawElements
版本,但將硬編碼的3
替換為實際的繪制列表長度。
GLES20.glDrawElements(GL10.GL_TRIANGLES, field.indices.length, GL10.GL_UNSIGNED_SHORT, field.indicesBuffer);
該參數是要繪制的元素數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.