ここまで来ればあとは簡単です。
肌が表示されていた部分が透明になっているということは、
透明ピクセルの時もZバッファへの書き込みがされているということです。
アルファテストを入れて、透明ピクセルの時はZバッファに書き込まないようにします。
ただ、Direct3D 11にはアルファテストという機能自体はありません。
ピクセルシェーダで代わりに処理をしてあげる必要があります。
通常、ピクセルシェーダは最後にピクセル情報を返します。
例としてはこんな感じ
1 | return float4(ambient + diffuse + specular, alpha); |
---|
ここで、ピクセルシェーダでのみ使用出来る制御構文discardを使用します。
1 | // アルファ値0の場合は表示しない |
---|---|
2 | if (alpha == 0) |
3 | discard; |
discardを使用するとピクセルを出力しないため、Zバッファへの書き込みもキャンセルすることが出来ます。
アルファ値0の時にdiscardをするように処理すると、正常に表示されるようになりました。
大体動いた気がするので、現時点のソースを置いておきます。参考になるかな。