gpt4 book ai didi

java opengl : glDrawElements() with >32767 vertices

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:03 30 4
gpt4 key购买 nike

我有一个具有 >32767 个顶点的复杂模型。现在,索引只能作为 GL_UNSIGNED_BYTE 或 GL_UNSIGNED_SHORT 类型传递给 opengl。 java 没有无符号的概念,所以 unsigned short 选项映射到简单的(有符号的)short,即 16 位,或 +32767。当我指定顶点时,我需要向 opengl 传递一个 short[],其中数组中的值指向顶点数组中的一个顶点。但是,如果有 >32767 个顶点,该值将不适合 short[]。

还有其他方法可以指定索引吗?代码 fragment 如下,

    short[] shorts = ... read the indices ...;
...
ShortBuffer indicesBuffer = null;
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * Short.SIZE / 8);
ibb.order(ByteOrder.nativeOrder());
indicesBuffer = ibb.asShortBuffer();
indicesBuffer.put(indices);
indicesBuffer.position(0);
...
gl.glDrawElements(GL10.GL_TRIANGLES, numOfIndices, GL10.GL_UNSIGNED_SHORT, indicesBuffer);
...

最佳答案

我没有使用 Java 中的 OpenGL,所以我在这里推测,但您很有可能只使用负数,其二进制表示与您真正想要的无符号正数相同。您给 GL 一些字节对并告诉它把它们解释为无符号的,只要它们在以这种方式解释时具有正确的值,它就应该可以工作。 Java 在将这些位存储在内存中时是否认为它们意味着不同的东西并不重要。

如果您正在迭代,只需忽略环绕并继续递增。当你达到 -1 时,你就完成了。

如果您将索引数字计算为整数(不存在此范围问题),然后转换为 short,请从大于 32767 的任何数字中减去 65536。

关于java opengl : glDrawElements() with >32767 vertices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331021/

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