【问题标题】:glBitmap: bitmap size issueglBitmap:位图大小问题
【发布时间】:2021-08-27 04:59:54
【问题描述】:

我对理解和使用 glBitmap 函数有疑问。 我从this example 开始并尝试绘制一个 40x40 的“位图”并避免使用situation like this 我试过这个:

40 x 40 是 1600 位 -> 所以我需要 200 字节的信息 (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 像素的全绿色正方形。原来我遇到了unwanted situation,而不是广场的肮脏上部。似乎raster[200] 仅足以绘制 32 x 32 位图。所以我想问的是:

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

【问题讨论】:

  • 对不起,我没有回答你的问题,但我建议你不要尝试理解这个 API,因为它在很多年前就被弃用了。尝试使用现代 OpenGL。
  • @MichaelIV 你能指出正确的方向告诉我一个等效的“现代”OpenGL 函数吗?
  • 现代 API 中没有这样的功能,因为它在即时模式下不起作用。您必须创建纹理、着色器程序、一些几何体(在您的情况下为四边形)和渲染。是的,它比旧的具有更多的手动设置,但它也为您提供了更多的功能和灵活性来渲染东西。你可以从这里开始opengl-tutorial.org/beginners-tutorials/…

标签: opengl bitmap byte raster opengl-compat


【解决方案1】:

您错过了设置对齐方式。默认情况下,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);

【讨论】:

  • 非常明确的答案,现在我明白了。谢谢@Rabbid76。
猜你喜欢
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多