[英]Modern OpenGL problems with Orthographic Projection
我正确到了这一点。 我已经做了一些研究,但我仍然没有弄清楚这一点。
我有一个程序,用一个颜色绘制每个面的立方体。 然后我在Y轴和X轴(分别为-45和+45)旋转这个立方体。
问题是它没有像我期望的那样呈现,立方体在某些时候被剪裁了。
代码:
projection = glm::ortho(-1.0f, +1.0f, -1.0f, +1.0f, +1.0f, -1.0f);
camera = glm::lookAt(
glm::vec3(+0.0f,+0.0f,+1.0f),
glm::vec3(0.0f,0.0f,0.0f),
glm::vec3(0.0f,1.0f,0.0f)
);
model = glm::mat4(1.0f);
model = glm::rotate(model, -45.0f, glm::vec3(0.0f, 1.0f, 0.0f));
model = glm::rotate(model, +45.0f, glm::vec3(1.0f, 0.0f, 0.0f));
mvp = projection * camera * model;
我定义的所有顶点都是用±0.25制作的。 所以我至少想到了我的zNear和zFar的这些值,它们仍然适合音量,但是当我改变音量时
projection = glm::ortho(-1.0f, +1.0f, -1.0f, +1.0f, +1.0f, -1.0f);
对于
projection = glm::ortho(-1.0f, +1.0f, -1.0f, +1.0f, +2.0f, -1.0f);
它工作得很好
但它不起作用
projection = glm::ortho(-1.0f, +1.0f, -1.0f, +1.0f, +1.0f, -2.0f);
有人能解释一下为什么吗? 我的意思是,我知道如果我投入更多的值,投影立方体将具有更大的体积,因此它将呈现得很好。 我知道右下角顶点在多维数据集外面,zNear和zFar为+1.0和-1.0(应用矩阵后顶点值类似于1.76)但是如果我将zFar立方体扩展到-2.0f它应该只适合对,不应该?
我试着阅读红皮书上的内容,还有Peter Shirley的书籍计算机图形基础知识。 甚至自己制作了矩阵,但结果相同。
无论如何,提前谢谢!
发生的事情是,立方体被相机的远夹平面夹住。
超出远剪裁平面的任何内容都不会被渲染。
在原始代码中,远剪裁平面设置为+1,这非常接近相机。 超出1个单位的任何内容都不会被渲染。
在您的工作代码中,您将远剪裁平面设置为+2,因此不会渲染超过2个单位的任何内容。
由于立方体比相机靠近2个单位,因此渲染整个立方体。
通常,您希望近平面位于远平面之前。 我不确定如果你出于某种原因使得远平面为负并且近平面为正而会发生什么...尝试交换它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.