【发布时间】:2013-08-26 15:48:46
【问题描述】:
我的问题是,在 Libgdx 中,由于 Mesh 类在这段简单的代码中,我创建了一个 3D 三角形:
mesh = new Mesh(true, 3, 3,
new VertexAttribute(VertexAttributes.Usage.Position, 3, "vPosition"));
mesh.setVertices(new float[] { vert1.x, vert1.y, vert1.z, vert2.x, vert2.y, vert2.z, vert3.x, vert3.y, vert3.z });
mesh.setIndices(new short[] { 0, 1, 2 });
对我来说重要的是能够改变存储三角形顶点坐标的vert1、vert2、vert3,因为我想在游戏中创建三角形。
当显示三角形时,它似乎出现在所需的位置,根据我在顶点 Vector3 中给他的内容。
现在,事情是这样的:我曾经使用 camera.rotateAround() 来创建一种环顾场景的方法,并且我还创建了一个小框来查看我的带有相机的脚本是否仅在工作。这是 !如果我移动相机,我可以看到我的盒子在旋转。但是当我围绕场景旋转时,我创建的三角形不会旋转,并且在屏幕上完全静止不动,就像它是 2D 网格一样!
所以这是我的问题:如何在 Libgdx 中制作 3D 三角形以及如何根据相机移动制作三角形渲染?
【问题讨论】:
-
API 文档对我来说不是很清楚,但也许 Mesh 的第一个参数,一个布尔 isStatic 变量,应该是 false。
-
Mesh 类是原始 OpenGL 的一个非常简单的包装器,所以应该没有什么特别“2d”的东西。也许显示更多代码。你如何画一个工作箱?您的相机是否适用于与框渲染相同的三角形渲染?您是否正在重新计算网格的顶点?
-
请显示更多代码... OpenGL 着色器需要明确应用相机变换。你
update你的相机吗?你是如何渲染一个 3D 盒子的? -
@P.T.是正确的,我们需要将着色器中的当前相机投影矩阵与当前顶点位置相乘。显示您使用的着色器的整个代码以及使用着色器程序渲染三角形的代码。
-
@turbodoom:这取决于您是否要在代码中制作 2d 或 3d 网格,您已经使用所有顶点制作了网格,并且您已经创建了一个三角形,这意味着您有一个 2d 三角形在 3d 平面中,定义的各个顶点在特定的 3d 平面中生成一个三角形