Computer Graphics小记(二):输出图元(下)

Pixel-Array、Character、Display Lists、Display-Window Reshape

Pixel-Array

Bitmap

位图函数:

1
glBitmap(width, height, x0, y0, xOffset, yOffset, bitShape);

(x0, y0)是当前栅格位置的原点,(xOffset, yOffset)为栅格位置的偏移量。

在帧缓存地址中加载一个比特图案:

1
2
3
4
GLubyte bitShape[20] = {0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0xff, 0x80, 0x7f, 0x00, 0x3e, 0x00, 0x1c, 0x00, 0x08, 0x00};
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glRasterPos2i(30, 40);
glBitmap(9, 10, 0.0, 0.0, 20.0, 15.0, bitShape);

Pixmap

像素图函数:

1
glDrawPixels(width, height, dataFormat, dataType, pixMap);

dataFormat为数字中每个像素的格式常量,比如设定基本的颜色的GL_BLUE或者GL_BGR等。

dataType为OpenGL中的数据类型,比如GL_BYTE,GL_INT,GL_FLOAT等。

指定要写入的颜色或辅助缓存:

1
glDrawBuffer(buffer);

Raster Operation

选择一块矩形区域加载设定好的缓冲区中的像素值:

1
glReadPixels(xmin, ymin, width, height, dataFormat, dataType, array);

加载包含融合的色彩或者辅助数据的缓存:

1
glReadBuffer(buffer);

复制一块区域的像素数据保存到缓冲区中:

1
glCopyPixels(xmin, ymin, width, height, pixelValues);

融合输入与输出的像素颜色值:

1
2
3
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(logicOp);

Character

显示GLUT位图字符:

1
glutBitmapCharacter(font, character);

设置栅格位置,显示一个包含36个位图字符的文本:

1
2
3
glRasterPosition2i(x, y);
for (k = 0; k < 36; k++)
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, text[k]);

显示笔划字符:

1
glutStrokeCharacter(font, character);

Display Lists

创建与命名:

1
2
3
4
5
glNewList(listID, listMode);
·
·
·
glEndList();

listMode为OpenGL符号常量,可以是GL_COMPILE或GL_COMPILE_AND_EXECUTE。

判断listID是否已经被使用:

1
glIsList(listID);

执行(1):

1
glCallList(listID);

执行(2):

1
2
glListBase(offsetValue);
glCallLists(nLists, arrayDataType, listIDArray);

删除:

1
glDeleteLists(startID, nLists);

Display-Window Reshape

glut提供的显示窗口重绘函数:

1
glutReshapeFunc(winReshapeFcn);

文章目录
  1. 1. Pixel-Array
    1. 1.1. Bitmap
    2. 1.2. Pixmap
    3. 1.3. Raster Operation
  2. 2. Character
  3. 3. Display Lists
  4. 4. Display-Window Reshape
|