OpenGL 近平面剪裁太多

OpenGL near plane is clipping too much

我的相机出现一些问题,近平面似乎太远,即使我将它设置为 0.1 或更低。似乎已经有一些偏移值。所以你不能真正靠近场景中的任意对象。

下面是错误的视觉外观。

显示的黑色三角形是剪裁。 目前我正在使用透视矩阵,这是相关代码。

Matrix4x4 Matrix4x4::Perspective(Float fov, Float aspectRatio, Float near, Float far)
{
    Matrix4x4 result(1.0f);

    Float q = 1.0f / tan(toRadians(0.5f * fov));
    Float a = q / aspectRatio;

    Float b = (near + far) / (near - far);
    Float c = (2.0f * near * far) / (near - far);

    result.elements[0 + 0 * 4] = a;
    result.elements[1 + 1 * 4] = q;
    result.elements[2 + 2 * 4] = b;
    result.elements[2 + 3 * 4] = -1.0f;
    result.elements[3 + 2 * 4] = c;

    return result;
}

我不觉得这个错误来自数学class。这是因为数学代码主要来自我一直从事的另一个项目。从那里工作得很好。 我也不怀疑这是我渲染它的方式(前向渲染器)。我相信我的指示是好的,因为我可以通过鼠标和键盘移动和旋转相机。

但是!我怀疑是缓冲区。 OpenGL 缓冲区。但我不是很确定。

我希望有人能给我一些建议,告诉我如何找到并解决这个错误。

提前谢谢你。

好吧,一张图片的价值超过 1000 个字,所以:

正如我在评论中提到的,如果你的立方体是一半大小 r=1.0 并且你将相机设置在距立方体中心 r 的距离内,你仍然会被 z_near 切割为立方体边缘在 <sqrt(2),sqrt(3)> 范围内远离中​​心,因此所有朝向相机的边缘都将被切断 ...

但也如前所述,这只是猜测,因为您没有提供任何与此相关的测试数据(矩阵和网格内容)...

PS右边是你的相机设置的立方体侧视图我猜你已经设置好了。绿色(+/-)Z是你的视线方向

"glEnable(GL_DEPTH_CLAMP)" 解决了问题