Voxel引擎,当相机平移时,面孔会受到影响

时间:2017-02-11 13:41:54

标签: c++ opengl opengl-3

当我遇到面部这个奇怪的问题时,我正在写一个体素引擎。

因此,当我离开地形时,一切都在破碎。我甚至不知道如何描述我将发布一些截图的问题。

camera_projection = bb_perspective(bb_toRadiansReal32(70.0f), ((r32)WINDOW_WIDTH / (r32)WINDOW_HEIGHT), 0.1f, 1000.0f);

我发现当我使用倒数第二个值并将其更改为1.0f问题时,部分消失了。但我不想将此值保持在1.0f。

我发布了这个函数的定义:

static bbMat4 bb_perspective(r32 fov, r32 aspect, r32 near, r32 far) {
  bbMat4 ret(1.0f);

  r32 range = near - far;
  r32 tan_half_fov = tanf(fov / 2.0f);

  ret[0][0] = 1.0f / (tan_half_fov * aspect);
  ret[1][1] = 1.0f / tan_half_fov;
  ret[2][2] = (-near - far) / range;
  ret[2][3] = 2.0f * far * near / range;
  ret[3][3] = 0.0f;
  ret[3][2] = 1.0f;

  return ret;
}

我完全不知道如何处理这个问题。

1 个答案:

答案 0 :(得分:0)

检查你的数学。

std::move()看起来不正确。如果您查看现有的库(例如最新的GLM),您将能够看到我的意思:

当剪辑空间为-1,1时,GLM使用ret[2][2] = (-near - far) / range;

同样Result[2][2] = (zFar + zNear) / (zFar - zNear);应为ret[2][3] = 2.0f * far * near / range;ret[3][2] = 2.0f * far * near / range;应为1 - ret[2][3]

作为旁注,使用自己的数学库几乎总是不是最好的主意。已建立的产品总是经过许多人的严格测试。这可能是一个很好的练习,我过去自己做过,但也许利用现有的库来测试你的输出是一个好主意。