OpenGL贴图问题,怎么都贴不上

yujiangpeng 2009-10-24 07:35:07
不知道为什么怎么也贴不上图去,下面是我的设置和代码

unsigned int ID; /**< 生成纹理的ID号 */
int imageWidth; /**< 图像宽度 */
int imageHeight; /**< 图像高度 */
unsigned char *image; /**< 指向图像数据的指针 */
FILE *pFile = 0;


BITMAPINFOHEADER bitmapInfoHeader;
BITMAPFILEHEADER header;

unsigned char textureColors = 0;

pFile = fopen("桌面.bmp", "rb");
if(pFile == 0) return false;

fread(&header, sizeof(BITMAPFILEHEADER), 1, pFile);

if(header.bfType != BITMAP_ID)
{
fclose(pFile);
return false;
}

fread(&bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, pFile);

imageWidth = bitmapInfoHeader.biWidth;
imageHeight = bitmapInfoHeader.biHeight;


if(bitmapInfoHeader.biSizeImage == 0)
bitmapInfoHeader.biSizeImage = bitmapInfoHeader.biWidth *
bitmapInfoHeader.biHeight * 3;


fseek(pFile, header.bfOffBits, SEEK_SET);


image = new unsigned char[bitmapInfoHeader.biSizeImage];


fread(image, 1, bitmapInfoHeader.biSizeImage, pFile);


for(int index = 0; index < (int)bitmapInfoHeader.biSizeImage; index+=3)
{
textureColors = image[index];
image[index] = image[index + 2];
image[index + 2] = textureColors;
}

fclose(pFile);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);

glGenTextures(1, &ID);

glBindTexture(GL_TEXTURE_2D, ID);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

gluBuild2DMipmaps(GL_TEXTURE_2D, 3, imageWidth,
imageHeight, GL_RGB, GL_UNSIGNED_BYTE,
image);

glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);

glPushMatrix();
glScaled(45.0,30.0,0);
glBindTexture(GL_TEXTURE_2D, ID);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-2.0f, 1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, -1.0f, 0.0f);

glEnd();
glPopMatrix();


GLvoid ReShapeGLScene( GLsizei width,GLsizei height )
{
glViewport(0,0,(GLsizei)width,(GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho((GLdouble)-450.0,(GLdouble)450.0,(GLdouble)-300.0,(GLdouble)300.0,50.0,-10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}



static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};


不知道是哪的原因,还望指教

...全文
1036 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yujiangpeng 2009-10-25
  • 打赏
  • 举报
回复
是我电脑的原因。还请帮忙讲清楚
problc 2009-10-25
  • 打赏
  • 举报
回复
mark
yujiangpeng 2009-10-25
  • 打赏
  • 举报
回复
怎么修改??
Julykey 2009-10-25
  • 打赏
  • 举报
回复
我以前也遇到过,可能是位图的原因。当时就把普通的jpg格式转换为bmp格式,贴上去的效果惨不忍睹。修改图片的位深和分辨率可能会解决。
liyongping5387 2009-10-24
  • 打赏
  • 举报
回复
这个是位图的格式原因,当是24位位图时,你必须保证图像宽度是4的倍数才不会出问题。你的位图是24位的,你调整图像的宽度就可以了。
liyongping5387 2009-10-24
  • 打赏
  • 举报
回复
我试过了,可以正常运行。不知道你是什么问题,把你的调试结果发出来
wanghao111 2009-10-24
  • 打赏
  • 举报
回复
#define SEEK_SET 0

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧