这必须很简单,但是我很想念它.
我有一个具有> 32767顶点的复杂模型.现在,索引只能以GL_UNSIGNED_BYTE或GL_UNSIGNED_SHORT类型传递给opengl. java没有unsigned的概念,因此unsigned short选项映射为16位或32767的简单(signed)short.当我指定顶点时,我需要传递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.
总结以上是内存溢出为你收集整理的java opengl:具有> 32767个顶点的glDrawElements()全部内容,希望文章能够帮你解决java opengl:具有> 32767个顶点的glDrawElements()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)