gpt4 book ai didi

java - OpenGL ES 只绘制一个三角形

转载 作者:行者123 更新时间:2023-11-30 10:56:32 24 4
gpt4 key购买 nike

我已经编写了使用索引从 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's developer site 完全相同.很长一段时间以来,我一直在为这个问题绞尽脑汁,真的很想了解为什么代码不起作用。我有一点常规的 OpenGL 背景,但对 OpenGL ES 真的很陌生。如果您需要查看我的着色器代码或任何其他代码,请询问。

最佳答案

您应该使用您尝试过的 glDrawElements 版本,但将硬编码的 3 替换为实际的绘图列表长度。

GLES20.glDrawElements(GL10.GL_TRIANGLES, field.indices.length, GL10.GL_UNSIGNED_SHORT, field.indicesBuffer);

该参数是要绘制的元素的数量。

关于java - OpenGL ES 只绘制一个三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com