一、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的区域,因此矩形也被缩小了。