我一直在阅读 Frank D. Luna 的书“DirectX 10 3D 编程简介”,其中一个问题是从使用
D3DXCOLOR 颜色(128 位)
到 UINT 颜色(32 位)
大概要使用的格式代码是:DXGI_FORMAT_R8G8B8A8_UNORM。
在我看来,这意味着您有一个变量,该变量在字节级别以确切顺序包含有关通道的信息:RGBA(这是正确的解释吗?--问是因为我确定当您需要 RGBA 时我已经读过真的需要这样的代码:A#R#G#B#首先指定 alpha 通道。
无论如何,我选择(可能有更好的方法)这样做:
UINT color = (UINT)WHITE;
其中 WHITE 被定义:const D3DXCOLOR WHITE(1.0f, 1.0f, 1.0f, 1.0f);
此转换在 D3DXCOLOR 的扩展中定义。
但是,当 DXGI_FORMAT_R8G8B8A8_UNORM 与 UINT 颜色变量一起使用时,您会得到错误的结果。Luna 将此归因于字节序。
这是因为来自 D3DXCOLOR 的转换产生了 RGBA 形式的 UINT,但是因为 intel x86 使用 little endiann 那么在字节级别你真的得到'ABGR'?那么当这个变量实际被解释时,着色器看到的是 ABGR 而不是 RGBA?它不应该在解释字节时知道高位在较小的地址吗?还有最后一个问题:既然代码被指定为DXGI_FORMAT_R8G8B8A8_UNORM,这是否意味着R应该是最小的地址而A应该是最大的?我确信我有很多误解,所以请随时消除它们。