簡體   English   中英

OpenGL ES 只繪制一個三角形

[英]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 );

每次抽獎調用一次。 我嘗試過glDrawArraysglDrawElements都無濟於事。 我的頂點和索引定義如下:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM