Direct3D学习手记四:光照、材质与顶点法向量

这篇博客深入探讨Direct3D中的光照模型,包括环境光、漫反射光和镜面反射光,以及点光源、方向光和聚光灯的特性。同时介绍了材质如何定义物体的反射比例,以及顶点法向量在光照计算中的关键作用,阐述了如何设置和计算顶点法向量以展现物体颜色。最后,提供了源代码和运行结果的展示。
摘要由CSDN通过智能技术生成

本文介绍Direct3D里的光照与物体材质以及顶点法向量

光照:

组成:

1.环境光(Ambient),基于自然界环境的整体亮度,周围物体的反射、折射

2.漫反射光(Diffuse),沿着特定方向传播,但到达物体表面后沿着各个方向均匀反射,所以在各个方向都能看到

3.镜面反射光(Specular),沿着特定方向传播,到达物体表面后会沿着另外一个特定的方向反射出去,只有在该方向观察,才可看见,不同于漫反射


类型:

1.点光源(Point),从一个中心位置向空间中各个方向发射强度相同的光线


2.方向光(Directional),从一个方向平行、均匀的传播到另一个方向,没有位置属性


3.聚光灯(Spot),从特定的位置,在特定的锥体范围内传播


Direct3D中表示光源的结构体:D3DLIGHT9

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;

成员介绍:

Type为光源类型,有D3DLIGHT_POINT点光源,D3DLIGHT_DIRECTIONAL平行光,D3DLIGHT_SPOT聚光灯

Diffuse、Specular、Ambient指定光源的光照类型

Position为光源位置,仅对平行光无效

Direction为光的传播方向,对点光源无效

Range为光照范围,对平行光无效

Falloff为聚光灯从内到外的衰减系数,一般取1.0

Attenuation0[1,2]为光沿着传播方向的衰减系数

Theta为聚光灯内锥体的弧度

Phi为聚光灯外锥体的弧度


说明:

程序中要使用光源,必须注册光源,并且打开光照,开启光源才会有效

打开光照用:

pd3dDevice->SetRenderState(D3DRS_LIGHTING,true);//开启光照

注册并打开光源用:

pd3dDevice->SetLight(nType-1,&light);//注册光源
	pd3dDevice->LightEnable(nType-1,true);//开启注册的光
如果要使用镜面反射,必须自行打开(默认是关闭的):

pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE,true);//开启镜面发射

以下为设置光源的函数(SetLight),根据类型设置默认属性的光源:

/****************************************************************
*函数名	:	SetLig
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值