3Dプログラミングあるある話
描画順で悩んだら
ZバッファやZソートの前にまずカリングをONにして法線の向きの確認を。
その三角形は思った通りに展開されていないかもしれません。
オブジェクトが真っ黒
ディスプレイモード変更時にオブジェクトが真っ黒になってしまった時は、レンダリングステートの確認を。
ライティングオフしていた場合、新しいデバイスではオンに戻ってるかもしれません。というか戻ってます。
描画順で悩んだら2 (2010/07/23 更新)
Zバッファがちゃんと機能してない?
それはきっとバッファあふれを起こしています。
プロジェクション行列のnear値とfar値をチェックしてください。
0.001f〜10000.0fとか無茶な指定していませんか。
今日びのZバッファは16bit(0〜65535)なので、far値を大きくとりたいなら 1.0f〜6553.5fとか10.0f〜65535.0fくらいに勘弁してあげましょう。
他のマシンで正常に描画されない (2010/07/24 更新)
ビデオカードによる制限という場合もあります。が。
DrawPrimitive等に渡す頂点数、プリミティブ数がおかしいのかもしれません。
ビデオカードはものによっていい加減だったり厳格だったり、いろいろ性格がありますが、いい加減な場合、適当に頂点数を指定しても描画されたりします。
一度描画メソッド(頂点バッファ、インデックスバッファ)を点検してみましょう。
他のマシンで正常に描画されない2 (2010/08/30 更新)
今回はテクスチャ関係でデバイスコンテキストを使った場合です。
昔のWindows(もしくはビデオカードに依存するかもしれませんが)では、αサーフェースのデバイスコンテキストが取れませんでした。
多分GDIがパワーアップしたXP以降で可能になったと思うのですが、そんな感じでデバイスコンテキスト経由でファイルからテクスチャのサーフェースに書き込んだりもできます。
が。
このデバイスコンテキストを経由、つまりXRGB8888やRGB888からARGB8888サーフェースに転送するとα値が全て0に設定されてしまいます。
なんで0?COLORREFで比較できるように?
ともかくデバイスコンテキスト経由で読み込んだ場合は、全てのピクセルのα値を255に設定しなおすようにしましょう。