请教材质,纹理,光照的问题?
(a)程序步骤:1 设光照 2 设白材质 3 创建纹理并显示 结果:物体正常
(b)程序步骤:1 关光照 2 设白材质 3 创建纹理并显示 结果:物体黑了
(a)程序步骤:1 设光照 2 不设白材质 3 创建纹理并显示 结果:物体黑了
==============================
请问,要显示纹理,是不是必须要设置光照?要显示纹理,是不是必须要设置材质?
[解决办法]
是的,材质是反应了物体的物理属性,没有材质,计算机是不知道这个物体要反射什么光
[解决办法]
纹理是贴图,你可以认为是物体的本来颜色,要显示纹理与光照和材质没有关系。
(b)步估计你关光照错了,你只是把光源关了,并没有关光照。关光照是setRenderState(D3DRS_LIGHTING, false);
(c)估计你也没有把光源的颜色设对。看看你的SetLight()的参数正确么。
[解决办法]
最终算出的颜色决定于物体本身的diffuse和光照的计算结果的合成。
其中物体本身的diffuse可以是纹理的颜色,也可以是顶点的颜色,或者是这两种颜色的混合。
光照的计算结果是根据SetLight的光的属性和SetMateiral的材质的属性计算出来的结果。当然材质属性也可以来自顶点颜色,这个可以通过SetRenderState设置。
d3d最后把物体本身的颜色和光计算的颜色做混合。
[解决办法]
一般固定管线硬件支持8个光源。LightEnable()用来控制这8个光源的开关。默认都是关的。
D3DRS_LIGHTING是设置是否要启用光照计算,默认是启用的,你说得对,默认就是true。
不过为了你的程序总是正确,你如果需要光照最好显式地启用下。
[解决办法]
这篇blog对你的问题介绍得不错。
[解决办法]
如果你不设材质,d3d应该会生成一个默认材质的。你用GetMatrial看看返回的是啥。
如果你不用材质,你可以用SetRenderState(D3DRS_AMBIENTMATERIALSOURCE,D3DMCS_COLOR1)用定点颜色作为材质。
[解决办法]
默认material应该全是0,不同的驱动可能有不同。谁看过d3d的speci可以看看默认material是有规定的么。