D3DCOLOR

D3DCOLOR实际上是一个DWORD,看一下它的定义(位于d3d9types.h中)

// D3DCOLOR is equivalent to D3DFMT_A8R8G8B8#ifndef D3DCOLOR_DEFINEDtypedef DWORD D3DCOLOR;#define D3DCOLOR_DEFINED#endif

在这个DWORD中,第一个byte表示Alpha值,后面三个byte依次是r(红)g(绿)b(蓝)值。见下图

在d3d9types.h还定义了几个关于颜色的宏,可以将8bit/channel转换成D3DCOLOR

  • D3DCOLOR_ARGB(a,r,g,b) - 第一个byte表示Alpha值,后面三个byte本别表示红,绿,蓝。
  • D3DCOLOR_RGBA(r,g,b,a) - 前三个byte分别表示红,绿,蓝,最后一个byte是Alpha值
  • D3DCOLOR_XRGB(r,g,b) - Alpha值为1,三个byte分别表示红,绿,蓝
  • D3DCOLOR_XYUV(y,u,v)  - 没用过,不熟悉,暂不介绍
  • D3DCOLOR_AYUV(a,y,u,v) - 没用过,不熟悉,暂不介绍
  • D3DCOLOR_COLORVALUE(r,g,b,a) - 与D3DCOLOR_RGBA(r,g,b,a)类似,不同的是参数都是浮点值,范围[0.0-1.0]
// maps unsigned 8 bits/channel to D3DCOLOR#define D3DCOLOR_ARGB(a,r,g,b) \    ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)#define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)

#define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xff,y,u,v)#define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)

// maps floating point channels (0.f to 1.f range) to D3DCOLOR#define D3DCOLOR_COLORVALUE(r,g,b,a) \    D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))

D3DXCOLOR

D3DXCOLOR比D3DCOLOR更强大,它是一个类,有丰富的构造函数,多个类型转换函数,也可以方便的进行各种与颜色有关的算术运算。

typedef struct D3DXCOLOR{#ifdef __cpluspluspublic:    D3DXCOLOR() {}    D3DXCOLOR( DWORD argb );    D3DXCOLOR( CONST FLOAT * );    D3DXCOLOR( CONST D3DXFLOAT16 * );    D3DXCOLOR( CONST D3DCOLORVALUE& );    D3DXCOLOR( FLOAT r, FLOAT g, FLOAT b, FLOAT a );

// castingoperator DWORD () const;

operator FLOAT* ();operator CONST FLOAT* () const;

operator D3DCOLORVALUE* ();operator CONST D3DCOLORVALUE* () const;

operator D3DCOLORVALUE& ();operator CONST D3DCOLORVALUE& () const;

D3DCOLOR与D3DXCOLOR的转换

一般来说,两者基本可以互换使用

  • 任何使用D3DCOLOR的地方可以直接使用D3DXCOLOR,因为D3DXCOLOR重载了()运算符,可以直接转换为D3DCOLOR
  • 任何使用D3DXCOLOR的地方可以直接使用D3DCOLOR,因为D3DXCOLOR有一个构造函数以D3DCOLOR为参数

假设有一个函数SetColor,接受一个D3DCOLOR参数

void SetColor(D3DCOLOR) ;

则可以使用下面这些方法调用这个函数,所有方法都将颜色设置为红色

void Test()
{SetColor(0xffff0000) ;SetColor(D3DCOLOR_ARGB(255, 255, 0, 0)) ;    // Use decimalSetColor(D3DCOLOR_ARGB(0xff, 0xff, 0, 0)) ;    // Use hexadecimalSetColor(D3DCOLOR_RGBA(255, 0, 0, 255)) ;SetColor(D3DCOLOR_XRGB(255, 0, 0)) ;SetColor(D3DCOLOR_COLORVALUE(1, 0, 0, 1)) ;SetColor(D3DXCOLOR(0xffff0000)) ;            // Use D3DXCOLORSetColor(D3DXCOLOR(1.0f, 0, 0, 1.0f)) ;        // Use D3DXCOLOR
}

颜色转换,float <->DWORD

在DirectX程序中有些地方用DWORD(RGBA)格式表示颜色,其范围是[0 - 255],在shader中则都以float来表示颜色,其范围是[0.0 - 1.0],两者间的转换规则如下:

  • DWORD -> float    将DWORD除以255
  • float  -> DWORD   将float值乘以255

举个例子,127 / 255 = 0.5,0.1 * 255 = 25

--

转载于:https://www.cnblogs.com/graphics/archive/2010/09/02/1816170.html

D3DCOLOR与D3DXCOLOR相关推荐

  1. D3DXCOLOR 和 D3DCOLOR 和 D3DCOLORVALUE

    D3DCOLOR 是一个DWORD 型.第一个byte表示Alpha值,后面三个byte依次是r(红)g(绿)b(蓝)值.32位. 下面是一些关于D3DCOLOR 的宏: D3DCOLOR_ARGB( ...

  2. DirectX903D 颜色

    颜色  颜色表示 颜色用RGB三元组表示.为红色(red)绿色(Green)蓝色(Blue). RGB数据可用两种不同的结构来保存. 1  D3DCOLOR结构 与DWORD类型完全相同.共有32位. ...

  3. 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...

  4. D3D中的粒子系统(1)

    许多自然现象是由很多小的小颗粒组成的,它们有相似的行为.(例如,雪花落下,闪烁的火焰,冲出枪管的"子弹"),粒子系统用来模拟这种现象. 14.1 粒子和点精灵(Point Spri ...

  5. 2017南开秋奥鹏作业计算机,南开17秋学期《DirectX程序设计》在线作业(资料)...

    试卷总分:100    得分:0 一. 单选题 (共 22 道试题,共 44 分) 1.  在3DMAX等3D建模工具中创建好模型,模型转换为扩展名为.x的文件,称() A. .X文件 B. 3d文件 ...

  6. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...

  7. 12[红+绿+蓝+Alpha]

    第十二集 红+绿+蓝+Alpha 红绿蓝组成了绚烂的颜色世界, 当红绿蓝遇到Alpha后, 这个颜色世界又多了一份神秘. 神秘的Alpha, 我们可以简单的认为它和红, 绿, 蓝一样, 是组成色彩的一 ...

  8. 用DirectX绘制使用纹理的立方体

    下面将学习DirectX的3D渲染基础部分,但不会对3D数学或图形理论有太详细的介绍. 首先要了解DirectX中的坐标系,要记住的是DirectX采用左手坐标系. 在Direct3D中渲染一个场景, ...

  9. 【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8632184 作者:毛星云( ...

最新文章

  1. python 指针_python入门指针
  2. GridView生成序号
  3. Veeam 全面助力等保2.0/ 云数据管理解决方案/ 医疗行业最佳实践
  4. Joomla,wordpress,Drupal,DedeCms开源程序比较
  5. HAL库控制PS2手柄
  6. 控制欲强的人都是什么心理?
  7. 嵌入式linux触摸屏校正命令,[转]基于嵌入式Linux的通用触摸屏校准程序
  8. ubuntu20.04设置登录壁纸
  9. 雪球网基于沪深300的评论爬虫
  10. 武汉社保公积金常用信息汇总
  11. 面试后要请你吃饭_请面试官吃饭应该聊些什么?
  12. 力扣 179. 最大数
  13. 企业管理 - 现代管理學之父
  14. 浅谈C++类与对象(一)
  15. duck typing java_到底啥是鸭子类型(duck typing)带简单例子
  16. NanoPi的网络配置
  17. 概率与数理统计学习图
  18. 并不是每时每刻都能记得
  19. ∑西格玛,求和符号,表示累项相加
  20. 轻度Linux患者福利,Win10安装Linux子系统教程,附 Docker 安装教程

热门文章

  1. python小游戏代码_20行python代码的入门级小游戏
  2. 【华科考研机试题】阶乘
  3. Win7环境下IPython Notebook的安装
  4. Pixhawk飞控源码目录结构及编译流程分析
  5. 变量之--列表初始化和结构化绑定
  6. opencv+pythons相机标定源码解析
  7. command not found: django-admin.py
  8. 关于stable_sort()和sort()的区别:
  9. 比赛结果预测_决策树_随机森林(通用 数据挖掘入门与实践-实验5)
  10. 华为驳斥鸿蒙六月上线,终于来了!华为鸿蒙6月初将正式上线手机