开启光照:物体的着色算法不单单依赖于顶点的颜色,引用内置的光照算法
glEnable(GL_LIGHTING):这个仅仅是开启颜色计算的算法,
变黑的原因:
1.无光源;
2.无法线。
原始伪代码如下:
void Init() {
//设置当前矩阵
glMatrixMode(GL_PROJECTION); //设置为投影矩阵(对矩阵造成影响的代码,都会影响当前矩阵)
//第一个参数是垂直方面的视角,第二个是宽和高的比,第三个是最近可以看到的距离,第四个是最远距离
gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);
glMatrixMode(GL_MODELVIEW);//把当前矩阵切换为模型视图矩阵
glLoadIdentity(); //加载一个单位矩阵
}
void Draw() {
glClearColor(30.0f / 255.0f, 30.0f / 255.0f, 30.0f / 255.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor4ub(255, 255, 255, 255);
glVertex3f(-0.5f, -0.2f, -0.5f);
glVertex3f(0.5f, -0.2f, -0.5f);
glVertex3f(0.5f, -0.2f, -1.0f);
glVertex3f(-0.5f, -0.2f, -1.0f);
glEnd();
}
程序运行截图如下:
当glEnable(GL_LIGHTING)启动这个后就变黑了
伪代码如下:
void Init() {
//设置当前矩阵
glMatrixMode(GL_PROJECTION); //设置为投影矩阵(对矩阵造成影响的代码,都会影响当前矩阵)
//第一个参数是垂直方面的视角,第二个是宽和高的比,第三个是最近可以看到的距离,第四个是最远距离
gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);
glMatrixMode(GL_MODELVIEW);//把当前矩阵切换为模型视图矩阵
glLoadIdentity(); //加载一个单位矩阵
}
void Draw() {
glClearColor(30.0f / 255.0f, 30.0f / 255.0f, 30.0f / 255.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_LIGHTING);
glBegin(GL_QUADS);
glColor4ub(255, 255, 255, 255);
glVertex3f(-0.5f, -0.2f, -0.5f);
glVertex3f(0.5f, -0.2f, -0.5f);
glVertex3f(0.5f, -0.2f, -1.0f);
glVertex3f(-0.5f, -0.2f, -1.0f);
glEnd();
}
运行截图如下: