您的位置:首页 > 运维架构

opengl在console程序中简单画图的过程

2013-06-24 17:24 369 查看
1.在main函数中实现初始化工作、初始化glut、窗口、gl、事件处理、主循环

2.在reshape中实现display之前的模型视图矩阵设置、投影矩阵设置、视口设置等

3.在display函数中实现绘图操作,一般会用到模型视图矩阵堆栈,实现图形的转换

4.辅助的一些响应函数,mouse,keyboard等实现

例子:

#include<gl/glut.h>

static int year=0;
static int day=0;

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glutWireSphere(1.0,20,16);
glRotatef(year,0.0,1.0,0.0);
glTranslatef(2.0,0.0,0.0);
glRotatef(day,0.0,1.0,0.0);
glutWireSphere(0.2,10,8);
glPopMatrix();

glutSwapBuffers();
}

void reshape(int w, int h)
{
//视口变换
glViewport(0,0,w,h);
//投影变换

//模型视图变换
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//	gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,0.0,-1.0);
gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,2.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,w/h,1.0,20.0);
}

void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case 'd':
day=(day+10)%360;
glutPostRedisplay();
break;
case 'D':
day=(day-10)%360;
glutPostRedisplay();
break;
case 'y':
year=(year+5)%360;
glutPostRedisplay();
break;
case 'Y':
year=(year-5)%360;
glutPostRedisplay();
break;
default:
break;
}
}

void main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(600,480);
glutInitWindowPosition(300,300);
glutCreateWindow("sun");

glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);

glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutReshapeFunc(reshape);
glutMainLoop();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: