700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用OpenGL 在窗口中绘制两个立体图形 位置分别为窗口的左侧和右侧 添加光照 两个

使用OpenGL 在窗口中绘制两个立体图形 位置分别为窗口的左侧和右侧 添加光照 两个

时间:2023-11-16 18:17:01

相关推荐

使用OpenGL 在窗口中绘制两个立体图形 位置分别为窗口的左侧和右侧 添加光照 两个

总体思路:

第一步,使用viewpoint函数来建立两个分割的窗口

第二步,在两个视口分别绘制带光照效果的立体图形

第三步,使用进栈出栈函数和Rotatef函数实现两图像各自的旋转

关于glPushMatrix();和glPopMatrix();

OpenGL中图形变换实现的原理是通过矩阵进行操作的。在每次变换后,opengl都将会呈现一种新的状态。如果在经过一些变换后我们想回到原来的状态,opengl就帮我们提供了两个函数:glPushMatrix()和glPopMatrix();

具体代码如下:

#include "stdafx.h"#include <GL/glut.h>GLint b;void display(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glViewport(0, 0, 400, 400);glBegin(GL_LINES);glVertex2f(0.0, -1.0);glVertex2f(0.0, 1.0);glEnd();//左侧glPushMatrix();//进栈glViewport(0, 0, 200, 400);glColor3f(1.0,0.0,0.0);glRotatef(b,1,0,0);glutSolidTeapot(0.5);glPopMatrix();//出栈//右侧glViewport(200, 0, 200, 400);glColor3f(0.0,0.0,1.0);glRotatef(b,0,1,0);glutSolidTeapot(0.5);glFlush();}void time(int value){b+=2;//为防止b的数据溢出 对b进行一个判断if(b>=360)b=b-360;glutPostRedisplay();glutTimerFunc(30,time,1);}void reshape(int w,int h){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<h)glOrtho(-1.5,1.5, -1.5,1.5 * (GLfloat)h / (GLfloat)w, -10, 10 );elseglOrtho(-1.5 * (GLfloat)w / (GLfloat)h, 1.5, -1.5 ,1.5, -10,10 );glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void init (){glClearColor(1.0,1.0,1.0,0.0);//glColor3f(1.0,0.0,0.0);GLfloat light0_diffuse[]= { 1.0, 1.0, 1, 1.0};GLfloat light0_position[] = { 1.0, 1.0, 1.0, 0.0 };glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);glLightfv(GL_LIGHT0, GL_POSITION,light0_position);glShadeModel(GL_SMOOTH);//光滑着色,过渡色效果glEnable(GL_LIGHTING);//启动光照,总开关glEnable(GL_LIGHT0);//打开0号光源glEnable(GL_DEPTH_TEST);//打开深度缓冲区,3D时候用glEnable(GL_COLOR_MATERIAL);}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitWindowPosition(200,200);glutInitWindowSize(500,500);glutCreateWindow("1");init();glutTimerFunc(30,time,1);glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;}

结果如下:

(动态的结果,我只截取里其中的一个状态)

使用OpenGL 在窗口中绘制两个立体图形 位置分别为窗口的左侧和右侧 添加光照 两个图形分别绕x轴和y轴旋转。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。