0.颜色
a.颜色坐标系
b.颜色设置与着色
void colortriangle() { glClear(GL_COLOR_BUFFER_BIT); glShadeModel(GL_SMOOTH); glBegin(GL_TRIANGLES); /************************************颜色设置及着色************************************************** 1、void glColorXt(red, green, blue, alpha); 其中x代表参数个数,可以是3个值代表rgb颜色,或者使4个值分别代表rgba。alpha成分用来代表透明度。 t代表参数的类型,可以是b,d,f,i,s,ub,ui,us对应的类型是byte,double,float,integer,short,unsigned byte, unsigned integer,unsigned short。 glColor3f指定各个颜色成分的强度值的范围为0.0到1.0之间。 glColor3ub则可以指定各个颜色成分的强度值的范围在0-255之间。 2、着色分为两种 GL_FLAT:图元是点(画的是线什么的情况下),使用最后一个点的颜色作为线(其他图)颜色 GL_SMOOTH:图元是点(画的是线什么的情况下),均衡,颜色渐变(两顶点间) ****************************************************************************************************/ glColor3ub((GLubyte)255,(GLubyte)0,(GLubyte)0); //ub:unsign byte glVertex3f(0.0f,100.0f,0.0f); glColor3ub((GLubyte)0,(GLubyte)255,(GLubyte)0); glVertex3f(100.0f,-35.0f,0.0f); glColor3ub((GLubyte)0,(GLubyte)0,(GLubyte)255); glVertex3f(-100.0f,-35.0f,0.0f); glEnd(); glFlush(); }
c.看到的颜色是光照颜色和材料属性综合的结果
若光源颜色为( LR , LG , LB ),材质颜色为( MR , MG , MB ),最终颜色为( LR*MR , LG*MG , LB*MB )。(B1+B2)*MB )。因此,材料的颜色成分决定了入射光被反射的百分比。
栗子:光源颜色为(0.5, 0.5, 0.5),材料的颜色为(0.5, 1.0, 0.5)那么最终的颜色是(0.5*0.5, 0.5*1.0, 0.5*0.5) = (0.25, 0.5, 0.25) 。
1.光照
我们观察到的实物的颜色除了,实物本身的颜色外,还包括实物的材质和光照对观察的影响。
a.光照类型
环境光、散射光、镜面光的强度都会衰减(这也是为什么在设置光照的同事还要设置光照位置的一个原因),只有发射光和全局环境光的强度没有衰减。
环境光:
环境光没有特定的方向。环境光的光线充满着整个场景。场景中的物体都被环境光从各个方向照射着。环境光的特点是:照射在物体上的光来自周围各个方向,又均匀地向各个方向反射。
全局环境光栗子
//明亮的白光 GLfloat ambientLight[] = {1.0f, 1.0f, 1.0f, 1.0f}; //开启光照 glEnable(GL_LIGHTING); //设置全局环境光为白光 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
漫反射光:
漫放射光是一组来自特定方向,具有方向性的光。根据入射光线的角度在表面上均匀地向各个方向反射。漫反射的特点是:光源来自一个方向,反射光均匀地射向各个方向。漫反射光采用点光源照射物体。点光源是位于空间某个位置的一个点,向周围所有的方向上辐射等光强的光。在点光源的照射下,物体表面的不同部分亮度不同,亮度的大小依赖于它的朝向以及它与点光源之间的距离。
镜面光:
镜面光与漫反射光一样是具有方向性的。高强度的镜面光会在被照射的物体的表面上形成亮点。对于理想的高光泽度反射面,反射角等于入射角时,光线才会被反射,即只有在等于入射角的反射角方向上,观察者才能看到反射光。对于这种理想的反射面,镜面反射的光强要比环境光和漫反射的光强高出很多倍,这时,如果观察者正好处在P点的镜面反射方向上,就会看到一个比周围亮得多的高光点。
b.光照与法线
作用于定义: