平面附近的OpenGL剪切太多

时间:2016-12-13 04:16:37

标签: c++ opengl math camera clip

我的相机存在一些问题,即使我将它设置为0.1或更低,近平面似乎也太远了。似乎已经存在一些抵消价值。所以你无法真正接近场景中的任意对象。

下面是bug的视觉外观。 enter image description here

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

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;
}

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

但是!我怀疑的是缓冲区。 OpenGL缓冲区。但我不完全确定。

我希望有人能就如何捕捉和解决这个问题向我提出一些建议。

提前谢谢。

2 个答案:

答案 0 :(得分:3)

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

cube cut

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

但同样提到这只是猜测,因为你没有提供任何与此相关的测试数据(矩阵和网格内容)......

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

答案 1 :(得分:2)

“glEnable(GL_DEPTH_CLAMP)”解决了问题