为什么我的win32+opengl纹理贴图是图形是空白的

#include"utils.h"
unsigned char * DecodeBMP(unsigned char bmpFileData,int&width,int&height)
{
if(0x4D42==
(unsigned short*)bmpFileData)
{
int pixeiDataOffset=*((int*)(bmpFileData+10));
width=*((int*)(bmpFileData+18));
height=*((int*)(bmpFileData+22));
unsigned char*pixelData=bmpFileData+pixeiDataOffset;//像素块的起始位置
for(int i=0;i<width*height*3;i+=3)
{
unsigned char temp=pixelData[i];
pixelData[i]=pixelData[i+2];
pixelData[i+2]=temp;
}
return pixelData;
}
return nullptr;
}
GLuint CreateTexture2D(unsigned char *pixelData,int width,int height,GLenum type)
{
GLuint texture;
glGenTextures(1,&texture);//第一个表示申请一个纹理对象
glBindTexture(GL_TEXTURE_2D,texture);//对当前纹理对象进行指定
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexImage2D(GL_TEXTURE_2D, 0, type, width, height, 0, 
    type, GL_UNSIGNED_BYTE, pixelData); //最后一个参数是 你的纹理在哪 此时纹理对象就已经生成了
glBindTexture(GL_TEXTURE_2D,0);//最后将当前纹理设置成为0号纹理以免后面的操作对texture纹理造成影响 不想再被修改
return texture;

}
GLuint CreateTexture2DFromBMP(const char *bmpPath)
{
int nFileSize=0;
unsigned char *bmpFileContent=LoadFileContent(bmpPath,nFileSize);
if(bmpFileContent==nullptr)
{
return 0;
}
int bmpWidth=0,bmpHeight=0;
unsigned char *pixelData=DecodeBMP(bmpFileContent,bmpWidth,bmpHeight);
if(bmpWidth==0)
{
delete bmpFileContent;
return 0;
}
GLuint texture=CreateTexture2D(pixelData,bmpWidth,bmpHeight,GL_RGB);
delete bmpFileContent;
return texture;
}



#include"scene.h"
#include"utils.h"
GLuint texture;
void Init()
{
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    int nFileSize =0;
    unsigned char *bmpFileContent=LoadFileContent("Res/test.bmp",nFileSize);
    int bmpWidth=0,bmpHeight=0;
    unsigned char *pixelData=DecodeBMP(bmpFileContent,bmpWidth,bmpHeight);
    texture=CreateTexture2D(pixelData,bmpWidth,bmpHeight,GL_RGB);
}
void Draw()
{
    glClearColor(1.0f,0.0f,0.0f,1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texture);
    glBegin(GL_QUADS);
    glColor3f(1.0,1.0,1.0);
    glTexCoord2f(0.0f,0.0f);
    glVertex3f(-0.1f,-0.1f,-0.4f);
    glTexCoord2f(1.0f,0.0f);
    glVertex3f(0.1f,-0.1f,-0.4f);
    glTexCoord2f(1.0f,1.0f);
    glVertex3f(0.1f,0.1f,-0.4f);
    glTexCoord2f(0.0f,1.0f);
    glVertex3f(-0.1f,0.1f,-0.4f);
    glEnd();
}

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

0
为什么我的win32+opengl纹理贴图是图形是空白的
1
我想用 goto码来实现这个递归 来个大佬给给思路 (还要用到进栈和出栈)
2
为什么visual studio不能识别.h的文件呢
3
为什么返回不出结果?
1
链表操作中即使函数传入的是链表指针,若根节点没有改变,链表也会改变?
2
c++用new申请的数组在进行A[k++]操作时为什么会出错?
1
双向链表,尾部插入显示错误,为什么?
1
服务端 用WSASEND发送数据 客户端RECV成功了 为什么服务端还没有收到IOCP完成通知
2
C++重置了运算符=和+,但在运算C=A+B时为什么报错?
2
以下顺推功能程序中&a[ ]中数值填0~10哪一个输出结果都一样,为什么?
4
.net framework安装不了,为什么?求救
1
为什么initstack里设置了s-》top=-1,但是在主函数里s-》top却是0,求解
3
为什么c++类的成员函数getxxx获得的数不能用操作符进行运算
0
这是写的关于一元二次方程根求解的代码,不知道为什么在Openjudge上总显示错
0
01背包 谁能帮我我看看哪错了呀-。-
2
MFC中view和Doc类关系中,在view里成功获取文档类指针,但是指针下的所有自设成员变量值为什么为空?
1
这个程序为什么运行不了?
1
在WinCE下用BitBlt()贴图,为什么每贴一次内存都涨一次,我明明都释放了
1
求一元二次方程的根(改了一晚上,还是不正确,这是我第一次的程序)(希望大佬们指点一二,感谢感谢)
2
用VS2015做一个USBCAN的上位机软件,周立功提供的动态链接库有X64和X86的,那么我怎么知道该调用哪个?