D3DCOLOR与D3DXCOLOR
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相关推荐
- D3DXCOLOR 和 D3DCOLOR 和 D3DCOLORVALUE
D3DCOLOR 是一个DWORD 型.第一个byte表示Alpha值,后面三个byte依次是r(红)g(绿)b(蓝)值.32位. 下面是一些关于D3DCOLOR 的宏: D3DCOLOR_ARGB( ...
- DirectX903D 颜色
颜色 颜色表示 颜色用RGB三元组表示.为红色(red)绿色(Green)蓝色(Blue). RGB数据可用两种不同的结构来保存. 1 D3DCOLOR结构 与DWORD类型完全相同.共有32位. ...
- 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...
- D3D中的粒子系统(1)
许多自然现象是由很多小的小颗粒组成的,它们有相似的行为.(例如,雪花落下,闪烁的火焰,冲出枪管的"子弹"),粒子系统用来模拟这种现象. 14.1 粒子和点精灵(Point Spri ...
- 2017南开秋奥鹏作业计算机,南开17秋学期《DirectX程序设计》在线作业(资料)...
试卷总分:100 得分:0 一. 单选题 (共 22 道试题,共 44 分) 1. 在3DMAX等3D建模工具中创建好模型,模型转换为扩展名为.x的文件,称() A. .X文件 B. 3d文件 ...
- 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨) 邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...
- 12[红+绿+蓝+Alpha]
第十二集 红+绿+蓝+Alpha 红绿蓝组成了绚烂的颜色世界, 当红绿蓝遇到Alpha后, 这个颜色世界又多了一份神秘. 神秘的Alpha, 我们可以简单的认为它和红, 绿, 蓝一样, 是组成色彩的一 ...
- 用DirectX绘制使用纹理的立方体
下面将学习DirectX的3D渲染基础部分,但不会对3D数学或图形理论有太详细的介绍. 首先要了解DirectX中的坐标系,要记住的是DirectX采用左手坐标系. 在Direct3D中渲染一个场景, ...
- 【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8632184 作者:毛星云( ...
最新文章
- python 指针_python入门指针
- GridView生成序号
- Veeam 全面助力等保2.0/ 云数据管理解决方案/ 医疗行业最佳实践
- Joomla,wordpress,Drupal,DedeCms开源程序比较
- HAL库控制PS2手柄
- 控制欲强的人都是什么心理?
- 嵌入式linux触摸屏校正命令,[转]基于嵌入式Linux的通用触摸屏校准程序
- ubuntu20.04设置登录壁纸
- 雪球网基于沪深300的评论爬虫
- 武汉社保公积金常用信息汇总
- 面试后要请你吃饭_请面试官吃饭应该聊些什么?
- 力扣 179. 最大数
- 企业管理 - 现代管理學之父
- 浅谈C++类与对象(一)
- duck typing java_到底啥是鸭子类型(duck typing)带简单例子
- NanoPi的网络配置
- 概率与数理统计学习图
- 并不是每时每刻都能记得
- ∑西格玛,求和符号,表示累项相加
- 轻度Linux患者福利,Win10安装Linux子系统教程,附 Docker 安装教程
热门文章
- python小游戏代码_20行python代码的入门级小游戏
- 【华科考研机试题】阶乘
- Win7环境下IPython Notebook的安装
- Pixhawk飞控源码目录结构及编译流程分析
- 变量之--列表初始化和结构化绑定
- opencv+pythons相机标定源码解析
- command not found: django-admin.py
- 关于stable_sort()和sort()的区别:
- 比赛结果预测_决策树_随机森林(通用 数据挖掘入门与实践-实验5)
- 华为驳斥鸿蒙六月上线,终于来了!华为鸿蒙6月初将正式上线手机