都是法向量惹的祸!!!

画Bezier旋转曲面,不添加光照效果就是原来的颜色,很好。

一旦添加了光照效果,你要么定义材质和添加纹理。否则你的物体画的是什么颜色没有用,显示出来的颜色就是光的颜色。

如果定义材质的话,比如定义漫反射材质(1.0,0.0,0.0)那么你物体就反射入射光中的红色分量,即物体显红色。

值得注意的是一旦你定义了材质,那么opengl认为后面它画的所有东西都是这个材质的,直到你定义新的材质为止。(opengl是状态机)

 

 

opengl定义的光照模型一般有GL_FLAT(Constant shading一个面的法向量相同),GL_SMOOTH(Gouraud shading每个顶点计算法向量)。我对具体实现的机制还是很模糊,所以再画旋转曲面的时候就没有定义法向量。结果第一次画曲面的时候,光照的颜色很好看,但是当我转到另一个动画模型之后再转回来,问题就出现了,光照开着,但是是曲面暗灰色的,按理至少也该是光的颜色吧,不知道为什么。耗了一个下午也没搞清楚。最后在画每个微小矩形的时候设置下法线就没问题了!

 

:-(,不明白opengl的机制啊,总是遇到各种奇怪的问题!

记住以后启用光照的时候,如果画的模型不是用gluSphere之类函数画出来的话,(自己计算点的情况),加个法向量。加法向量也是你加一个,后面的所有点的法向量就都是这个,直到你改变为止!

 

你可能感兴趣的:(算法)