当我遇到面部这个奇怪的问题时,我正在写一个体素引擎。
因此,当我离开地形时,一切都在破碎。我甚至不知道如何描述我将发布一些截图的问题。
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;
}
我完全不知道如何处理这个问题。
答案 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]
作为旁注,使用自己的数学库几乎总是不是最好的主意。已建立的产品总是经过许多人的严格测试。这可能是一个很好的练习,我过去自己做过,但也许利用现有的库来测试你的输出是一个好主意。