好长时间没动过OpenGL了,现在忽然醒悟,又从前面开始,一点一点重新开始理解复习。
昨天看到gluOtho2d及glViewport,突然明白了两个函数的作用
一、gluOtho2d()
这个函数是定义剪裁面,何谓剪裁面,我这样理解,我们是在一个无限的空间里绘图,因为坐标是 可以随便指定的,随便在哪个坐标绘图,但是我们可以通过定一个剪裁面,也就是说,有一架照相机,尽管沿途风景很多,但是镜头只能拍到一定的范围,这个范围就是我们的剪裁面,我们能显示的就是这个剪裁面。
二、glViewPort()
这个函数跟上面的相似,但是我们发现上面的指定一个剪裁面后,是在我们定义的窗口的整个窗口中显示我们剪裁出来的面,而这个函数就是为了在一部分中显我们要显示的剪裁面,即,我们先取景(就是用gluOrtho2D()剪出来那个),然后在我们定义的窗口中选一个区域来显示这个取好的景。
下面是一个例子:
#include <gl/glut.h>
//不显示控制台窗口
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"")
void display()
{
//glMatrixMode( GL_MODELVIEW );
//glLoadIdentity();
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, 1.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, 0.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(

本文详细解释了OpenGL中的glViewport()和glOrtho()函数,这两个函数分别用于定义视口和创建正交投影。glViewport指定在窗口中显示的区域,而glOrtho则设置剪裁平面,影响绘制的范围。通过示例代码,作者展示了如何使用这两个函数在不同区域显示不同形状,强调了它们在调整图像显示和分辨率上的应用。
最低0.47元/天 解锁文章
3035

被折叠的 条评论
为什么被折叠?



