OpenGL入门04.光照
Posted stq_wyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL入门04.光照相关的知识,希望对你有一定的参考价值。
光照包括环境光、漫反射和镜面反射。在OpenGL中,我们要使用光照,首先要初始化光照信息。
//关闭背面渲染,提高效率
glEnable(GL_CULL_FACE);
//初始化灯光
float whiteColor[] = 1.0f,1.0f,1.0f,1.0f ;
//灯源位置
float lightPos[] = 0.0f,1.0f,0.0f,0.0f ;
//环境光
glLightfv(GL_LIGHT0, GL_AMBIENT, whiteColor);
//漫反射光
glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteColor);
//镜面反射光
glLightfv(GL_LIGHT0, GL_SPECULAR, whiteColor);
//设置光源类型
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
//设置材质颜色
float blackMat[] = 0.0f,0.0f,0.0f,1.0f ;
float ambientMat[] = 0.1f,0.1f,0.1f,1.0f ;
float diffuseMat[] = 0.4f,0.4f,0.4f,1.0f ;
float specularMat[] = 0.9f,0.9f,0.9f,1.0f ;
glMaterialfv(GL_FRONT, GL_AMBIENT, ambientMat);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMat);
glMaterialfv(GL_FRONT, GL_SPECULAR, specularMat);
//开启光照
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
在上面代码中,分别设置了白色的灯光、灯源位置、环境光、漫反射、镜面反射以及光源类型和材质。然后我们还需要设置法线。
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//开始绘制
glBegin(GL_TRIANGLES);
glNormal3f(0.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, -0.5f, -2.0f);
glNormal3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f,-0.5f, -2.0f);
glNormal3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0f, -0.5f, -10.0f);
//结束绘制
glEnd();
整个OpenGL光照的流程就完成了,来看下效果:
以上是关于OpenGL入门04.光照的主要内容,如果未能解决你的问题,请参考以下文章