gpt4 book ai didi

java - ShapeRenderer 转换干扰 LibGDX 中的网格转换

转载 作者:太空宇宙 更新时间:2023-11-04 07:38:01 26 4
gpt4 key购买 nike

我正在开发一款包含大量旋转变换的游戏,但我遇到了一个看似非常简单的问题 - 我认为我做错了什么。

我用 ShapeRenderer 绘制一个三角形,如下所示:

shapeRend.begin(ShapeType.Filled);
shapeRend.setColor(1, 1, 1, 1);
shapeRend.identity();
shapeRend.translate(xx, yy, 0);
shapeRend.rotate(0, 0, 1, angle);
shapeRend.triangle(-.08f, -.08f, .08f, -.08f, 0, +.08f);
shapeRend.end();
shapeRend.identity();

这一切都很好,但我有一些网格是在其他地方绘制的。对于这个三角形(我假设所有的形状渲染器)发生并绘制的任何变换,这些变换会影响所有网格。这真是一个痛苦。

由于网格上的变换是通过实际更改顶点来处理的(我在源代码中可以看到),我认为在 ShapeRenderer 变换后 OpenGL 变换没有被重置的情况下还有其他原因在起作用?这非常令人沮丧,看起来确实是一个小故障,但它会是一个相当大的小故障,因为直到现在我才发现它没有被发现。有什么建议吗?

我正在使用 OpenGL ES 1.x 的“最新”夜间版本的 LibGDX 上运行

最佳答案

对于 OpenGL ES 1.x,ShapeRenderer 使用 ImmediateModeRenderer10 (参见ShapeRenderer constructor)。 ShapeRenderer 确实跟踪其自己的 Matrix4(“变换”字段)中的旋转,但是当 begin(Matrix4, int) 时在底层渲染器上调用,组合的相机+变换矩阵被向下传递,并将其存储到全局 OpenGL状态(特别是GL_PROJECTION矩阵)。

ShapeRenderer 不会“推送”或“弹出”全局矩阵状态,因此您可以在 shapeRend 调用周围自行执行此操作(请参阅 http://www.swiftless.com/tutorials/opengl/pop_and_push_matrices.html )以保存/恢复矩阵,或者您可以在渲染网格之前简单地重置 GL_PROJECTIONGL_MODELVIEW 矩阵。第二种方法更符合大多数 Libgdx 的工作方式(每个渲染器都会在 begin() 处设置它所依赖的状态,并且不假设全局状态中的任何内容都存在)。

或者,您可以切换到 OpenGL ES 2.0,它没有任何全局矩阵状态(所有变换均通过着色器私有(private)“统一”进行,请参阅 ImmeidateModeRenderer20.end())。

关于java - ShapeRenderer 转换干扰 LibGDX 中的网格转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com