OpenGL 第一个小程序

#include <gl/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

void display(void)
{
//清除掉所有像素
glClear(GL_COLOR_BUFFER_BIT);
//画一个白色多边形
glColor3f(1.0, 1.0, 1.0);
/*
glBegin(GL_POLYGON);
glVertex3f(0.25, 0.25, 0.0);
glVertex3f(0.75, 0.25, 0.0);
glVertex3f(0.75, 0.75, 0.0);
glVertex3f(0.25, 0.75, 0.0);
glEnd();
*/

glutWireTeapot(0.5);

//不等 OpenGL 其他地方调用,直接显示
glFlush();
}

void displayMotion(int x, int y)
{
//这里的x,y都是相对于绘制的窗口而言的,窗口的左上角为(0,0),右下角为(250,250)
cout<<x<<""<<y<<endl;
}

void displayMouse(int button, int state, int x, int y)
{
/*
* 这里的x,y都是相对于绘制的窗口而言的,窗口的左上角为(0,0),右下角为(250,250)
* button==0 左键 button==2 右键 state==0 按下 state==1 抬起
*/
cout<<"button="<<button<<" state="<<state<<" x="<<x<<" y="<<y<<endl;
}

void displayKeyboard(unsigned char key, int x, int y)
{
/*
* 这里的x,y都是相对于绘制的窗口而言的,窗口的左上角为(0,0),右下角为(250,250),是鼠标所在的位置
* key 是按下去的键
*/
cout<<"key="<<key<<" x="<<x<<" y="<<y<<endl;
}

void init(void)
{
//设置清除背景的颜色
glClearColor(0.0, 0.0, 0.0, 0.0);
//初始化
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);//设置坐标系 左、右、下、上、近、远
glOrtho(0.5, 0.5, 0.5, 0.5, -1.0, 1.0);

//这个程序画出来的图形,比例会随着窗口大小的变化而自动调整
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//初始化显示模式:单缓冲区,RGB模式
glutInitWindowSize(250, 250);
glutInitWindowPosition(100, 100);
glutCreateWindow("Hello,OpenGL");
init();

/*
* 显示回调函数,当GLUT确定一个窗口的内容重新显示时,通过这个函数注册的回调函数就会执行
* 所以应该把重绘场景所需要的所有代码都放在这个显示回调函数里
*/
glutDisplayFunc(display);


/*
* 当按下鼠标并移动鼠标时调用注册函数 glutMotionFunc(void(*func)(int x, int y))
*/
glutMotionFunc(displayMotion);


/*
* 当按下鼠标时调用注册函数
*/
glutMouseFunc(displayMouse);

/*
* 当按下键盘上的某个键时
*/
glutKeyboardFunc(displayKeyboard);


/*
* 如果程序修改了窗口的内容,有时候可能需要调用 glutPostRedisplay(),则它将会指示下面这个
* 函数调用已注册的显示回调函数。
* 必须调用这个函数来启动程序。已注册的显示回调函数,一旦进入循环永远不会退出
*/

glutMainLoop();

return 0;
}

 

posted @ 2011-11-01 11:11  lihui_yy  阅读(1156)  评论(0编辑  收藏  举报