シーンをテクスチャにレンダリングしてから、投影を使用してそのテクスチャで水平面を描画しています。Webで見たサンプルのほとんどは、ビュー/プロジェクションマトリックスで頂点シェーダーに渡され、頂点を変換してから、ピクセルシェーダーで次のように処理されます。
projection.x = input.projectionCoords.x / input.projectionCoords.w / 2.0 + 0.5;
projection.y = input.projectionCoords.y / input.projectionCoords.w / 2.0 + 0.5;
私は次のことを行うシェーダーを持っていて、それも機能しますが、この特定のコードをどこで見つけたのか、または上記のコードで同じ結果がどのように得られるのかわかりません。これが私が持っているコードです
頂点シェーダー:(世界はidentityMatrixであり、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)
です0.5 * (output.position.w - output.position.y)
。これはどのように同じ効果をもたらし、wコンポーネントはここで何を意味しますか?