首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高远离摄像机的深度缓冲精度

提高远离摄像机的深度缓冲精度
EN

Stack Overflow用户
提问于 2014-04-25 14:07:04
回答 2查看 2.9K关注 0票数 6

我有一个项目是用模拟制作电影。仿真是从另一个定义投影矩阵的程序中传递的。

我遇到的问题是,另一个程序有一种“假的”正字法视图,我的意思是它的投影矩阵如下:

代码语言:javascript
复制
PerspectiveMatrix = glm::perspective(3.5, 1, 1.0f, 50.0f); 

它使用LookAt函数:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-25 15:41:31

博客帖子中描述的对数深度和反向深度映射都适用于您。

反浮点法效果较好,在DirectX中工作正常。在OpenGL中,它不会因为设计缺陷而带来任何额外的精度,除非驱动程序公开浮动扩展,通过该扩展,您可以有效地关闭使其无法正常使用的偏见。

AMD支持这个扩展,因为他们的13.12催化剂驱动程序,所以这项技术是可用的所有5000+系列AMD GPU(旧系列不支持驱动程序)。

票数 3
EN

Stack Overflow用户

发布于 2015-12-28 21:43:21

比上面的任何一个都简单:把你的眼珠子移到离相机更远的地方。看起来它是glm::透视图()的第三个参数,在您的示例中设置为1.0。在开始剪掉场景前景中的内容之前,尽可能大地设置它,您的z缓冲区精度问题可能会消失。

反向浮动z是伟大的,但真正需要的场景与更广泛的视野和更深的几何。对于像你这样的接近正字法的场景,只需适当地设置你的“近/远”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23295481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档