我知道已经有a question这个,但它没有提供代码解决方案。
我正在尝试使用此函数将位图图像加载到GL应用程序中:
void glBitmap(GLsizei width,
GLsizei height,
GLfloat xorig,
GLfloat yorig,
GLfloat xmove,
GLfloat ymove,
const GLubyte * bitmap);
有人可以给我一个返回GLubyte*
给定文件名的函数吗?我一直在网上寻找一个可行的算法,但似乎无法工作。
答案 0 :(得分:1)
使用glBitmap显示图像的问题是您需要从文件加载图像,然后将数据解释为颜色索引数组。由于每个可能的库和示例都将图像数据解释为RGB(或RGBA),并且由于需要使用glColorTable设置颜色表,因此没有人使用glBitmap来加载图像,因此没有关于如何将glBitmap与数据一起使用的实际示例从文件中加载。
顺便说一句,这是来自glBitmap reference page:
位图图像被解释为glDrawPixels的图像数据 命令,宽度和高度对应于宽度和高度 该命令的参数,类型设置为GL_BITMAP和格式 设置为GL_COLOR_INDEX。
省去麻烦,并使用glDrawPixels或纹理显示文件中的图像。
This page包含如何使用glBitmap显示图像但不包含文件的示例。
答案 1 :(得分:0)
首先,您需要了解glBitmap
的作用:glBitmap
是绘图函数。它查看给定数据的每个位(因此位映射),解释为2维数组并相对于当前栅格位置(使用glRasterPos
设置)将这些像素设置为当前设置位图中相应位的栅格颜色(glRasterColor
)。每个GLubyte包含8位,因此每个字节覆盖8个像素宽度(使用glPixelStore
设置endianess)。
用于从文件中读取位图。 AFAIK只有一种广泛的位图格式(与具有通道的像素图形成对比,其中每个像素的通道可以采用一系列值)。该格式为PBM:http://en.wikipedia.org/wiki/Netpbm_format
根据维基百科页面提供的信息,可以直接编写一个函数,打开并读取PBM文件(所需函数为fopen
,fread
和fclose
)到结构中数据。然后,可以使用该结构将数据提供给glBitmap
。
但请记住,位图只是二值图像,即黑白,没有灰色,更不用说颜色了。
现在你的想法是“加载位图”。我已经告诉过,glBitmap
会立即绘制您提供的数据。所以我认为你真正想要的是 textures 和一个纹理加载器的图像文件。