gpt4 book ai didi

opengl-es - android/openGL 立方体与 GL_TRIANGLE_FAN

转载 作者:行者123 更新时间:2023-12-02 15:41:37 25 4
gpt4 key购买 nike

我是 openGL ES 的新手,我想构建一个简单的立方体,但似乎在让索引字节缓冲区拥有 4 个不同的 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,我认为这不存在......

最佳答案

您的假设是正确的,如果没有 primitive_restart 扩展,您无法在一次调用 glDrawElements 中渲染多个三角形扇形。你可以做的是使用glMultiDrawElements,你可以在一次调用中绘制多个图元,但它的使用有点麻烦,我不确定它是否真的比单个三角形给你带来性能优势列表(尤其是这个简单的立方体)。

我给你的一般提示是,远离复杂的基元,如三角形条和扇形,因为它们仅用于一些特殊的小几何形状(无论如何,你不会获得任何性能优势)。较大的通用网格需要付出更多努力才能真正从这些原始类型(如果有)中获得优势。只需使用一个简单的索引三角形列表就可以了。

顺便说一句,如果您确实想要立方体的“复杂”镶嵌,您可以从单个三角形带构建立方体,但解决方案取决于您或谷歌。

编辑:刚刚查找了 GLES 规范,似乎 ES 中删除了 glMultiDraw... 函数。因此,没有办法绕过单个索引三角形列表(或三角形带解决方案),至少如果您想在一次调用中绘制立方体,这是可取的。

关于opengl-es - android/openGL 立方体与 GL_TRIANGLE_FAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6992853/

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