在OpenGL中使用auxDIBImageLoad将bmp文件加载为纹理
我正在学习OpenGL NeHe制作。当我读第22课凹凸贴图、多重纹理时,我遇到了一个问题 加载徽标bmp文件时,需要加载两个bmp文件:一个存储颜色信息,另一个存储alpha信息。 以下是两个bmp文件: OpenGL_Alpha.bmp: 和OpenGL.bmp: 代码如下:在OpenGL中使用auxDIBImageLoad将bmp文件加载为纹理,opengl,graphics,3d,Opengl,Graphics,3d,我正在学习OpenGL NeHe制作。当我读第22课凹凸贴图、多重纹理时,我遇到了一个问题 加载徽标bmp文件时,需要加载两个bmp文件:一个存储颜色信息,另一个存储alpha信息。 以下是两个bmp文件: OpenGL_Alpha.bmp: 和OpenGL.bmp: 代码如下: if (Image=auxDIBImageLoad("Data/OpenGL_ALPHA.bmp")) { alpha=new char[4*Image->sizeX*Image-&g
if (Image=auxDIBImageLoad("Data/OpenGL_ALPHA.bmp")) {
alpha=new char[4*Image->sizeX*Image->sizeY];
for (int a=0; a<Image->sizeX*Image->sizeY; a++)
alpha[4*a+3]=Image->data[a*3]; //???????
if (!(Image=auxDIBImageLoad("Data/OpenGL.bmp"))) status=false;
for (a=0; a<Image->sizeX*Image->sizeY; a++) {
alpha[4*a]=Image->data[a*3];//??????????
alpha[4*a+1]=Image->data[a*3+1];
alpha[4*a+2]=Image->data[a*3+2];
}
glGenTextures(1, &glLogo);
glBindTexture(GL_TEXTURE_2D, glLogo);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Image->sizeX, Image->sizeY, 0, GL_RGBA, GL_UNSIGNED_BYTE, alpha);
delete alpha;
if(Image=auxDIBImageLoad(“Data/OpenGL_ALPHA.bmp”)){
alpha=新字符[4*图像->sizeX*图像->sizeY];
对于(int a=0;asizeX*Image->sizeY;a++)
alpha[4*a+3]=图像->数据[a*3];/???????
如果(!(Image=auxDIBImageLoad(“Data/OpenGL.bmp”))状态=false;
对于(a=0;asizeX*Image->sizeY;a++){
alpha[4*a]=图像->数据[a*3];/??????????
alpha[4*a+1]=图像->数据[a*3+1];
alpha[4*a+2]=图像->数据[a*3+2];
}
glGenTextures(1和glLogo);
glBindTexture(GL_TEXTURE_2D,glLogo);
glTexParameteri(GL_纹理2D、GL_纹理MAG_过滤器、GL_线性);
glTexParameteri(GL_纹理2D、GL_纹理最小过滤器、GL_线性);
GLTEXAGE2D(GL_纹理_2D,0,GL_RGBA8,图像->尺寸,图像->尺寸,0,GL_RGBA,GL_无符号字节,alpha);
删除alpha;
}
我的问题是:为什么图像->数据的索引是*3
有人能帮我翻译吗
我正在学习OpenGL NeHe制作。当我读第22课凹凸贴图时
为什么??NeHe教程非常过时,其中概述的凹凸贴图技术也完全过时。13年来,它一直被基于着色器的法线贴图所取代(直到2003年纹理组合器才取代着色器)
此外,您应该使用更适合纹理的图像文件格式(使用alpha通道),而不是BMP。比如:
- 热重分析
- 巴布亚新几内亚
- OpenEXR
- 热重分析
- 巴布亚新几内亚
- OpenEXR
提取RGB DIB的红色通道。这是通道偏移量。RGB数据存储为三个连续字节。这里“a”表示哪个像素(一组3个字节,一个表示R,一个表示G,一个表示B) 将*3视为指向3字节数组的指针:
char* myPixel = Image->data + (a*3);
char red = myPixel[0];
char green = myPixel[1];
char blue = myPixel[2];
这是通道偏移量。RGB数据存储为三个连续字节。这里“a”表示哪个像素(一组3个字节,一个表示R,一个表示G,一个表示B) 将*3视为指向3字节数组的指针:
char* myPixel = Image->data + (a*3);
char red = myPixel[0];
char green = myPixel[1];
char blue = myPixel[2];
:你能推荐一些学习OpenGL的好书或材料吗?非常感谢。我可以推荐以下内容:。我永远也搞不清楚它是不是由尼科尔·博拉斯制作的!是一个优秀的教程,但仍在进行中。有非常好的着色器教程材质。当然:你能推荐一些学习OpenGL的好书或材料吗?非常感谢。我可以推荐以下内容:。我永远也搞不清楚它是不是由尼科尔·博拉斯制作的!是一个优秀的教程,但仍在进行中。有非常好的着色器教程材质。当然,我从灰色的bmp中得到了alpha值:它的R、G、B值是相等的,对吗?灰度bmp中每像素3个字节都是相同的,但我不能在没有看到数据本身的情况下确定。我从灰色bmp中得到alpha值:它的R、G、B值是相等的,对吗?灰度bmp中每像素3个字节都是相同的,这是有道理的,但是如果不看到数据本身,我不能肯定。