我有一个项目是用模拟制作电影。仿真是从另一个定义投影矩阵的程序中传递的。
我遇到的问题是,另一个程序有一种“假的”正字法视图,我的意思是它的投影矩阵如下:
PerspectiveMatrix = glm::perspective(3.5, 1, 1.0f, 50.0f); 它使用LookAt函数:
ViewMatrix = glm::lookAt(
(2000,-3000,2000), // eye
(0,0,0), // center
(0,0,1)//up
);所以,我所说的‘假’正射视图的意思是,他们把相机放置得足够远(和放大场景的小角度),使得“视图线”(因为没有更好的术语)几乎是平行的,就像在真实的正射投影中一样。
所以这一切都很好,但是我遇到的问题是,在另一个程序中,所有的高精度深度测试都接近摄像机,在我的例子中,这是一个空空间。这意味着有相当多的z战斗,如下面的链接所示:

所以我的问题是,我可以用什么方法来改变我的深度测试,以使缓冲器偏向遥远的平面?或者其他类似的东西。我试着把NearPlane移到更远的地方,结果是放大屏幕,所以我用一个更窄的角度来补偿透视图。但是,这样做足够的次数使问题更糟,没有z战斗,但它没有把事情画在正确的深度。球体在所有东西上都是最上面的。
我确实在Outerra找到了一些信息:http://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html,他们有一些逆转深度缓冲区的想法,但是它是特定于Nvidia的,我需要同时兼容ATI和Nvidia。
发布于 2014-04-25 15:41:31
发布于 2015-12-28 21:43:21
比上面的任何一个都简单:把你的眼珠子移到离相机更远的地方。看起来它是glm::透视图()的第三个参数,在您的示例中设置为1.0。在开始剪掉场景前景中的内容之前,尽可能大地设置它,您的z缓冲区精度问题可能会消失。
反向浮动z是伟大的,但真正需要的场景与更广泛的视野和更深的几何。对于像你这样的接近正字法的场景,只需适当地设置你的“近/远”。
https://stackoverflow.com/questions/23295481
复制相似问题