前提
「DirectX12の魔導書」という参考書を用いてDirectX12の勉強をしているのですが、理解できない挙動があったため質問させていただきました。ご教授いただければ幸いです。
発生している問題・エラーメッセージ
第4章「ポリゴンの表示」を進めている最中に問題が発生しております。この章の最後で、スクリーン上の位置によって頂点色が変わる四角形ポリゴンを表示するシェーダーの実装を行います。私が実装したものは以下の通りです。
頂点シェーダー
HLSL
float4 BasicVS(float4 pos: POSITION) : SV_POSITION{ return pos; }
ピクセルシェーダー
HLSL
float4 BasicPS(float4 pos : SV_POSITION) : SV_TARGET{ return float4((float2(0,1) + pos.xy) * 0.5f,1,1); }
シェーダー以外のファイルの内容はここにあるものと同じです。これを実行すると以下のように表示されます。
一方でシェーダーファイルの中身を上記リンクと同じように書き直すと異なる結果が得られます。こちらの結果が想定していた挙動です。
頂点シェーダー
HLSL
struct Output { float4 pos:POSITION; float4 svpos:SV_POSITION; }; Output BasicVS(float4 pos : POSITION) { Output output; output.pos = pos; output.svpos = pos; return output; }
ピクセルシェーダー
HLSL
struct Input { float4 pos:POSITION; float4 svpos:SV_POSITION; }; float4 BasicPS(Input input ) : SV_TARGET{ return float4((float2(0,1)+ input.pos.xy)*0.5f,1,1); }
描画結果
違いとしては、座標情報を直接渡すのではなく構造体に入れて渡すようにしただけだと思うのですが、なぜこのような違いが出るのでしょうか?
グラフィックスに詳しい方がいらっしゃったら何かお教えいただけますと幸いです。
補足情報(FW/ツールのバージョンなど)
シェーダーモデル:Shader Model 5.0
Visual Studio 2019
まだ回答がついていません
会員登録して回答してみよう