OpenGL视口变换函数:glViewport
2012-11-20 17:53
211 查看
调用glViewPort函数来决定视见区域,告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。
glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);
其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度。注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。图3.1-1表示了在WindowsGDI中的窗口坐标,而图3.1-2则是OpenGL所定义的窗口坐标。
例如,要设置如图3.1-3中的视见区域,我们应该调用函数:
glViewPort(100,100,Width,Height);
图3.1-3
glViewport()函数可以实现拆分窗口的功能,可以用不同的视口多次绘制同一个物体,如,为了创建两个并排的窗口,可以使用下面的这些函数,并辅以适当的模型视图和投影变换:
glViewport(0, 0, sizex/2, sizey);
;
;
;
glViewport(sizex/2, 0,sizex/2, sizey);
理解glViewport和 gluOrtho2D的好例子:
glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);
其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度。注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。图3.1-1表示了在WindowsGDI中的窗口坐标,而图3.1-2则是OpenGL所定义的窗口坐标。
例如,要设置如图3.1-3中的视见区域,我们应该调用函数:
glViewPort(100,100,Width,Height);
图3.1-3
glViewport()函数可以实现拆分窗口的功能,可以用不同的视口多次绘制同一个物体,如,为了创建两个并排的窗口,可以使用下面的这些函数,并辅以适当的模型视图和投影变换:
glViewport(0, 0, sizex/2, sizey);
;
;
;
glViewport(sizex/2, 0,sizex/2, sizey);
理解glViewport和 gluOrtho2D的好例子:
#include <gl/glut.h> //不显示控制台窗口 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") void display() { glClear( GL_COLOR_BUFFER_BIT ); glColor3f( 1.0, 0.0, 0.0 ); //画分割线,分成四个视见区 glViewport( 0, 0, 400, 400 ); 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, 200, 200 ); glBegin( GL_POLYGON ); glVertex2f( -0.5, -0.5 ); glVertex2f( -0.5, 0.5 ); glVertex2f( 0.5, 0.5 ); glVertex2f( 0.5, -0.5 ); glEnd(); //定义在右上角的区域 glColor3f( 0.0, 0.0, 1.0 ); glViewport( 200, 200, 200, 200 );//注意,后面这两个参数是高度和宽度,而不是坐标 glBegin( GL_POLYGON ); glVertex2f( -0.5, -0.5 ); glVertex2f( -0.5, 0.5 ); glVertex2f( 0.5, 0.5 ); glVertex2f( 0.5, -0.5 ); glEnd(); //定义在左上角的区域 glColor3f( 1.0, 0.0, 0.0 ); glViewport( 0, 200, 200, 200 );//注意,后面这两个参数是高度和宽度,而不是坐标 glBegin( GL_POLYGON ); glVertex2f( -0.5, -0.5 ); glVertex2f( -0.5, 0.5 ); glVertex2f( 0.5, 0.5 ); glVertex2f( 0.5, -0.5 ); glEnd(); //定义在右下角 glColor3f( 1.0, 1.0, 1.0 ); glViewport( 200, 0, 200, 200 );//注意,后面这两个参数是高度和宽度,而不是坐标 glBegin( GL_POLYGON ); glVertex2f( -0.5, -0.5 ); glVertex2f( -0.5, 0.5 ); glVertex2f( 0.5, 0.5 ); glVertex2f( 0.5, -0.5 ); glEnd(); 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 ); } int main( int argc, char ** argv ) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB ); glutInitWindowPosition( 100, 100 ); glutInitWindowSize( 400, 400 ); glutCreateWindow( "蒋昌松_使用glbegin_glend_glViewport" ); glutDisplayFunc( display ); init(); glutMainLoop(); }
相关文章推荐
- OpenGL 入门纪录--视口变换函数glViewPort函数用法
- OpenGL多视口变换函数:glViewport使用
- OpenGL视口变换函数:glViewport and the relationship between glViewport and gluOtho
- OpenGL的glViewport视口变换函数详解[转]
- (7)OpenGL多视口变换函数:glViewport使用
- 用 OpenGL 函数实现二维观察的窗口与视区的映射变换,修改视口定义函数,熟悉窗口与视区的概念
- OpenGL中glMatrixMode()函数以及视图变换,模型变换,投影变换,视口变换的理解
- 【OpenGL】顶点变换常用函数总结
- OpenGL下的极坐标视图变换函数
- OpenGL模型视图变换、投影变换、视口变换总结
- OpenGL变换函数说明
- OpenGL函数思考-glViewport
- OpenGL模型视图变换、投影变换、视口变换
- OpenGL的glViewport()函数和glOrtho()函数用法
- OpenGL QT glViewport 函数的作用
- OpenGL的gluLookAt观察变换函数详解
- 小白学opengl之变换函数心得
- Win32 OpenGL编程(10) 视口变换
- OpenGL的视图变换、模型变换、投影变换、视口变换
- OpenGL的glViewPort窗口设置函数实现分屏