游戏开发基础(四)
2011-12-31 11:51
183 查看
第四章
RGB数据可用两种不同的结构来保存,
*D3DCOLOR(DWORD类型相同)
要指定每个颜色分量值D3DCOLOR_ARGB ,D3DCOLOR_XRGB(#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) )
*D3DCOLORVALUE (结构),该结构用单精度浮点数来度量每个颜色分量的亮度值,亮度值[0,1]0表示没有亮度,1表示亮度最大
typedef struct D3DCOLORVALUE{
float r;
float g;
float b;
float a;
}D3DCOLORVALUE;
可用D3DXCOLOR替代D3DCOLORVALUE,这两种结构可相互转换
typedef struct D3DXCOLOR{
#ifdef __cplusplus
public:
D3DXCOLOR(){}
D3DXCOLOR(DWORD argb);
D3DXCOLOR(CONST FLOAT*);
D3DXCOLOR(CONST D3DXFLOAT16*);
D3DXCOLOR(CONST D3DCOLORVALUE&);
D3DXCOLOR(FLOAT r,FLOAT g,FLOAT b,FLOAT a);
operator DWORD() const ;
...............
.........
#endif
FLOAT r,g,b,a;
}D3DXCOLOR,*LPD3DXCOLOR;
可将这两个结构表达成一个4D向量(r,g,b,a),
颜色向量的点积和叉积没有实际意义,但是对用分量相乘却是有意义的,在D3DXCOLOR中,颜色乘法定义为对应分量分别相乘
为顶点数据结构添加一个表示颜色的数据成员
struct ColorVertex{
float x,y,z;
D3DCOLOR color;
static const DWORD FVF;
};
const DWORD ColorVertex::FVF = D3DFVF_XYZ|D3DFVF_DIFFUSE;
光栅化过程中,需要对多边形进行着色,着色规定了如何利用顶点的颜色来计算构成图元的像素的颜色(平面着色flat shading,Gouraud着色gouraud shading)
平面着色每个图元的每个像素都被一致地赋予该图元的第一个所指定的颜色,使用平面着色模式时,第2个和第3个顶点颜色都被忽略
平面着色容易呈现“块状”
在Gouraud着色模式下,图元中各像素的颜色值由顶点的颜色经线性差值得到
如同Direct3D中的许多其他状态量一样,着色模式由Direct3D状态机控制
Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT);
Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
RGB数据可用两种不同的结构来保存,
*D3DCOLOR(DWORD类型相同)
要指定每个颜色分量值D3DCOLOR_ARGB ,D3DCOLOR_XRGB(#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) )
*D3DCOLORVALUE (结构),该结构用单精度浮点数来度量每个颜色分量的亮度值,亮度值[0,1]0表示没有亮度,1表示亮度最大
typedef struct D3DCOLORVALUE{
float r;
float g;
float b;
float a;
}D3DCOLORVALUE;
可用D3DXCOLOR替代D3DCOLORVALUE,这两种结构可相互转换
typedef struct D3DXCOLOR{
#ifdef __cplusplus
public:
D3DXCOLOR(){}
D3DXCOLOR(DWORD argb);
D3DXCOLOR(CONST FLOAT*);
D3DXCOLOR(CONST D3DXFLOAT16*);
D3DXCOLOR(CONST D3DCOLORVALUE&);
D3DXCOLOR(FLOAT r,FLOAT g,FLOAT b,FLOAT a);
operator DWORD() const ;
...............
.........
#endif
FLOAT r,g,b,a;
}D3DXCOLOR,*LPD3DXCOLOR;
可将这两个结构表达成一个4D向量(r,g,b,a),
颜色向量的点积和叉积没有实际意义,但是对用分量相乘却是有意义的,在D3DXCOLOR中,颜色乘法定义为对应分量分别相乘
为顶点数据结构添加一个表示颜色的数据成员
struct ColorVertex{
float x,y,z;
D3DCOLOR color;
static const DWORD FVF;
};
const DWORD ColorVertex::FVF = D3DFVF_XYZ|D3DFVF_DIFFUSE;
光栅化过程中,需要对多边形进行着色,着色规定了如何利用顶点的颜色来计算构成图元的像素的颜色(平面着色flat shading,Gouraud着色gouraud shading)
平面着色每个图元的每个像素都被一致地赋予该图元的第一个所指定的颜色,使用平面着色模式时,第2个和第3个顶点颜色都被忽略
平面着色容易呈现“块状”
在Gouraud着色模式下,图元中各像素的颜色值由顶点的颜色经线性差值得到
如同Direct3D中的许多其他状态量一样,着色模式由Direct3D状态机控制
Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT);
Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
相关文章推荐
- html5游戏开发-零基础开发RPG游戏-开源讲座(二)-跑起来吧英雄
- [3D数学基础:图形与游戏开发]专栏前言
- 【Visual C++】游戏开发笔记之八——基础动画显示(二)游戏循环的使用
- 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)
- J2ME专业手机游戏开发基础(1)
- unity基础开发----unity游戏速度更快的简易检查表
- 游戏开发基础(一)
- 3D数学基础:图形与游戏开发_读书笔记
- 游戏开发基础(十一)
- 3D数学基础 图形与游戏开发的学习 (四)[2D笛卡尔数学]
- c++网络游戏开发基础
- Android游戏开发基础part7--碰撞检测
- 专业手机游戏开发基础(1)
- 安卓开发_数独游戏基础
- Unity2D游戏开发基础教程1.2 项目、资源和场景
- 【Visual C++】游戏开发笔记十八 游戏基础物理建模(一) 匀速与加速运动
- 【Visual C++】游戏开发笔记之八——基础动画显示(二)游戏循环的使用
- 游戏开发笔记之十 基础动画显示(三) 透明动画的实现
- 游戏开发基础(八)
- 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)