在像素着色器中计算世界空间坐标

l3u*_*fly 5 directx position hlsl pixel-shader

我有一个像素着色器,我想根据我的世界空间坐标来计算每个像素的位置。我该怎么做?我需要什么?

我有一个ps_input具有float4位置的结构:SV_POSITION。我假设这很重要,但是存储在里面的值似乎有点可笑。

我似乎无法弄清楚它们之间的关系。例如,如果一个像素是2d,那么为什么它具有w分量或z分量呢?

我正在使用DirectX,并且像素着色器在中HLSLC++作为我在CPU上的编程语言。

任何帮助,将不胜感激。

Tor*_*din 5

如果我没记错的话,SV_POSITION只是0-> W 0-> H,因此它描述了它在屏幕上的位置。该站点包含更多信息:http : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb509647(v=vs.85).aspx

为了使像素进入世界空间,您可以将像素坐标转换回世界空间。数学和所有方面都有点棘手(我想是!),但是本文应该对您有所帮助! http://jcoluna.wordpress.com/2011/01/27/reconstructing-view-space-position-from-depth/

否则,明智地寻找像素到视野。我知道您想要世界空间,但将所有内容转换为视图空间可能更快。