- 注册时间
- 2004-9-4
- 最后登录
- 1970-1-1
|
初学OpenGL,各位前辈不要BS偶^_^
效果图
- // 包含头文件
- #include <windows.h> // 调用WIN32API,用于控帧
- #include <GL/glut.h> // GLUT库
- // 宏定义
- // 定义世界坐标系
- #define XMIN -5.0
- #define XMAX 5.0
- #define YMIN -5.0
- #define YMAX 5.0
- #define ZMIN -1.0
- #define ZMAX 1.0
- // 全局定义
- // 动态延时
- #define DELAY 20
- // 窗体大小
- int wndWidth = 300;
- int wndHeight = 300;
- // 上次操作时刻
- long lastms = 0;
- // 画线风格
- unsigned short line = 0xF0F0;
- // 函数定义
- // 初始化
- void init()
- {
- // 设置背景色
- glClearColor(0.9, 0.9, 0.9, 1.0);
- // 初始化当前矩阵
- glLoadIdentity();
- glOrtho(XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX);
- // 允许绘制虚线
- glEnable(GL_LINE_STIPPLE);
- // 设置线条宽度
- glLineWidth(3.0);
- // 设置前景颜色
- glColor3f(0.0, 0.0, 0.0);
- }
- // 窗体重绘的回调函数
- void display()
- {
- // 设置为模型视图
- glMatrixMode(GL_MODELVIEW);
- // 清除窗体图像
- glClear(GL_COLOR_BUFFER_BIT);
- // 设置线条风格
- glLineStipple(1, line);
- // 画4个三角形
- glBegin(GL_LINE_LOOP);
- glVertex2f(-4.0, 2.0);
- glVertex2f(-2.0, 2.0);
- glVertex2f(-3.0, -1.0);
- glEnd();
- glBegin(GL_LINE_LOOP);
- glVertex2f(-1.0, 2.0);
- glVertex2f(0.0, -1.0);
- glVertex2f(-2.0, -1.0);
- glEnd();
- glBegin(GL_LINE_LOOP);
- glVertex2f(0.0, 2.0);
- glVertex2f(2.0, 2.0);
- glVertex2f(1.0, -1.0);
- glEnd();
- glBegin(GL_LINE_LOOP);
- glVertex2f(3.0, 2.0);
- glVertex2f(4.0, -1.0);
- glVertex2f(2.0, -1.0);
- glEnd();
- // 交换缓存,刷新窗体
- glutSwapBuffers();
- }
- // 窗体大小的回调函数
- void reshape(int w, int h)
- {
- // 设置视口为整个窗体
- glViewport(0, 0, w, h);
- // 记录当前窗体大小
- wndWidth = w;
- wndHeight = h;
- }
- // 进程空闲的回调函数
- void idle()
- {
- // 控帧,每隔DELAY毫秒刷新一次
- if (GetTickCount() - lastms > DELAY)
- {
- // 循环移位,改变虚线的样式
- _asm
- {
- rol line, 1;
- }
- // 刷新窗体图像
- glutPostRedisplay();
- // 准备下一次控帧
- lastms = GetTickCount();
- }
- }
- // 主函数
- int main(int argc, char** argv)
- {
- // 初始化GLUT库
- glutInit(&argc,argv);
- // 初始化显示模式
- glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
- // 初始化窗体大小
- glutInitWindowSize(wndWidth, wndHeight);
- // 创建窗体
- glutCreateWindow("Sample");
- // 初始化
- init();
- // 注册窗体重绘的回调函数
- glutDisplayFunc(display);
- // 注册窗体大小的回调函数
- glutReshapeFunc(reshape);
- // 注册进程空闲的回调函数
- glutIdleFunc(idle);
- // 进入消息循环
- glutMainLoop();
- }
复制代码 |
|