奇怪的透视行为

时间:2017-04-26 12:17:47

标签: c++ opengl voxel

我目前正在实施一个简单的基于体素的游戏。 我有块逻辑和绘图/更新"工作"。但是,我目前正面临着一个奇怪的问题。

我的引擎以大块的方式切割世界。这些是16 * 128 * 16的体积 - 只要有块更新,块就会遍历内部3D阵列(其中包含与块中块ID有关的整数),并将块添加到内部"被绘制"列表直接邻近一块空气。然后将这些块上传到VBO中并稍后绘制。

块的尺寸为1x1x1(ergo,glm::vec4(1.0f, 1.0f, 1.0f, 1.0f)),它们的顶点取决于偏移量。因此,距离块原点最远的块(mBlocks[15][127][15])会将偏移量glm::vec4(15.0f, 127.0f, 15.0f, 1.0f)加上块1x1x1几何体添加到块VBO中。

同样,我已经让这部分工作没有问题。 我也有一个相机类,它有移动相机的方法(moveBy,它可以按照三角形移动相机位置,也可以选择目标点; moveTo直接设置相机位置),设置目标中心点等。

当调用chunk draw()方法时,它会从当前相机中获取当前的ViewProjection矩阵,如下所示:

glm::mat4 vp = cam->getVPMatrix();
glm::mat4 mvp = vp * mTransformation;

Camera::getVPMatrix()方法定义如下:

glm::mat4 view = glm::lookAt(glm::vec3(mPosition), glm::vec3(mTarget), 
glm::vec3(mUp));
glm::mat4 per = glm::perspective(30.0f, 1280.0f/720.0f, 0.0f, 1000.0f);
return per * view;

在运行程序时,我确实绘制了一些东西 - 块本身绘制得很好,平面是白色的,并且阵型也是正确的。但是 - 它似乎所有都是颠倒的。这些块应该堆叠在一起,而是向下堆叠。左右移动相机(即通过+ x和-x增加位置)工作正常,但是在+ y或-y方向上移动位置会产生完全相反的效果。

我怀疑问题出在我的ViewProjection矩阵上,但我无法绕过它。 这是我稍微调整相机位置后看到的: enter image description here

同样,块应该叠加 - 而不是向下。

0 个答案:

没有答案
相关问题