第三讲 基本图元和颜色

来源:互联网 发布:ripper算法是什么 编辑:程序博客网 时间:2024/05/18 00:03
内容

•D3D颜色表示

•基本图元类型

•实例使用函数
编辑:jadeshu
D3D颜色表示
颜色值的32位被分割成四部分以分别表示红、绿、蓝三种颜色分量和一个Alpha分量。其中,红、绿、蓝颜色分量各占八位其取值范围在0~255之间其中0表示没有该种颜色,255表示该颜色的最高强度;Alpha分量用于表示在显示时的透明度,0表示完全透明,255表示完全不透明  如下图所示。

D3D颜色表示
Direct3D提供两种具有不同数据类型的结构体用于保存RGB颜色值:D3DCOLOR和      D3DCOLORVALUE/D3DXCOLOR。其中,D3DCOLOR结构体为一个32位的DWORD类型的整数;D3DCOLORVALUE和D3DXCOLOR结构体都为每个颜色分量定义了一个float类型的数据成员,其取值范围在0.0f~1.0f之间,而它们唯一的差别是D3DXCOLOR结构体提供了相关的构造函数和重载运算符用于操纵颜色值。D3DCOLOR和D3DCOLORVALUE结构体的声明如下:
typedef DWORD D3DCOLOR;
typedef struct _D3DCOLORVALUE {
    float  r;    // 红色分量,取值范围0.0f~1.0f
    float  g;   // 绿色分量,取值范围0.0f~1.0f
    float  b;   // 蓝色分量,取值范围0.0f~1.0f
    float  a;   // Alpha分量,取值范围0.0f~1.0f
} D3DCOLORVALUE;
可以通过D3DCOLOR_ARGB/D3DCOLOR_RGBA宏和D3DCOLOR_XRGB宏为这两个结构体类型的变量赋值。其中,D3DCOLOR_ARGB和D3DCOLOR_RGBA宏将取值范围在0~255之间的颜色分量值转换为一个DWORD类型的数,而D3DCOLOR_XRGB宏则将Alpha分量设置为0xFF。例如:
D3DCOLOR brightRed = D3DCOLOR_ARGB(255, 255, 0, 0);  // 通过D3DCOLOR_ARGB宏赋值
D3DCOLOR someColor = D3DCOLOR_XRGB(144, 87, 201);  // 通过D3DCOLOR_XRGB宏赋值
D3DXCOLOR blueColor = D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f); // 通过D3DXCOLOR构造函数赋值

图元类型
Ø1.点列
Ø2.线列
Ø3.线带
Ø4.三角形列
Ø5.三角形带
Ø6.三角形扇
1.点列
•点列是一组顶点的集合,并能够对每个点独立的进行渲染。在3D场景中,通常使用它来模拟由离散的点构成的物体或现象,如喷泉、灰尘、星空等。点列的表现样式如图所示。

2.线列
•线列是通过一组顶点表示的一系列独立的线段。顶点集合中每两个点将构成一条线段,因此顶点集合中至少包含两个顶点,并且顶点的数量通常为2的偶数。线列的表现样式如图所示。

3.线带
线带是在线列的基础上,将所有顶点都连接成首尾相连的线段组合,其前一条线段的终点是下一条线段的起点。线带的表现样式如图所示。

4.三角形列
三角形列是一系列独立的三角形的集合,其中的连续三个顶点构成一个三角形。因此,一个三角形列中至少应该包含3个顶点,并且顶点的总数必须是3的整数倍。三角形列的表现样式如图所示。


5.三角形带
三角形带是一组首尾相连的三角形,三角形之间是相邻的,并且三角形之间有两个顶点是重合的。三角形带的表现样式如图所示。


6.三角形扇
三角形扇与三角形带类似,它表示由一组组成扇形的三角形带,但其所有三角形都共享一个顶点。三角形扇的表现样式如图2.12所示。



DrawPrimitive函数
•1. DrawPrimitive
•HRESULT DrawPrimitive(
[in] D3DPRIMITIVETYPE PrimitiveType, //图元类型
[in] UINT StartVertex,  //顶点起始点
[in] UINT PrimitiveCount //图元个数
);
•2. DrawPrimitiveUP
•HRESULT DrawPrimitiveUP(
[in] D3DPRIMITIVETYPE PrimitiveType, //图元类型
[in] UINT PrimitiveCount, //图元个数
[in] const void *pVertexStreamZeroData, //顶点数据流指针
[in] UINT VertexStreamZeroStride  //顶点大小
);
结束语
本讲回顾
      了解3D颜色表示和图元已经2个绘制图元的函数
•     jadeshu
下一讲预告
内存管理