我想在我的像素着色器中输出每个像素的实际相机距离。这意味着,结果应该(除了精度和夹紧的一些细微变化)不取决于近/远裁剪平面。
此外,一个正好位于近平面(并与之平行)的平面因此不应输出统一的结果,因为近平面中间的像素比边界上的像素更靠近相机。
如何计算像素着色器中每个像素的实际相机距离?(实际的着色器语言无关紧要)
您发送的相机位置是统一的。您将位置发送到可变的片段着色器。您可以对这些向量使用内置的距离函数。
它看起来像这样,但如果您不需要它,请不要使用 .w 使其过于复杂。
或者,将顶点位置乘以 ModelView 矩阵,然后使用 length() 。
这是 Cg 中的示例http://developer.download.nvidia.com/shaderlibrary/packages/DepthColor.cgfx.zip
它是为 FX Composer 设置的,对于任何其他格式都应该很容易采用。