私はフランク D. ルナの本「DirectX 10 を使用した 3D プログラミングの概要」を読んでいますが、問題の 1 つは使用から切り替えることです。
D3DXCOLOR カラー (128 ビット)
から UINT カラー (32 ビット)
おそらく使用するフォーマット コードは、DXGI_FORMAT_R8G8B8A8_UNORM です。
私の考えでは、これは、バイトレベルでチャネルに関する情報を正確な順序で持つ変数があることを意味します: RGBA (これは正しい解釈ですか?-RGBA が必要なときにそれを読んだことがあると確信しているため、尋ねます)実際には次のようなコードが必要です: A#R#G#B#ここでアルファチャンネルが最初に指定されます。
とにかく、私は次のことを選択しました(おそらくもっと良い方法があります):
UINT color = (UINT)WHITE;
WHITE が定義されている場合:const D3DXCOLOR WHITE(1.0f, 1.0f, 1.0f, 1.0f);
このキャストは、D3DXCOLOR の拡張機能で定義されています。
ただし、DXGI_FORMAT_R8G8B8A8_UNORM を UINT カラー変数と共に使用すると、間違った結果が得られます。ルナはこれをエンディアンに帰します。
これは、D3DXCOLOR からのキャストが RGBA 形式の UINT を生成するためですが、Intel x86 はリトル エンディアンを使用するため、バイト レベルでは実際に 'ABGR' が得られるためですか?? この変数が実際に解釈されると、シェーダーは RGBA ではなく ABGR を認識しますか? 上位ビットが小さいアドレスにあることをバイトを解釈するときに知っておくべきではありませんか? そして最後の質問: コードは DXGI_FORMAT_R8G8B8A8_UNORM と指定されているため、これは R が最小のアドレスで、A が最大のアドレスでなければならないということですか? 誤解が多いと思いますので、どうぞご自由に解いてください。