Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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 我是否总是必须为libGDX中的可渲染文件指定索引数组?_Java_Opengl_Libgdx_Lwjgl - Fatal编程技术网

Java 我是否总是必须为libGDX中的可渲染文件指定索引数组?

Java 我是否总是必须为libGDX中的可渲染文件指定索引数组?,java,opengl,libgdx,lwjgl,Java,Opengl,Libgdx,Lwjgl,现在我有一个项目设置了两个网格,它们自己正确地渲染 我的目标是向其中一个(我要显示的曲面)添加照明,该曲面由GL10\u GL\u三角形组成,而不是另一个(辅助栅格),后者(显然)由GL10.GL\u线组成 到目前为止,我成功地将2编译成可渲染文件,如下所示: grid.mesh.setVertices(gridMeshArray); grid.meshPartOffset = 0; grid.meshPartSize = grid.mesh.getNumIndices(

现在我有一个项目设置了两个网格,它们自己正确地渲染

我的目标是向其中一个(我要显示的曲面)添加照明,该曲面由
GL10\u GL\u三角形
组成,而不是另一个(辅助栅格),后者(显然)由
GL10.GL\u线
组成

到目前为止,我成功地将2编译成可渲染文件,如下所示:

    grid.mesh.setVertices(gridMeshArray);
    grid.meshPartOffset = 0;
    grid.meshPartSize = grid.mesh.getNumIndices();
    grid.primitiveType = GL10.GL_LINES;
    grid.material = new Material();
    grid.bones = null;

    sampleSurface.mesh.setVertices(meshVArray);
    sampleSurface.mesh.setIndices(meshIArray);
    sampleSurface.meshPartOffset = 0;
    sampleSurface.meshPartSize = sampleSurface.mesh.getNumIndices();
    sampleSurface.primitiveType = GL10.GL_TRIANGLES;
    sampleSurface.material = new Material();
    sampleSurface.bones = null;
当我运行程序时,我看到的是样本曲面,而不是网格。 渲染如下:

    MB.begin(cam.getCam());
        MB.render(sampleSurface);
        MB.render(grid);
    MB.end();
很可能值得一提的是,我现在没有使用任何着色器,只使用以下命令:

    cam.apply(Gdx.gl10);
这不是最好的做法,我计划一旦有时间深入讨论这个话题,就把它替换掉

我的猜测是,网格不会显示,因为我没有为它们指定索引数组。这似乎是两种可渲染性之间的唯一区别。(不计算环境,因为更改
grid.environment
没有任何影响。)

定义索引数组对于网格来说似乎非常不合逻辑,因为它实际上没有重叠的顶点。我不知道该怎么做,也不知道问题出在哪里,因为这两个网格自己画得很完美。感谢您的帮助

Renderable
#meshPartSize
成员用于指定要渲染的网格部分的大小(以顶点为单位)。如果不渲染条带,则此条带将使用基本体的数量乘以每个基本体的顶点数量。因此,如果要渲染4个三角形(GL_三角形),则大小为12(4个三角形*3个顶点=总共12个顶点)。如果要渲染12条线(GL_线),则大小为24(12条线*2个顶点=总共24个顶点)

实际上,这意味着,如果对网格进行索引,则大小等于要渲染的索引数。如果网格没有索引,则它等于要渲染的顶点数。如果网格包含的索引数大于零(
mesh.getNumIndices()>0
),则该网格被视为索引

待指定:如果索引,则
glpaurements
将与指定的偏移量和计数参数一起使用。否则,
glDrawArrays
将与指定的偏移量和计数参数一起使用

也就是说:请注意,某些类可能需要索引网格,还请注意,可能不完全支持GLES1.x。因此,在实践中,建议使用索引网格和GLES2。

Renderable
#meshPartSize
成员用于指定要渲染的网格部分的大小(以顶点为单位)。如果不渲染条带,则此条带将使用基本体的数量乘以每个基本体的顶点数量。因此,如果要渲染4个三角形(GL_三角形),则大小为12(4个三角形*3个顶点=总共12个顶点)。如果要渲染12条线(GL_线),则大小为24(12条线*2个顶点=总共24个顶点)

实际上,这意味着,如果对网格进行索引,则大小等于要渲染的索引数。如果网格没有索引,则它等于要渲染的顶点数。如果网格包含的索引数大于零(
mesh.getNumIndices()>0
),则该网格被视为索引

待指定:如果索引,则
glpaurements
将与指定的偏移量和计数参数一起使用。否则,
glDrawArrays
将与指定的偏移量和计数参数一起使用


也就是说:请注意,某些类可能需要索引网格,还请注意,可能不完全支持GLES1.x。因此,在实践中,建议使用索引网格和GLES2。

喝了一杯清爽的啤酒,散步后,我读了@Xoppa的答案,这让我看到了我的错误

简单地改变

grid.meshPartSize=grid.mesh.getNumIndices()

grid.meshPartSize=grid.mesh.getNumVertices()


解决了我的问题,现在它显示正确。

喝了一杯清爽的啤酒,走了一会儿,我读了@Xoppa的答案,这让我看到了我的错误

简单地改变

grid.meshPartSize=grid.mesh.getNumIndices()

grid.meshPartSize=grid.mesh.getNumVertices()


解决了我的问题,现在它显示正确。

哇,谢谢你快速的回答!这件事澄清了不少!读了你的答案后,我意识到我的错误是什么。哇,谢谢你快速的回答!这件事澄清了不少!读了你的答案后,我意识到我的错误是什么。