我意识到这是一个非常基本的问题,但是我很茫然,因为我是Java的新手,对Android开发很陌生,但是有很强的C / C ++背景,在OpenGL中使用的工作代码就像我一样我在这里试试。
我已经采用了基本的Cube.java和CubeRenderer.java代码示例并对其进行了修改以包含二十面体的数据。我想使用浮动而不是固定,但我不知道它是否可行或如何实现。
有人能告诉我我做错了什么吗?它编译和启动没有错误,但只显示黑度。 Cube()中的其他绘图算法是相同的。我已经尝试将pon(正1.0),mon(减去1.0),pgr(正黄金比率),mgr(减去黄金比率)的大小减小到当前值的一半。仍显示没有渲染的三角形。
我真的很茫然,并会感激任何帮助。
提前谢谢你。 : - )
class Icosahedron
{
public Icosahedron()
{
int one = 0x10000;
float zro = 0.0f;
float pon = 1.0f;
float mon = -1.0f;
float pgr = 1.618033989f;
float mgr = -1.618033989f;
float vertices[] = {
pgr, pon, zro,
pgr, mon, zro,
pon, zro, pgr,
pon, zro, mgr,
zro, pgr, pon,
zro, pgr, mon,
zro, mgr, pon,
zro, mgr, mon,
mon, zro, pgr,
mon, zro, mgr,
mgr, pon, zro,
mgr, mon, zro
};
int colors[] = {
0, 0, 0, one,
one, 0, 0, one,
one, one, 0, one,
0, one, 0, one,
0, 0, one, one,
one, 0, one, one,
one, one, one, one,
0, one, one, one,
0, 0, one, one,
one, 0, one, one,
one, one, one, one,
0, one, one, one,
0, 0, one, one
};
byte indices[] = {
0, 5, 4,
0, 4, 2,
0, 2, 1,
0, 1, 3,
0, 3, 5,
1, 6, 7,
1, 7, 3,
1, 2, 6,
2, 8, 6,
2, 4, 8,
3, 7, 9,
3, 9, 5,
4, 10, 8,
4, 5, 10,
5, 9, 10,
6, 11, 7,
6, 8, 11,
7, 11, 9,
8, 10, 11,
9, 11, 10
};
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
vbb.order(ByteOrder.nativeOrder());
mVertexBuffer = vbb.asFloatBuffer();
mVertexBuffer.put(vertices);
mVertexBuffer.position(0);
ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4);
cbb.order(ByteOrder.nativeOrder());
mColorBuffer = cbb.asIntBuffer();
mColorBuffer.put(colors);
mColorBuffer.position(0);
mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
mIndexBuffer.put(indices);
mIndexBuffer.position(0);
}
public void draw(GL10 gl)
{
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
gl.glColorPointer(4, GL10.GL_FIXED, 0, mColorBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, 20, GL10.GL_UNSIGNED_BYTE, mIndexBuffer);
}
private FloatBuffer mVertexBuffer;
private IntBuffer mColorBuffer;
private ByteBuffer mIndexBuffer;
}
答案 0 :(得分:1)
我看到的唯一错误是你需要将60作为第二个参数传递给glDrawElements(),而不是20.你需要指定索引的数量,而不是三角形的数量。