DirectX学习笔记(五):利用平面着色和Gouraud着色模式绘制具有颜色的三角形

 前言:


图元的颜色是由构成该图元的顶点的颜色所决定的,而物体是由图元索组成。那么如果我们要绘制一个具有颜色的三角形,我们就需要为三角形图元顶点附加颜色属性。


1.Direct3D中颜色的表示:

在Direct3D中,颜色用RGB来表示(这个大家都知道,咳咳。)通畅人为颜色可以分为红色(red)、绿色(green)、蓝色(bule)。这三个分量进行混合,以达到我们想要的颜色取得目的。RGB的数据可以用两种方式来进行存储一种是D3DCOLOR ,另一种是:DWORD。这是因为D3DCOLOR完全等同于DWORD(在MSDN中:

typedef DWORD D3DCOLOR;)关于Alpha分量,先不进行说明。因为这个现在用不到。

要指定每个颜色分量的值,并将其插入到D3DCOLOR中,需要使用D3DCOLOR_ARPG宏。这个宏帮我们实现了二进制的运算。

使用方式:

D3DCOLOR brightRed = D3DCOLOR_ARGB(255, 255, 0, 0);


另外介绍另外一种颜色数据的存储结构: D3DCOLORVALUE

typedef struct _D3DCOLORVALUE {
    float r;
    float g;
    float b;
    float a;
} D3DCOLORVALUE;

用单精度数来度量每个分量的亮度值,取值范围为0~1.

但是这种结构很少用到。因为D3DCOLORVALUE结构可以转换为D3DCOLOR,而且D3DCOLORD3DCOLORVALUE所包含的功能方法更为强大。


 2.着色:

这里先说一下什么是光栅化:简单理解,我们在现实生活中,如果绘制一个三角形,每条线是由无数个无穷小的点构成的。但是在计算机中,没有这个无穷小的处理方法,在屏幕上的三角形是由很多点像素构成,将连续的图像用离散的像素表示的过程就是光栅化。

在光栅化的过程中,需要对三角形进行着色。着色规定了如何利用顶点颜色来计算构成像素的颜色。在Direct3D中有两种着色模式:

第一种:平面着色:每个图元的像素都被一致的赋予该图元的第一个顶点的颜色。

第二种:Gouraud着色:土元种的各像素的颜色值由顶点的颜色经线性插值得到。

那么接下来我们就用这两种着色模式来绘制两个三角形:
要完成的操作:


1.定义顶点结构:

struct Vertex //顶点结构  
{

	Vertex(){}
	Vertex(float x, float y, float z, D3DCOLOR  color)
	{
		_x = x;  _y = y;  _z = z;
		_color = color;
	}
	float _x, _y, _z;
	D3DCOLOR _color;
	static const DWORD FVF;
};
//顶点格式:说明对应于
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值