光照(light)
来源:互联网 发布:金融软件供应商 编辑:程序博客网 时间:2024/05/18 02:57
光照(light)是为了增强游戏场景的真实感而存在,也有助于描述实体形状和立体感,算是3D游戏中渲染的基础了。
如:
一、认识光照:
在Direct3D的光照模型中,光源发出的光由以下三种类型组成(和现实生活中的类似)。
1、环境光(Ambient light):这种光经其他表面反射到达物体表面,并照亮整个场景。如现实生活中的树叶一样,只被环境光一定程度的照亮,而不是直接照射,之所以呈现 出绿色,那是因为它对绿色光产生了反射。
2、漫射光(Diffuse Light):这种光沿着特定的方向传播。当它到达某一个表面时,将沿着各个方向均匀反射,即无论从什么角度看,该表面的亮度均相同。
3、镜面光(Specular Light):这种光和上面的漫射光(Diffuse Light)类似,都是沿着特定的方向传播,不过镜面光(Specular Light)到达物体的表面时,只沿着另外一个方 向反射,从而形成只能在一定范围内才能观测到的高亮度照射。
Tip:
镜面光和另外两种光比较起来,计算量要大得多,所以选择时应该权衡下。
在Direct3D中,每种类型的光都可以用D3DCOLORVALUE或D3DXCOLOR来表示。
这两个的结构基本一致:
//D3DXCOLOR Structuretypedef struct D3DXCOLOR{ FLOAT R; FLOAT G; FLOAT B; FLOAT A;}D3DXCOLOR,*LPD3DXCOLOR;
//D3DCOLORVALUE structure
typedef struct D3DCOLORVALUE{ float r; float g; float b; float a;}D3DCOLORVALUE,*LPD3DCOLORVALUE;
结构体中的前三个R,G,B也就是经常谈论的RGB调色板,而后面的A | a表示的是Alpha值,透明值。
二、认识材质:
材质就是这个物体看起来是什么质地的。包含物体表面的色彩、纹理、光滑度、透明度、反射率、折射率、发光度等等。
在Direct3D中可以通过定义物体的材质(materials)来进行模拟现实生活中的一些材质反映的现象,如树叶是绿色,地板的光滑度等。该材质结构体可以通过定义物体表面 对各种颜色光的反射比例。
//材质(materials)的结构体定义typedef struct D3DMATERIAL9{ D3DCOLORVALUE Diffuse; //漫射光的反射率 D3DCOLORVALUE Ambient; //环境光的反射率 D3DCOLORVALUE Specular; //镜面光的反射率 D3DCOLORVALUE Emissive; //亮度值 float Power; //锐度}D3DMATERIAL9,*LPD3DMATERIAL9;
Diffuse:指定材质对漫射光的反射率。
Ambient:指定材质对环境光的反射率。
Specular:指定材质对镜面光的反射率。
Emissive:用于增强物体的亮度值,使之看起来好像自己在发光一样。
Power:指定镜面高光点的锐度。
如有一个红色的球体,只反射红色光,而吸收其他的所有光,按以下定义:
//D3DMATERIAL9 red;ZeroMemory(&red,sizeof(red));red.Diffuse=D3DXCOLOR(1.0f,0.0f,0.0f,1.0f);red.Ambient=D3DXCOLOR(1.0f,0.0f,0.0f,1.0f);red.Specular=D3DXCOLOR(1.0f,0.0f,0.0f,1.0f);red.Emissive=D3DXCOLOR(0.0f,0.0f,0.0f,1.0f); //不增强亮度red.Power=5.0f;
三、认识法线:
面法线:
顶点法线:
法线的作用主要是将入射光进行反射,在Direct3D中只需知道顶点的发线位置,就可以确定光线到达表面时的入射角。
注意:顶点法线有时候不一定和面法线相同。
四、光源
//typedef struct D3DLIGHT9{ D3DLIGHTTYPE Type; D3DCOLORVALUE Diffuse; D3DCOLORVALUE Specular; D3DCOLORVALUE Ambient; D3DVECTOR Position; D3DVECTOR Direction; float Range; float Falloff; float Attenuation0; float Attenuation1; float Attenuation2; float Theta; float Phi;}D3DLIGHT9,*LPD3DLIGHT;
- 光照(light)
- 光照探针 (light probe)
- 一步步学shader系列(1):环境光照(Ambient light)
- UE3 Light Functions (光照函数)
- Unity 光照探针Light Probes
- Unity 光照探针Light Probes
- 问题六十八:着色模型(shading model)(2)——光照模型(Light model)
- 问题六十八:光照模型(Light model)——关于“环境光”模型的补充
- 【Modern OpenGL】光照类型 Light casters
- U3D光源烘培光照贴图和light probes
- Quake3平面Surface的光照贴图(light map)UV坐标与Surface顶点世界3D坐标之间的转换原理
- 简单光照模型(Lambert 光照模型)
- 光照与渲染(二)- 光照技术
- 光照与渲染(十一)- 光照探头
- Opengl光照(茶壶)
- (134)天空光照
- (142)光照函数
- (154)光照通道
- lvs与nginx区别
- 画圆拖动0630
- How can I convert printStackTrace message to a string?
- 怎样将discuz所有页面的Powered by Discuz!去掉
- Kotlin-拓展功能
- 光照(light)
- Spring属性注入的两种方式
- 优化mysql数据库的几个步骤
- 二分图最大匹配总结
- 数据库 学习一
- 如何获取事件冒泡里最顶层的元素(或者任意层的元素)
- 我如何找到了Facebook广告服务的信息泄漏漏洞(奖金高达10000美刀)
- ecnu 电话送报 贪心
- java io演进