#include <GL/glut.h> GLfloat light_position[] = { 0.0, 0.0, 10.0, 1.0 };//光照效果 GLfloat light_ambient[] = { 0.2, 0.2, 0.2, 1.0 };//光照效果 GLfloat light_diffuse[] = { 0.8, 0.8, 0.8, 1.0 };//光照效果 GLfloat light_specular[] = { 0.5, 0.5, 0.5, 1.0 };//光照效果 GLfloa
时间: 2023-06-13 14:08:59 浏览: 186
glut库文件-错误: 无法打开包括文件:“gl/glut.h”
5星 · 资源好评率100%
t mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };//材质反射光颜色 GLfloat mat_diffuse[] = { 0.8, 0.8, 0.8, 1.0 };//材质漫反射光颜色 GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };//材质高光颜色 GLfloat high_shininess[] = { 100.0 };//材质高光度值 GLint cube; //正方体的句柄 void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); //启用深度测试 glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); cube = glGenLists(1); //创建新的显示列表 glNewList(cube, GL_COMPILE); //开始创建显示列表 glBegin(GL_QUADS); //绘制正方体的六个面,每个面有四个顶点 glColor3f(0.0, 1.0, 0.0); //设置正方体的颜色 glNormal3f(0.0, 0.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); glVertex3f(1.0, -1.0, 1.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); glColor3f(1.0, 0.5, 0.0); glNormal3f(0.0, 0.0, -1.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, 1.0, -1.0); glVertex3f(1.0, 1.0, -1.0); glVertex3f(1.0, -1.0, -1.0); glColor3f(1.0, 0.0, 0.0); glNormal3f(0.0, 1.0, 0.0); glVertex3f(-1.0, 1.0, -1.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(1.0, 1.0, -1.0); glColor3f(1.0, 1.0, 0.0); glNormal3f(0.0, -1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(1.0, -1.0, 1.0); glVertex3f(-1.0, -1.0, 1.0); glColor3f(0.0, 0.0, 1.0); glNormal3f(1.0, 0.0, 0.0); glVertex3f(1.0, -1.0, -1.0); glVertex3f(1.0, 1.0, -1.0); glVertex3f(1.0, 1.0, 1.0); glVertex3f(1.0, -1.0, 1.0); glColor3f(1.0, 0.0, 1.0); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0); glVertex3f(-1.0, -1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0); glVertex3f(-1.0, 1.0, -1.0); glEnd(); glEndList(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0, 0.0, -5.0); glRotatef(30, 1.0, 0.0, 0.0); glRotatef(30, 0.0, 1.0, 0.0); glCallList(cube); //调用显示列表 glutSwapBuffers(); } void reshape(int width, int height) { glViewport(0, 0, (GLsizei)width, (GLsizei)height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(400, 400); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }
这段代码是一个简单的 OpenGL 程序,用于绘制一个彩色的立方体,同时加入了光照效果和材质反射光颜色设置。其中,glLightfv 和 glMaterialfv 函数用于设置光照效果和材质反射光颜色。glGenLists 函数用于创建新的显示列表,glNewList 和 glEndList 函数用于开始和结束创建显示列表,glCallList 函数用于调用显示列表。在 display 函数中使用 glLoadIdentity 函数将当前矩阵重置为单位矩阵,glTranslatef 函数进行平移变换,glRotatef 函数进行旋转变换。在 reshape 函数中使用 glViewport 函数设置视口大小,gluPerspective 函数设置投影矩阵。最后,在 main 函数中使用 glutInit 函数初始化 GLUT,glutInitDisplayMode 函数设置显示模式,glutInitWindowSize 函数设置窗口大小,glutCreateWindow 函数创建窗口,glutDisplayFunc 函数设置显示回调函数,glutReshapeFunc 函数设置重塑回调函数,glutMainLoop 函数进入 GLUT 事件处理循环。
阅读全文