opengl 材质

来源:互联网 发布:照片后期特效软件 编辑:程序博客网 时间:2024/04/29 09:24

材质RGB值和光源RGB值的关系

  材质的颜色与光源的颜色有些不同。对于光源,R、G、B值等于R、G、B对其最大强度的百分比。若光源颜色的R、G、B值都是1.0,则是最强的白光;若值变为0.5,颜色仍为白色,但强度为原来的一半,于是表现为灰色;若R=G=1.0,B=0.0,则光源为黄色。对于材质,R、G、B值为材质对光的R、G、B成分的反射率。比如,一种材质的R=1.0、G=0.5、B=0.0,则材质反射全部的红色成分,一半的绿色成分,不反射蓝色成分。也就是说,若OpenGL的光源颜色为(LR、LG、LB),材质颜色为(MR、MG、MB),那么,在忽略所有其他反射效果的情况下,最终到达眼睛的光的颜色为(LR*MR、LG*MG、LB*MB)

  同样,如果有两束光,相应的值分别为(R1、G1、B1)和(R2、G2、B2),则OpenGL将各个颜色成分相加,得到(R1+R2、G1+G2、B1+B2),若任一成分的和值大于1(超出了设备所能显示的亮度)则约简到1.0


下面先给出一段设置材质的代码:

    glEnable(GL_COLOR_MATERIAL);    const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };    const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };    const GLfloat high_shininess[] = { 100.0f };    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

其中

glEnable(GL_COLOR_MATRIAL);  启动颜色材质,可以在激活光照的情况下,使用glColor3f给物体上色。

GL_SHININESS:镜面指数,取值范围为0-128,该值越小,表示材质越粗糙,点光源发射的光线照射到上面,也可以产生较大的亮点。该值越大,表示材质越类似于镜面,光源照射到上面后,产生较小的亮点。

1 0