OpenGL超级宝典学习笔记——光照参数与材料属性
添加光照
glEnable(GL_LIGHTING);
这个函数调用告诉OpenGL使用材料属性和光照参数去决定每个顶点的颜色值。如果没有开启这个函数,则看到的物体是昏暗的。开启光照后会根据你的材料属性和光照参数计算顶点的颜色值。下图对比未开启光照和开启光照的效果。
(未开启光照)
(开启光照)
设置全局环境光
OpenGL提供了一种全局的环境光。这种光是一种向所有方向均匀发射的光源。它可以照明没有被光源直接照射的物体的背面。
在OpenGL中通过glLightModel这个函数来设置全局环境光。第一个参数是GL_LIGHT_MODEL_AMBIETN。
//明亮的白光 GLfloat ambientLight[] = {1.0f, 1.0f, 1.0f, 1.0f}; //开启光照 glEnable(GL_LIGHTING); //设置全局环境光为白光 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
全局环境光照的默认RGBA值是(0.2, 0.2, 0.2, 1.0),这个值是比较昏暗的。
设置材料属性
设置好了全局环境光源后,我们需要为设置材料属性。有两种设置材料属性的方式,第一种是在指定多边形之前调用glMaterial函数。例子:
//灰色的材料属性 GLfloat gray[] = {0.75f, 0.75f, 0.75f, 1.0f}; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gray); glBegin(GL_TRIANGLES); glVertex3f(-15.0f, 0.0f, 30.0f); glVertex3f(0.0f, 15.0f, 30.0f); glVertex3f(0.0f, 0.0f, -56.0f); glEnd();glMaterialfv的第一个参数是指定正面, 反面, 正面和反面。第二个参数是告诉Opengl设置哪个属性。GL_AMBIENT_AND_DIFFUSE指定环境光反射属性和漫反射属性为同一个值。最后一个参数是一个RGBA值的数组。
在绝大多数情况下,环境光和漫反射光的成分是相同的,除非需要特殊的镜面光的效果。在多边形顶点之前需要调用glMaterial函数,并设置一个包含各种颜色成分的数组。这个操作还是相当繁琐的。下面介绍一种更简单的方式
第二种方法颜色追踪较为简单。使用颜色追踪,可以通过glColor来设置材料属性。第一步启用颜色追踪
glEnable(GL_COLOR_MATERIAL);
然后通过glColorMaterial指定需要颜色追踪的材料属性。下面的例子的设置 追踪多边形正面的环境光和漫反射的材料属性。
glColorMaterial(GL_FRONT, GL_AMBIENT_ANDDIFFUSE);
下面的例子使用颜色追踪的方式重写上面的例子:
//开启颜色追踪 glEnable(GL_COLOR_MATERIAL); //设置颜色追踪的材料属性以及多边形的面 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); //设置颜色 glColor3f(0.75f, 0.75f, 0.75f); glBegin(GL_TRIANGLES); glVertex3f(-15.0f, 0.0f, 30.0f); glVertex3f(0.0f, 15.0f, 30.0f); glVertex3f(0.0f, 0.0f, -56.0f); glEnd();
设置环境的例子:
void SetupRC() { GLfloat ambientLight[] = {1.0f, 1.0f, 1.0f, 1.0f}; glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glFrontFace(GL_CCW); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); //设置光照模型 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); //设置材料追踪 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glClearColor(0.0f, 0.0f, 05.f,1.0f); }开启明亮的环境光效果:
把环境光调成原来的一半的效果:
GLfloat ambientLight[] = {0.5f, 0.5f, 0.5f, 1.0f};
相关推荐
夕加加 2020-07-20
shsshs 2020-06-13
夕加加 2020-06-13
图形学与可视化 2020-06-11
shsshs 2020-05-05
alexazh 2020-05-03
夕加加 2020-04-23
sxaudq0 2020-04-14
qiangbizhi 2020-04-09
alexazh 2020-03-06
sxaudq0 2020-02-23
夕加加 2020-02-15
sxaudq0 2020-01-18
夕加加 2020-01-06
shsshs 2019-12-27
shsshs 2019-12-05
dayenglish 2013-07-12