龙书开始例子能看到窗体内有个红色三角形的时候,书中教我们定义了一个这样的灵活顶点结构:
struct ColorVertex{
float x, y, z;
D3DCOLOR color;
static const DWORD FVF;
}
const DWORD ColorVertex::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
diffuse为何物不就是漫反射的意思嘛,为啥能代表颜色?
龙书第五章开头说到了,使用光照时,我们无需自行指定顶点的颜色值;Direct3D会将顶点送入光照计算引擎(light engine),依据光源类型、材质(material)以及物体表面相对于光源的朝向,计算出每个顶点的颜色值。
那么颜色那张我们自己填写的D3DFVF_DIFFUSE原来是光照自己计算的,不管是我们自己指定还是光照引擎去计算,最终出来这个diffuse是做什么的?为啥决定了最终三角形的颜色?
cg tutorial说了。。p93 基本的光照模型
OpenGL和Direct3D提供了几乎相同的固定功能光照模型。在这里我们使用一个简化的版本,我们称之为“基本”模型。这个基本模型和OpenGL和Direct3D模型一样,对经典的Phone模型进行了修改和扩展。在基本模型里,一个物体的表面颜色是放射、环境放射、漫反射和镜面反射等光照作用的总和。每种光照作用取决于表面材质的性质和光源的性质的共同作用。从数学上描述基本模型的高级公式如下所示:
surfaceColor = emissive + ambient + diffuse + specular
这里可以大概了解了。关闭光照后,最终颜色颜色还是这个公式的吧,只是参数是手动指定了。
但是有点疑惑。。干嘛不用其他的光代表?比如D3DFVF_SPECULAR。。我也改了下例子,将D3DFVF_DIFFUSE换成这个镜反射,但是三角形不见了。。难道是上面yy的错了吗?对了,surfaceColor 就这个定了吗?那纹理取出的颜色咋办?
//高手帮忙解答下吧。下面是搜到的百度解答。。
opengl 中 光照纹理如何同时存在
问题补充:
还有物体自发光怎么实现呀?