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()代码>
解决了我的问题,现在它显示正确。哇,谢谢你快速的回答!这件事澄清了不少!读了你的答案后,我意识到我的错误是什么。哇,谢谢你快速的回答!这件事澄清了不少!读了你的答案后,我意识到我的错误是什么。