当前位置: 首页 > news >正文

沈阳德泰诺网站制作网站运营管理

沈阳德泰诺网站制作,网站运营管理,山东济南网站建设,齐诺网站建设光照的组成 环境光:这种类型的光经其他表面反射到达物体表面,并照亮整个场景,要想以较低代价粗略模拟这类反射光,环境光是一个很好的选择 漫射光:这种类型光沿着特定的方向传播。当它到达某一表面时,将沿…

光照的组成

环境光:这种类型的光经其他表面反射到达物体表面,并照亮整个场景,要想以较低代价粗略模拟这类反射光,环境光是一个很好的选择

漫射光:这种类型光沿着特定的方向传播。当它到达某一表面时,将沿着各个方向均匀反射,无论从哪个方位观察,表面亮度均相同,所以采用该模型时无须考虑观察者的位置,这样,漫射光方程中仅需考虑光传播的方向以及表面朝向,从一个光源发出的光一般都是这种类型的。

镜面光:这种类型的光沿特定方向传播,当此类光到达一个表面时,将严格地沿着另一个方向反射,从而形成只能在一定角度范围内才能观察到的高亮度照射,所以在镜面光照方程中不仅需要考虑光线的入射方向和图元的表面朝向,还需要考虑观察点的位置。镜面光可用于模拟物体上的高光点,例如当光线照射到一个抛光的表面所形成的高亮照射。

镜面光比其他类型光计算量大,因此Direct3D提供了开关选项,默认状态下Direct不进行镜面反射计算,如果想启用镜面光,必须调用接口进行设置

Device->SetRenderState(D3DRS_SPECULARENABLE, true);

每种类型的光都可用结构D3DCOLORVALUE或者D3DXCOLOR来表示,描述光线的颜色时,D3DXCOLOR类中的Alpha值都将被忽略

D3DXCOLOR redAmbient(1.0f, 0.0f, 0.0f, 1.0f);
D3DXCOLOR blueDiffuse(0.0f, 0.0f, 1.0f, 1.0f);
D3DXCOLOR whiteSpecular(1.0f, 1.0f, 1.0f, 1.0f);

材质

现实世界中,我们所观察到的物体的颜色是由该物体所反射的光的颜色决定的,例如一个纯红色的球体反射了全部的红色入射光,并吸收了所有非红色的光,所以呈现为红色。当一个物体吸收了所有的光时,便呈现为黑色,如果一个物体能够100%地反射红色光、绿色光、蓝色光,它将呈现为白色,Direct3D通过定义物体的材质来模拟同样的现象,材质允许我们定义物体表面对各种颜色光的反射比例,材质用结构D3DMATERIAL9来表示。

typedef struct D3DMATERIAL9 {D3DCOLORVALUE   Diffuse;  D3DCOLORVALUE   Ambient;  D3DCOLORVALUE   Specular; D3DCOLORVALUE   Emissive; float           Power;    
} D3DMATERIAL9;

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;

设置材质接口SetMaterial

D3DMATERIAL9 blueMaterial;
Device->SetMaterial(&blueMaterial);
//draw...

顶点法线

顶点法线描述的是构成多边形的各个顶点的法线,Direct3D需要知道顶点的法线方向,以确定光线到达表面时的入射角,由于光照计算是对每个顶点进行的,所以Direct3D需要知道表面在每个顶点处的局部朝向(法线方向),描述一个顶点法线需要修改顶点结构

struct Vertex
{float _x, _y, _z;float _nx, _ny, _nz;static const DWORD FVF;
};
const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL;

计算三角形三个顶点的法线,可由计算该面的法向量得到,首先计算位于三角形平面内的俩个向量

void ComputeNormal(D3DXVECTOR3* p0, D3DXVECTOR3* p1, D3DXVECTOR3* p2, D3DXVECTOR3* out)
{D3DXVECTOR3 u = *p1 - *p0;D3DXVECTOR3 v = *p2 - *p0;D3DXVec3Cross(out, &u, &v);D3DXVec3Normalize(out, out);
}

当用三角形单元逼近表示曲面时,将面片法向量作为构成该面片的顶点法向量不可能产生很平滑的效果,一种更好的求取顶点法向量的方法是计算法向量均值,我们需要求出共享点v的所有三角形的面法向量,然后将这些法向量相加后除以个数进行平均。

在变换过程中,顶点法线有可能不再是规范的所以最好的方法是在变换完成后,通过设置绘制状态来重新规范化

Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);

http://www.khdw.cn/news/15404.html

相关文章:

  • 怎样做网站导航栏百度经验官网首页
  • 制作网站的免费软件大型门户网站建设
  • 软件ui设计网站西安网络推广seo0515
  • 做网站经验徐州seo外包公司
  • 新网站如何做免费推广电脑网络优化软件
  • 昆明集团网站建设优秀网站设计
  • 天津企业网站建设开发维护关键词首页排名优化公司推荐
  • 大淘客网站上的推广怎么做市场营销推广策划
  • 南平网站怎么做seo在线刷关键词网站排名
  • 专业网页制作产品网络推广网站seo服务公司
  • 西宁网站制作哪家公司好原创文章代写
  • 建设九九网站深圳seo优化电话
  • 软件开发和前端开发的区别江西网络推广seo
  • 安徽平台网站建设设计营销的手段和方法
  • wordpress轮播图设置百度快照优化排名
  • dedecms网站的源码如何安装seo优化的搜索排名影响因素主要有
  • 网站百度流量怎么做网站做优化一开始怎么做
  • 鞍山做网站专业公司杭州做百度推广的公司
  • 莆田市城厢区建设局网站b2b平台推广
  • 国际外贸网站腰肌劳损的自我治疗和恢复的方法有什么?
  • 电子商务动态网站开发怎么做神马搜索排名seo
  • 做简历网站 知乎如何建立一个自己的网站?
  • 做阿里巴巴怎么进公司网站qq群引流推广软件
  • 网站建设公司客户分析推广计划怎么做推广是什么
  • 专门做淘宝主图的网站新媒体推广渠道有哪些
  • 常德做网站成都网络推广中联无限
  • 新乡手机网站建设国内最好的危机公关公司
  • 做网站需要哪些语言网站备案查询
  • 龙岗网站建设哪家好搜索引擎平台排名
  • 佛山做外贸网站的公司吗我想创建一个网络平台