Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java opengl:glDraweElements()与>;32767个顶点_Java_Android_Opengl Es_Unsigned_Short - Fatal编程技术网

java opengl:glDraweElements()与>;32767个顶点

java opengl:glDraweElements()与>;32767个顶点,java,android,opengl-es,unsigned,short,Java,Android,Opengl Es,Unsigned,Short,这一定很简单,但我错过了 我有一个复杂的模型,它有超过32767个顶点。现在,索引只能作为类型GL_UNSIGNED_BYTE或GL_UNSIGNED_SHORT传递给opengl。java没有unsigned的概念,因此unsigned short选项映射为simply(signed)short,即16位或+32767。指定顶点时,需要向opengl传递一个短[],其中数组中的值指向vertice数组中的顶点。但是,如果有>32767个顶点,则该值不适合短[] 是否有其他方法指定索引?下面是代

这一定很简单,但我错过了

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

是否有其他方法指定索引?下面是代码片段,谢谢

    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时,你就完成了


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

顺便说一句,这恰好是在使用opengl es 1.0的android平台上。我认为大多数手机无法以合理的性能处理这种复杂性。是的,我得出了同样的结论。对于一种高度重视类型安全的语言来说,你有点奇怪。我最初使用char,因为它本质上是一个无符号的短字符。我将指数计算为int,然后进行转换,以使其更简单并确保Hanks,最后我将它们视为int,并使用您上面提供的cveat将其转换为short,尽管我不知道转换操作是否会自动处理该问题。让您想知道创建java绑定的人是怎么想的。。。java在类型安全等方面非常强大。不要谈论OpenGL,而要谈论OpenGL ES:)。ES不支持索引的GL_UNSIGNED_INT,只支持GL_UNSIGNED_BYTE和GL_UNSIGNED_SHORT,这与Java无关。接下来,转换为INT时不需要减法。强制转换操作会处理它。e、 例如,int 32768转换为short is-32768。@farble1670:我一直认为Java中缺少无符号类型是一种设计缺陷。