我正在将场景渲染到纹理,然后使用投影绘制具有该纹理的水平面。我在网上看到的大多数示例都在视图/投影矩阵中传递给顶点着色器并转换顶点,然后在像素着色器中进行:
projection.x = input.projectionCoords.x / input.projectionCoords.w / 2.0 + 0.5;
projection.y = input.projectionCoords.y / input.projectionCoords.w / 2.0 + 0.5;
我有一个着色器,它可以执行以下操作,它也可以工作,但我不知道我在哪里找到了这个特定的代码,也不知道它如何与上面的代码给出相同的结果。这是我的代码
顶点着色器:(世界是一个身份矩阵,viewProj 是我的相机组合的 viewProjection 矩阵):
output.position3D = mul(float4(vsin.position,1.0), world).xyz;
output.position = mul(float4(output.position3D,1.0), viewProj);
output.reflectionTexCoord.x = 0.5 * (output.position.w + output.position.x);
output.reflectionTexCoord.y = 0.5 * (output.position.w - output.position.y);
output.reflectionTexCoord.z = output.position.w;
像素着色器:
float2 projectedTexCoord = (input.reflectionTexCoord.xy / input.reflectionTexCoord.z);
让我感到困惑的是0.5 * (output.position.w + output.position.x)
and的用法0.5 * (output.position.w - output.position.y)
。这如何产生相同的效果? w 分量在这里是什么意思?