位图与像素图
我们可以在指定地点生成位图、或者是像素图
当然这里给出的只是基础操作。位图像素图还有一些其它功能。
比如像素图的复制(glReadPixels)、粘贴(glCopyPixels)。
还有位逻辑操作
#include<Windows.h>
#include<GL/glut.h>
//位图矩阵从矩形网络的底部开始逐行指定,每个数代表8个二进制位的0或1
GLubyte bitShape[20] =
{
0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00,
0xff, 0x80, 0x7f, 0x00, 0x3e, 0x00, 0x1c, 0x00, 0x08, 0x00
};
void bitmap()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1.0, 0.0, 0.0);
//设定位图的存储模式,1代表用字节边界对齐
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
//设定当前光栅位置
glRasterPos2i(400, 300);
/*
*在指定地点画一个位图,颜色之前给定
*@param width 阵列的列数
*@param height 阵列的行数
*@param xorig 原点横坐标
*@param yorig 原点纵坐标(当光栅到这个“原点”时,开始画图)
*@param xmove
*@param ymove 位图显示后,光栅坐标的位移
*@param bitmap 矩阵阵列
*/
glBitmap(9, 10, 0.0, 0.0, 20.0, 15.0, bitShape);
glFlush();
}
void pixelmap()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1.0, 0.0, 0.0);
//emmm,并没有给出这个数组。。
glDrawPixels(128, 128, GL_RGB, GL_UNSIGNED_BYTE, colorShape);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Bitmap and Pixelmap");
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 800.0, 0.0, 600.0);
glutDisplayFunc(bitmap);
glutMainLoop();
}