OpenGL从1.0开始-图元输出(下)

这个世界远远不是用简单几何图形就能表达的,OpenGL的像素阵列函数和字符函数让我们能做到的更多。
让我们直接来看一段示例代码,大家只需要关注加注释部分。

#include <Gl/glut.h>
void init()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0, 200.0, 0.0, 100.0);
}
void BmpSegment()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 0.0, 0.0);
    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);//将位图应用到帧缓存中

    glFlush();
}
void main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(200, 100);
    glutCreateWindow("An Example OpenGL Program");
    init();
    glutDisplayFunc(BmpSegment);
    glutMainLoop();
}

位图
在这里大家看到的是一个实际大小为10*8像素大小的呈箭头形状的位图。位图图像(bitmap), 亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的,这些点可以进行不同的排列和染色以构成图样。OpenGL函数为glBitmap(9, 10, 0.0, 0.0,20.0, 15.0, bitShape),其中9表示列数,10表示行数。bitShape表示像素阵列,每一元素赋值为0或1。0.0和 0.0表示矩阵阵列”原点”的位置,即bitShape左下角在应用图案原点中的位置,可正可负。20.0和15.0表示位图显示后更新帧缓存当前光栅位置的坐标位移(用于下一个位图的帧缓存)。而当前光栅位置的值用glRasterPos2i(30, 40)指定。像素存储模式用glPixelStorei(GL_UNPACK_ALIGNMENT, 1)指定,其中GL_UNPACK_ALIGNMENT表示当前是非压缩模式,并以1字节为单位对齐。
像素阵列bitShape是一个GLubyte类型的数组,存储了一系列八进制数,每一个八进制数相当于位于同一行连续的八个像素。我们看看下面这张位图就一目了然了。对于位图每一行的九个像素,我们用两个八进制数来表示。需要注意的是,bitShape的阵列值是从矩形网格的底部开始逐行指定的。
这里写图片描述
如果要显示字符串呢?那也很简单,加上下面一段代码即可:

glutBitmapCharacter(GLUT_BITMAP_9_BY_15, 'a');//第一个参数为特定字形集,,第二个为要显示的字符

这里写图片描述
大家可以猜猜这段代码加在哪个位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值