glBitmap:位图大小问题

glBitmap: bitmap size issue

我对理解和使用 glBitmap 函数有疑问。 我从 this example and trying to draw a 40x40 "bitmap" and avoiding a 开始 我试过这个:

40 x 40 is 1600 bits -> so I need 200 bytes of info (1600/8)

GLubyte rasters[ 200 ] =
{
    0xff, 0xff, //.. and so on 200 times
};


 // main code calling the function below

void display(x, y)
{
    float size = 40.0;
    glColor3f( 0.0, 1.0, 0.0 );
    glRasterPos2i(x, y );
    glBitmap(size, size, 0.0, 0.0, 0.0, 0.0, rasters );
}  

我应该画一个 40 x 40 像素的全绿色正方形。结果我遇到了 而不是正方形的脏上部。似乎 raster[200] 足以绘制 32 x 32 位图。那么我想问一下:

  1. 我的数学(或理解示例)有什么问题?
  2. 我需要在我的光栅中绘制一个 40x40(以及为什么,下一步我需要绘制一些与这些位一起玩的东西,那么现在如何定位像素(x,y))
  3. 最终目标是从 GLubyte 数组开始绘制一些东西,有没有办法用 glTexImage2D 做同样的事情? (我尝试关注 this suggestion 但我失败了)

您没有设置对齐方式。默认情况下,OpenGL 假定光栅的每一行的开始对齐到 4 个字节。这是因为 GL_UNPACK_ALIGNMENT 参数默认为 4。栅格中的每一行都有 5 个字节 (40 / 8 = 5)。因此,您需要将对齐方式更改为 1:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBitmap(size, size, 0.0, 0.0, 0.0, 0.0, rasters);