我一些我想要什麼新的OpenGL ES,並建立一個簡單的立方體,但似乎有讓我想有4個不同的TRIANGLE_FANs的指數之字節的緩衝區的一些問題,我會怎樣去這樣做/重寫我的代碼:的Android/openGL的立方體GL_TRIANGLE_FAN
public class GLCube{
private float vertices[] = {
1, 1, -1, //p0 - topFrontRight
1, -1, -1, //p1 bottomFront Right
-1, -1, -1, //p2 bottom front left
-1, 1, -1, //p3 front top left
1, 1, 1, //p4 - topBackRight
1, -1, 1, //p5 bottomBack Right
-1, -1, 1, //p6 bottom back left
-1, 1, 1, //p7 front back left
};
private FloatBuffer vertBuff;
private short[] pIndex = {
0, 4, 1, 3, //i0 fan of top front right
5, 4, 1, 6, //i1 fan from bottom right back
2, 1, 3, 6, //i2 fan from bottom left front
7, 3, 4, 6 //i3 fan from top left back
};
private ShortBuffer pBuff;
public GLCube(){
ByteBuffer bBuff = ByteBuffer.allocateDirect(vertices.length * 4);
bBuff.order(ByteOrder.nativeOrder());
vertBuff = bBuff.asFloatBuffer();
vertBuff.put(vertices);
vertBuff.position(0);
ByteBuffer pbBuff = ByteBuffer.allocateDirect(pIndex.length * 2);
pbBuff.order(ByteOrder.nativeOrder());
pBuff = pbBuff.asShortBuffer();
pBuff.put(pIndex);
pBuff.position(0);
}
public void draw(GL10 gl){
gl.glFrontFace(GL10.GL_CW);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertBuff);
gl.glDrawElements(GL10.GL_TRIANGLE_FAN, pIndex.length, GL10.GL_UNSIGNED_SHORT, pBuff);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
}
我認爲你必須使用GL10.GL_PRIMITIVE_RESTART,但與Android,我不認爲這存在...
嘿基督教,非常感謝你的迴應!就像我說的,我對OpenGL相當陌生,你的深思熟慮的迴應已經幫了大忙。再次感謝 – travis
@ user848162如果有幫助,我們將讚賞增加投票(也許接受)。 –
我真的覺得這樣做的原因是球迷,他們都極其有限使用,它們大多是有用的使用即時模式時,當手工編程的形狀('在glBegin()/ glEnd()')。這可以解釋爲什麼微軟[在D3D10剝離出來三角形扇(http://gamedev.stackexchange.com/questions/35547/why-are-triangle-fans-not-supported-in-direct3d-10-or-later) – bobobobo