纹理灯光材质关系

来源:互联网 发布:bilibili定时关闭软件 编辑:程序博客网 时间:2024/04/29 08:53

-------------------------------西昌.何雨锋 纹理灯光材质关系
材质(Material)是物体表面的粗糙程度、反光度、透明度等因素组合。
纹理(Texture)是物体表面的花纹、纹路等
灯光纹理(LightMaterial)是物体表面是否接受周围的灯光照射。

在mesh中有一个函数:LoadXFile("xfilename",bool loadtexture,bool lightmaterial)就说明了这个问题。
当材质读取关闭时,读出来的东西将没有任何花纹,但是如果这时候灯光材质是打开的,那么它将接受灯光。
当材质读取打开时而灯光纹理关闭时,那么就出现物体虽然显示材质,但是在任何灯光环境下都保持不变。
当材质读取打开,同时灯光纹理也打开时,那么没在光照耀下的将变成黑色,但是一进入灯光环境中,不但纹理显示了,而且也受灯光影响了,这才是最真实的。

同样的其他物体的函数为:ACTOR2->load("mdlfile","name",灯光材质允许,纹理读取允许)
land的灯光材质纹理选项似乎没有找到,而land本身是自允许灯光材质的。

在无光照情况下
一般的材质为:SetAmbient (r,g,b,a)    周围材质        环境材质,颜色将合成出来,在无灯光下显示原来的材质,但是似乎RGB在负值时才有效。
              Setdiffuse (r,g,b,透明度)    中部       这个材质透明度如果不是1的话,就会变得透明,记得要把渲染放在后面,否则透明就不真实了,其他几个参数对有纹理的物体完全无效。
              SetEmissive(r,g,b,a)         吸收       反光度,前者为颜色,最后一个参数为强度
              Setpower(float power)    强度     当强度很强时,就可以抵消很大程度的环境光,但是最后一个值超过1以后就不会有任何变化
              Specular                 反射   作用不明
 
             
再调节出了这些材质之后,怎样才能让这些材质与表面的纹理发生混合,产生出既有纹理又有材质的效果呢?
mesh->SetAdvancedBlending函数不知道有没有这作用。
mesh1->SetAdvancedBlending(tvtrue,(enum TrueVision3D::CONST_D3DBLEND) D3DBLEND_SRCALPHA,(enum TrueVision3D::CONST_D3DBLEND) D3DBLEND_INVSRCALPHA,-1,1);
                           好象没啥作用                                混合模式 

mesh1->SetBlendingMode(CONST_TV_BLENDINGMODE)
   极有用处,记得读出的那些火光啊树啊为什么老有边缘吗?就是因为没用混合模式,如果使用参数TV_BLEND_ADD,那么将边缘全无!!