Je suis quelque chose de nouveau à OpenGL ES et je veux construire un cube simple, mais semble avoir quelques problèmes en laissant le tampon d'octets d'indice que je veux avoir 4 TRIANGLE_FANs différents, comment pourrais-je allez à faire cette/réécriture mon code:cube android/openGL avec 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);
}
}
Je suppose que vous devez utiliser GL10.GL_PRIMITIVE_RESTART, mais avec Android, je ne pense pas que cela existe ...
Salut Christian, merci beaucoup pour votre réponse! Comme je l'ai dit, je suis assez nouveau à OpenGL, et votre réponse réfléchie a beaucoup aidé. Merci encore – travis
@ user848162 Si cela a aidé, un vote à la hausse (et peut-être accepter) serait apprécié. –
Je pense vraiment que la raison en est que les fans ont une utilisation extrêmement limitée, et ils étaient surtout utiles lors de la programmation manuelle des formes lors de l'utilisation du mode immédiat ('glBegin()/glEnd()'). Cela expliquerait pourquoi Microsoft [dépouillé des fans de triangle dans D3D10] (http://gamedev.stackexchange.com/questions/35547/why-are-triangle-fans-not-supported-in-direct3d-10-or-later) – bobobobo