openGL学习之绘制一个矩形

本文详细介绍了OpenGL中的核心库、实用程序库等,并通过实例演示了如何使用OpenGL绘制矩形,包括不使用裁剪、使用裁剪及设置视口大小的影响。深入解析了gluOrtho2D和glViewport函数的作用,展示了不同设置下图形的变换效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、openGL相关库

1、openGL核心库,gl

2、openGL实用程序库, glu

3、openGL编程辅助库,aux

4、openGL实用程序工具包  , glut

5、Windows专用库,wgl

其函数命名规则为 <库前缀><根命令><可选参数个数><可选参数类型>

二、绘制一个矩形

1、未使用裁剪

#include <gl/glut.h>
#include <Windows.h>

void Initial(void)
{
    glClearColor(0.75f,0.75f,0.75f,0.5f);
    glMatrixMode(GL_PROJECTION);
   
}
void Display()
{
    glClear(GL_COLOR_BUFFER_BIT    );
    glColor3f(0.0f,1.0f,0.0f);
    glRectf(0.0f,0.0f,1.0f,1.0f);   //参数分别为左下角坐标 和 右上角坐标 坐标系为opengl坐标系
    glFlush();    
}
int main(int argc,char* argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

    glutInitWindowPosition(300,100);
    glutInitWindowSize(500,400);

    glutCreateWindow("Rect");  //必须先设置好窗口位置大小才能创建窗口
    glutDisplayFunc(Display);
    Initial();
    glutMainLoop();
    
    return 0;
}

在未使用二维裁剪函数时,用 glRectf绘制的矩形是在openGL坐标系中实现的,其原点是窗口中心,向上为y轴正向,向右是x轴正向,其取值范围都是[-1,1],代码中绘制了一个以(0,0)为左下角,(1,1)为右上角的矩形,颜色为绿色。

2、使用裁剪

void Initial(void)
{
	glClearColor(0.75f,0.75f,0.75f,0.5f);
	glMatrixMode(GL_PROJECTION);
	//调用该函数后,绘制矩形的坐标系原点位于左下角,显示区域为200*150
	gluOrtho2D(0.0,200.0,0.0,150.0);   //参数 左下角x 右上角x 左下角y 右上角y

}
void Display()
{
	glClear(GL_COLOR_BUFFER_BIT	);
	glColor3f(0.0f,1.0f,0.0f);
	glRectf(0.0f,50.0f,100.0f,150.0f);
    
    glColor3f(1.0f,0.0f,0.0f);
	glRectf(100.0f,50.0f,200.0f,150.0f);
	glFlush();	
}

gluOrtho2D(LeftBottomx,RightTopx,LeftBottomy,RightTopy)四个参数分别为左下角x 右上角x 左下角y 右上角y,gluOrtho2D定义剪裁面,通过正交投影,把景物(模型)按照1:1的比例绘制到一个剪裁面上,相当于对世界坐标窗口的一个截取。在使用裁剪后,用glRectf绘制矩形时,其坐标系是以窗口左下角为原点,向上为y正向,向右为x正向,x、y的取值范围为gluOrtho2D形成的矩形区域的长宽。我绘制两个不同颜色的矩形,此时形成的矩形为

3、设置视口大小产生的影响

函数 glViewport()定义视口,是从世界坐标系窗口到屏幕坐标系窗口的映射,决定了gluOrtho2D定义的剪裁图形如何映射到屏幕上,通过调节glViewport的参数, 可以调节模型在屏幕窗口上的缩放和显示位置。glViewport在默认情况下,视口被设置为占据打开窗口的整个像素矩形,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。glViewport(GLint x,GLint y,GLsizei width,GLsizei height)参数分别为:原点和宽高。 其原点位置也在左下角

void Display()
{
	glClear(GL_COLOR_BUFFER_BIT	);
	        
	glColor3f(0.0f,1.0f,0.0f);
	glViewport(0,0,50,50);   
	glRectf(0.0f,50.0f,100.0f,150.0f);
	glColor3f(1.0f,0.0f,0.0f);
	glRectf(100.0f,50.0f,200.0f,150.0f);
	glFlush();	
}

当我设置一个50*50的视口时,就会出现这样的结果:

此时显示区域只有50*50的区域,因此矩形也被缩小了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值