编写位图数据以在opengl中创建字体

时间:2014-06-17 02:25:48

标签: opengl bitmapdata

我知道十六进制数字,但我似乎无法了解如何使用它来创建位图图像或字体。我从链接 http://www.glprogramming.com/red/chapter08.html 进行了研究,该链接显示了如何创建F.十六进制数字对应的是什么?例如,位图图像的哪一部分做0xff,0xc0覆盖?我以为他们提供了有关像素颜色的信息。

2 个答案:

答案 0 :(得分:1)

十六进制数字有点误导,因为位图是......好吧......

0xff 1111 1111 0xc0 1100 0000

将它们放在一起并且您有 1111 1111 1100 0000 ,如果您对位图中的每一行重复此过程,则会得到以下内容:

GLubyte rasters[24] = {
 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
 0xff, 0xc0, 0xff, 0xc0
};

  // Keep in mind, the origin of your image is the **bottom-left**

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0xff,0xc0   1111111111000000     1111111111
0xff,0xc0   1111111111000000     1111111111
0xc0,0x00   1100000000000000     11
0xc0,0x00   1100000000000000     11
0xc0,0x00   1100000000000000     11
0xff,0x00   1111111100000000     11111111   // The 0s make it hard to read, so I ...
0xff,0x00   1111111100000000     11111111   //   removed them on the right-hand side.
0xc0,0x00   1100000000000000     11
0xc0,0x00   1100000000000000     11
0xc0,0x00   1100000000000000     11
0xc0,0x00   1100000000000000     11
0xc0,0x00   1100000000000000     11

这应该看起来很熟悉;)


关于这一切如何转化为实际颜色。 OpenGL将使用 当前 栅格颜色替换位图中 1 的任何部分(例如glColor3f (0.0f, 1.0f, 0.0f)将生成绿色 F )。当您致电glBitmap (...)时, 0 位将被丢弃。

答案 1 :(得分:1)

一个十六进制数字表示四位信息:它可以具有从零(二进制0000)到十五(二进制1111)的值。因此,四个十六进制数字代表16位信息。

字母的每一行" F"该页面上的位图宽度为16个像素,因此它可以用16位数字表示,其位数表示相应的像素应该是黑色还是白色。十六进制数字只是一种编写其位定义图像的数字的方法。

请注意,这是一个黑白位图:每个像素仅由一个位描述,因此它只能是黑色或白色。如果你想要灰度(例如用于抗锯齿),你需要为每个像素提供多位信息;通常为每像素8位(一个字节),256种可能的阴影。

灰度和彩色图像更容易思考,因为每个像素由一个或多个整个字节表示,因此给定字节中的所有位对应于相同的像素,并且您不需要考虑个别比特。但在黑白图像中,单个字节可以描述多个像素,因此您必须考虑字节中的各个位。