繁体   English   中英

java opengl:glDrawElements(),> 32767个顶点

[英]java opengl: glDrawElements() with >32767 vertices

这一定很简单,但我很想念它。

我有一个复杂的模型,有> 32767个顶点。 现在,索引只能作为类型GL_UNSIGNED_BYTE或GL_UNSIGNED_SHORT传递给opengl。 java没有unsigned的概念,因此unsigned short选项映射到简单(signed)short,即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);
    ...

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM