📜  opengl 绘制一个像素 (1)

📅  最后修改于: 2023-12-03 15:18:07.654000             🧑  作者: Mango

OpenGL 绘制一个像素

要绘制一个像素,我们需要使用 OpenGL 基础库中的 gluPixelTransfer 和 glRasterPos 函数。gluPixelTransfer 函数负责将像素从 CPU 带到 GPU,而 glRasterPos 函数则负责指定像素需要绘制的位置。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width, 0, height);
glMatrixMode(GL_MODELVIEW);
glViewport(0, 0, width, height);
glGetIntegerv(GL_VIEWPORT, viewport);

gluPixelTransferf(GL_RED_SCALE,   255.0f / 65535.0f);
gluPixelTransferf(GL_GREEN_SCALE, 255.0f / 65535.0f);
gluPixelTransferf(GL_BLUE_SCALE,  255.0f / 65535.0f);

glRasterPos2f(x_pixel, y_pixel);

glDrawPixels(1, 1, GL_RGB, GL_UNSIGNED_SHORT, color);

这段代码用于在指定位置 (x_pixel, y_pixel) 处绘制一个像素,颜色为 color。颜色采用 RGB 模型表示,color 可以是一个数组,包含空间长度为 3 的 unsigned short 类型元素,分别代表 R、G、B 三个颜色通道。

glMatrixMode 函数用于选择矩阵模式,在绘制 2D 图像时,我们需要使用 GL_PROJECTION 矩阵模式,并将其初始化为单位矩阵。接下来,使用 gluOrtho2D 函数设置投影矩阵,告诉 OpenGL 原始坐标系的范围。gluOrtho2D 的函数原型为:

gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);

其中,left 和 right 表示 X 轴坐标的范围,bottom 和 top 表示 Y 轴坐标的范围。

glViewport 函数和 glGetIntegerv 函数用于设置和获取视口大小。视口是 OpenGL 绘制的区域,OpenGL 在视口内绘制图像。glViewport 函数接受四个参数,分别表示视口的左上角位置和宽度和高度。

gluPixelTransferf 函数用于设置像素转移参数。在这里,我们使用 GL_RED_SCALE、GL_GREEN_SCALE 和 GL_BLUE_SCALE 参数,将颜色值转换为 0-255 的范围。

最后,使用 glRasterPos2f 函数指定绘制像素的位置。glDrawPixels 函数用于在指定位置绘制像素。它的函数原型为:

void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);

其中,width 和 height 用于指定绘制的图像的宽度和高度,format 表示像素颜色的格式,type 表示像素颜色的数据类型,pixels 是绘制像素的数据指针。

以上就是绘制一个像素的 OpenGL 代码。