计算机图形学OPENGL

2022年9月19日 下午8:32 上课内容

函数

gluOrtho2D函数

参数有四个,gluOrtho2D(0.0, width, 0.0, height);

gluOrtho2D是用来指定屏幕区域对应的模型坐标范围,我们自己所绘制的图形的坐标必须在这个范围内,不然看不到自己绘制的图形

没调用 gluOthor2d函数之前,窗口的中心坐标为(0,0);调用了这个函数之后窗口的中心坐标不再是(0,0)了,窗口的左下角才是(0,0)。

没调用 gluOthor2d函数之前,坐标范围是 X:-1~1, Y:-1~1;调用了这个函数之后坐标范围是 X:0~widthY:0~height

glColor3f函数

在OpenGl中设置颜色,一般可以使用glColor3f()。从函数名字就可以看出,它的参数应该有三个,类型是float型的。另外一点是它的参数值的范围是[0.0,1.0]一般的,可以将这三个参数值视为颜色的成分。

三个变量glColor3f(r, g, b)中参数r,g,b都是float型,并且范围都在[0.0,1.0],分别代表RGB里面的红,绿,蓝色,数值0表示不使用该颜色,数值1表示这个颜色取到最大值。例如

glColor3f(1.0, 0, 0); //表示红色,R
glColor3f(0, 1.0, 0); //表示绿色,G
glColor3f(0, 0, 1.0); //表示蓝色,B

可以放在很多地方,比如在主函数glutDisplayFun(),也可以放在绘画的时候,实际上多次调用这个函数,只默认最后一次,例如:

glBegin(GL_POINTS)
    glColor3f(0.0, 1.0,  0.0);  //绿色
    glColor3f(1.0, 1.0,  0.0);  //黄色
    glVertex(0.25, 0.75, 0.0);
glEnd();

glColor3ub函数

glColor函数有很多,例如上面的glColor3f表示这个画图里面有三个参数,并且参数类型是float,这里的ub表示的是GLubyte无符号单字节整型,范围是0-255,那么用的时候可以这么用:

glColor3ub(0xe1, 0xe4, 0x39);
glColor3ub(225, 228, 57);//0xe1 = 255, 0xe4 = 228, 0x39 = 57

总结一下,glColor主要是映射,例如glColor3i这个i表示的是GLint,那么int的最大是2,147,483,647,如果你还是认为最大是255的话,那么如果你是glColor3i(255,0,0)不是红色了,其实你传入的是255/2,147,483,647,接近于零,所以还是黑色

那么可以用

#include "limits.h"

然后使用INT_MAX,用:

glColor3i(INT_MAX,0,0)

这样才是红色

glViewport函数

glViewport(GLint x,GLint y,GLsizei width,GLsizei height)

默认情况下,视口被设置为占据打开窗口的整个像素矩形,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。

  • x
    视区矩形的左下角,以像素为单位。 默认值为 (0,0)。

  • y
    视区矩形的左下角,以像素为单位。 默认值为 (0,0)。

  • width
    视区宽度。 首次附加到窗口的 OpenGL 上下文时, 宽度 和 高度 将设置为该窗口的尺寸。

  • height
    视区的高度。 首次附加到窗口的 OpenGL 上下文时, 宽度 和 高度 将设置为该窗口的尺寸。

参考 - OpenGL之glViewPort函数的用法

glBegin() & glEnd()函数

opengl的一些基本函数

数据类型

GLboolean: 用于单布尔值。有自己的GL_TRUEGL_FALSE
GLint:有符号四字节整型。包含数值从−2,147,483,6482,147,483,647
GLuint: 无符号四字节整型,包含数值从04,294,967,295
GLfloat:四字节精度IEEE 754-1985 浮点数。
GLvoid: void值用于指示一个函数没有返回值,或没有参数。
GLubyte: 无符号单字节整型,包含数值从0255

我认为常用得就是以上的内容,其他请见OpenGL 数据类型 - CSDN

Comment

  1. Victor说道:

    催更~~

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注