位图与像素图

我们可以在指定地点生成位图、或者是像素图

当然这里给出的只是基础操作。位图像素图还有一些其它功能。
比如像素图的复制(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();
}