4

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

还有另一种指定索引的方法吗?代码片段如下,

    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);
    ...
4

1 回答 1

5

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

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

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

于 2010-12-02T02:25:14.600 回答