OpenGL中的窗口与视口

来源:互联网 发布:数据库设计流程软件 编辑:程序博客网 时间:2024/06/15 22:24
// 目标:测试OpenGL窗口视口坐标// 结果:glutInitWindowSize(640, 480); 指定的是windows概念中窗口(看得见,可移动,最大化,最小化等操作)大小,以像素为单位//       OpenGL中的窗口和视口是逻辑上的概念,其中窗口范围是画图时指定顶点坐标使用的坐标,而视口范围是将windows中概念中实际//       窗口映射成的范围#define GLUT_DISABLE_ATEXIT_HACK#include <gl/glut.h>void myInit(void){glClearColor(1.0, 1.0, 1.0, 0.0);     // 设置背景色为白色glColor3f(0.0f, 0.0f, 0.0f);          // 绘图颜色为黑色glPointSize(4.0);                     // 设置点大小为4x4像素// 1. 如果不做任何处理,OpenGL默认坐标范围为 x=[-1,1]  y=[-1,1]// 2. 只指定世界窗口坐标范围,默认视口坐标范围与世界窗口一样,按世界窗口绘图即可/*glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, 500, 0.0, 100);*/    // 3. 同时指定世界窗口坐标和视口范围,会发生从世界窗口坐标转换为视口坐标,按世界窗口绘图即可    glMatrixMode(GL_PROJECTION);    glLoadIdentity();gluOrtho2D(-2, 2, -1, 1);glViewport(73, -250, 11, 100);}// 重绘函数void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);     // 清屏// 1. 测试不做任何处理时,窗口与视口范围相同//    OpenGL默认坐标范围为 x=[-1,1]  y=[-1,1]/*glBegin(GL_QUADS);glVertex2f(-0.5,  0.5);glVertex2f( 0.5,  0.5);glVertex2f( 0.5, -0.5);glVertex2f(-0.5, -0.5);glEnd();*/// 2. 测试只指定世界窗口坐标范围,窗口与视口范围/*glBegin(GL_LINES);glVertex2f(0, 0);glVertex2f(500, 100);glEnd();*/// 3. 测试同时指定世界窗口坐标和视口范围glBegin(GL_LINES);glVertex2f(-2, -1);glVertex2f(2, 1);glEnd();glFlush();}void main(int argc, char *argv[]){glutInit(&argc, argv);                         // 初始化glut工具箱glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);   // 设置显示模式glutInitWindowSize(640, 480);                  // 设置窗口大小glutInitWindowPosition(100, 150);              // 设置窗口在屏幕上的位置glutCreateWindow("my first attempt");          // 创建窗口glutDisplayFunc(myDisplay);                    // 注册重绘函数myInit();glutMainLoop();                                // 进入主循环}

0 0
原创粉丝点击