D3D9 Samples(4)--Lights
来源:互联网 发布:微博个性域名二次更改 编辑:程序博客网 时间:2024/05/16 17:42
D3D9 Sample(4)—Lights
打开Tutorial 4: Lights项目,编译后运行,界面如下:
我们看到一个旋转的圆管形,这个例子主要演示光照计算。绘制的每一帧都会设置光照和材质,类似上一个Sample设置矩阵,在固定管道中,只需填充一个数据结构,然后把结构传给D3D9,固定渲染管道会根据设置自动进行光照运算。如果使用了Shader,则下面的SetMaterial和SetLight都会失效,需要自己在Shader代码中进行光照计算。
1. 创建模型
首先是建立一个几何体。我们看顶点的数据结构有所变化:
struct CUSTOMVERTEX{ D3DXVECTOR3 position;// The 3D position for the vertex D3DXVECTOR3 normal;// The surface normal for the vertex};#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)
定义了一个位置信息和法线信息,顶点不再需要颜色值,它的颜色由材质Material来管理。法线用于计算光照在顶点上产生的颜色值影响,从而模拟光照效果。
2. 设置材质
typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */ D3DCOLORVALUE Ambient; /* Ambient color RGB */ D3DCOLORVALUE Specular; /* Specular 'shininess' */ D3DCOLORVALUE Emissive; /* Emissive color RGB */ float Power; /* Sharpness if specular highlight */} D3DMATERIAL9;
物体材质的一种配置结构。
打开3ds Max可以直观的看到,第二、三个材质球明暗渐变的颜色称为漫反射色(Diffuse)。第一个材质球两个原点(几乎白色)的颜色就是镜面反射色Specular。而环境光色(Ambient)是为了场景有一定的亮度而设置的简单颜色,如果没有环境光,那么没有上述两种光照的点都是漆黑一片。自发光(Emissive)是为了模拟现实中很多自发光物体,如LED霓虹灯,它只是有自发光效果,并不照亮别的物体。
IDirect3DDevice9::SetMaterial
将材质的配置告知D3D9。
3. 设置光照
typedef struct _D3DLIGHT9 { D3DLIGHTTYPE Type; /* Type of light source */ D3DCOLORVALUE Diffuse; /* Diffuse color of light */ D3DCOLORVALUE Specular; /* Specular color of light */ D3DCOLORVALUE Ambient; /* Ambient color of light */ D3DVECTOR Position; /* Position in world space */ D3DVECTOR Direction; /* Direction in world space */ float Range; /* Cutoff range */ float Falloff; /* Falloff */ float Attenuation0; /* Constant attenuation */ float Attenuation1; /* Linear attenuation */ float Attenuation2; /* Quadratic attenuation */ float Theta; /* Inner angle of spotlight cone */ float Phi; /* Outer angle of spotlight cone */} D3DLIGHT9;
光照的配置结构。灯光大致分成电光源(Point Light)、平行光(Directional Light)和聚光灯(SpotLight)三种。
IDirect3DDevice9::SetLight
将灯光的配置告知D3D9。
g_pd3dDevice->LightEnable( 0, TRUE );g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
后面还得让固定渲染管道开启光照运算。
参考资料
http://msdn.microsoft.com/en-us/library/windows/desktop/bb174694(v=vs.85).aspx
- D3D9 Samples(4)--Lights
- D3D9 Samples(1)--CreateDevice
- D3D9 Samples(2)--Vertices
- D3D9 Samples(3)--Matrices
- D3D9 Samples(5)--Textures
- D3D9 Samples(6)--Meshes
- D3D9 Samples(7)--EmptyProject
- D3D9 Samples(8)--SimpleSample
- D3D9 Samples(9)--BasicHLSL
- D3D9 Samples(10)--Text3D
- D3D9 Samples(11)--HLSLwithoutEffects
- D3D9 Samples(12)--CompiledEffect
- D3D9 Samples(13)--EffectParam
- D3D9 Samples(14)--StateManager
- D3D9 Samples(15)--CustomUI
- D3D9 Samples(16)--Pick
- DirectX9 SDK Samples(4) Tutorial 4: Lights
- Samples
- as3 注册字体
- HDU 1010Tempter of the Bone(奇偶剪枝回溯dfs)
- Java基础
- 为什么使用hibernate,hibernate优缺点
- poj.2485
- D3D9 Samples(4)--Lights
- “深度撞击”号探测器与地球失去联络
- HDU4707
- Ubuntu12.04下安装java sdk的过程
- OJ练习1
- Hibernate框架中Criteria的示例查询问题
- smartupload.jar 实现文件上传下载
- SSO跨域解决方案
- Linux 进程间通信 信号