// 目标:测试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(); // 进入主循环
}
03-06
223

“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交