【问题标题】:Project camera depth onto a 3D plane将相机深度投影到 3D 平面上
【发布时间】:2013-06-19 20:54:22
【问题描述】:

是否可以将相机深度投影到平面上?
让我解释一下,如果我只是在平面上传输深度缓冲区,它将始终显示从相机角度看的深度。但是我怎样才能继续显示深度,但从平面的角度来看。
我想将效果应用于着色器。对我来说,这可能是一个矩阵问题,但我不明白。

【问题讨论】:

    标签: opengl directx glsl shader cg


    【解决方案1】:

    深度缓冲区是相对于表示的,可以使用(例如)着色器将其投影到任何平面。但是..

    深度缓冲区不是对象的完整几何表示,而只是从相机 POV 中“被看到”的表面。 如果您投影深度缓冲区,部分对象可能不会被投影(见图)。

    在图片中,相机(红眼)正在寻找一个物体(黑色)。深度缓冲区表示相机和红色表面之间的距离。 对于平面(蓝线),您可能想要得到整个物体的投影(蓝色表面),但是将红色表面投影到平面上,您只会得到整个蓝色表面的一小部分。

    如果你想要整个蓝色表面,

    1. 将摄像头的 POV 更改为正好在飞机后面。
    2. 渲染场景。
    3. 获取深度缓冲区并将其保存到纹理/图像/缓冲区 (P)。
    4. 重置您的摄像机 POV
    5. 为您的着色器使用图像 (P) 来渲染场景

    【讨论】:

    • 感谢您的回答,深度缓冲区当然不是对象的几何表示。在我的示例here 中,我有相机的视角,但我不知道如何获得飞机的 POV。你明白这个问题吗?我不知道如何继续获得正确的深度。
    • 假设你的平面是一个 QUAD(A,B,C,D), 1) 使用 A-B 和 A-C 的叉积,你得到平面的法线。这可以用作相机方向。 2)您可以使用四边形的中心点作为相机位置:(A + C)/ 2。 3)根据您的需要将相机设置为正交和其他参数。这大概就是“难”了。例如。 camara 的“远”平面的尺寸可能是您的 QUAD 的大小
    • 好的,非常感谢您的回答,我想知道是否需要新相机,但似乎是...我想如果我在着色器中使用一些矩阵来更改从它可以工作的位置的角度来看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2023-03-08
    • 2011-11-25
    相关资源
    最近更新 更多