OpenGL学习笔记之法线向量



须要注意的地方:函数

1.使用glTranslate*函数或者glRotate*函数能够改变物体的外观,但法线向量并不会随之改变。然而,使用glScale*函数,对每一坐标轴进行不一样程度的缩放,颇有可能致使法线向量的不正确,虽然OpenGL提供了一些措施来修正这一问题,但由此也带来了各类开销。所以,在使用了法线向量的场合,应尽可能避免使用glScale*函数。即便使用,也最好保证各坐标轴进行等比例缩放。spa

2.还有一个地方就是,只能给顶点或者多边形定义法线向量,不能够对多边形的的每一个指定的地方定义顶点(可能初学者会有所误解,红皮书有明确说明);orm

法线向量介绍:反射

        根据光的反射定律,由光的入射方向和入射点的法线就能够获得光的出射方向。所以,对于指定的物体,在指定了光源后,便可计算出光的反射方向,进而计算出光照效果的画面。在OpenGL中,法线的方向是用一个向量来表示。
不幸的是,OpenGL并不会根据你所指定的多边形各个顶点来计算出这些多边形所构成的物体的表面的每一个点的法线(这话听着有些迷糊),一般,为了实现光照效果,须要在代码中为每个顶点指定其法线向量。
指定法线向量的方式与指定颜色的方式有雷同之处。在指定颜色时,只须要指定每个顶点的颜色,OpenGL就能够自行计算顶点之间的其它点的颜色。而且,颜色一旦被指定,除非再指定新的颜色,不然之后指定的全部顶点都将以这一贯量做为本身的颜色。在指定法线向量时,只须要指定每个顶点的法线向量,OpenGL会自行计算顶点之间的其它点的法线向量。而且,法线向量一旦被指定,除非再指定新的法线向量,不然之后指定的全部顶点都将以这一贯量做为本身的法线向量。使用glColor*函数能够指定颜色,而使用glNormal*函数则能够指定法线向量。

di

相关文章
相关标签/搜索