OpenGL多视口变换函数:glViewport使用
2015-11-07 13:49
218 查看
OpenGL多视口变换函数:glViewport使用
glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的
1.功能glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。
2.参数
glViewport(GLint
x,GLint y,GLsizei width,GLsizei height)为其函数原型。
X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。
3.代码示例:
glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的
1.功能glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,如图1,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。
2.参数
glViewport(GLint
x,GLint y,GLsizei width,GLsizei height)为其函数原型。
X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。width,height————表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。
3.代码示例:
//计算gluLookAt矩阵 #pragma once #include <windows.h> #define GLUT_DISABLE_ATEXIT_HACK #include <gl/glut.h> #include <atlimage.h> #include <math.h> //不显示控制台窗口 //#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") float g_RotAngle = 0.5; void TimerFunction(int value) { g_RotAngle += 1.0; if (g_RotAngle>=360) { g_RotAngle = 0; } glutPostRedisplay(); glutTimerFunc(10, TimerFunction, 1); } void display() { //glMatrixMode( GL_MODELVIEW ); //glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); //画分割线,分成四个视见区 glViewport(0, 0, 800, 600); glBegin(GL_LINES); glVertex2f(-1.0, 0); glVertex2f(1.0, 0); glVertex2f(0.0, -1.0); glVertex2f(0.0, 1.0); glEnd(); //定义在左下角的区域 glColor3f(0.0, 1.0, 0.0); glViewport(0, 0, 400, 300); glPushMatrix(); glRotatef(g_RotAngle, 0.0, 1.0, 0.0); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glPopMatrix(); //定义在右上角的区域 glColor3f(0.0, 0.0, 1.0); glViewport(400, 300, 400, 300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标 glPushMatrix(); glRotatef(-g_RotAngle, 0.0, 1.0, 0.0); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glPopMatrix(); //定义在左上角的区域 glColor3f(1.0, 0.0, 1.0); glViewport(0, 300, 400, 300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标 glPushMatrix(); glRotatef(-2*g_RotAngle, 0.0, 1.0, 0.0); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glPopMatrix(); //定义在右下角 glColor3f(1.0, 1.0, 0.0); glViewport(400, 0, 400,300);//一定要注意,后面这两个参数是高度和宽度,而不是坐标 glPushMatrix(); glRotatef(-3*g_RotAngle, 0.0, 1.0, 0.0); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glPopMatrix(); glFlush(); } void init() { glClearColor(0.0, 0.0, 0.0, 0.0); glColor3f(1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //定义剪裁面 gluOrtho2D(-1.0, 1.0, -1.0, 1.0); //glViewport( 0, 0, 200, 200 ); //放在这里不好使 } int main(int argc, char ** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(100, 100); glutInitWindowSize(800, 600); glutCreateWindow("OpenGL多视口编程"); glutDisplayFunc(display); init(); glutTimerFunc(1, TimerFunction, 1); glutMainLoop(); }4.截图效果:
相关文章推荐
- 构建动态网站之安装lamp组件(分别安装)
- Linux系统中strace命令的使用教程
- 10分钟教会你Apache Shiro
- Linux 远程管理工具(SecureCRT)
- linux debian
- nginx rewrite规则
- nginx 内置变量大全
- nginx 重写 rewrite 基础及实例
- linux下安装及启动mysql
- 4分钟apache自带ab压力测试工具使用: 2015.10.4
- Apache VirtualHost 虚拟主机 ProxyPass 反向代理 RewriteEngine url 重写
- C : stack memory, goto and “jump into scope of identifier with variably modified type”,
- 基于js与flash实现的网站flv视频播放插件代码
- 安装最新的qt5.5.1,在使用qmake -v 出现qmake -v could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No su
- Linux Scheduling Domains
- (转)not found while looking for property错误
- linux下同步工具rsync+inotify 详解
- linux命令-mke2fs
- Action class [userAction] not found - action - file:/D:/tomcat-6.0.29/webapps/SS
- Docker源码分析(一):Docker架构