C++ opengl 启动光照

开启光照:物体的着色算法不单单依赖于顶点的颜色,引用内置的光照算法

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();
}

运行截图如下:

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/81177166