我想在mfc单文档中绘制一个带有纹理的地球,并想让能够旋转
参看了一些文章,要加纹理,可是没能实现,那位高手可指点?
部分代码如下:
void COrbitView::DrawScene()
{

glClearColor(0.1f, 0.5f,0.6f, 0.0f);
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GLUquadricObj*q=gluNewQuadric();
gluQuadricDrawStyle(q,GLU_FILL);
gluQuadricNormals(q,GLU_SMOOTH);
gluQuadricTexture(q,GL_TRUE);
gluSphere(q,0.3,50,50);

//定义纹理
makeTexture();
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
gluBuild2DMipmaps(GL_TEXTURE_2D,4,checkImageWidth, 
checkImageHeight,GL_RGBA,GL_UNSIGNED_BYTE,checkImage);
glTexImage2D(GL_TEXTURE_2D,0,4,checkImageWidth,
checkImageHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,
&checkImage[0][0][0]);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D,1); glColor3f(0.8,0.0,0.8);
glTexCoord2f(0.0,0.0);
glVertex3f(-2.0,-2.0,0.0);
glTexCoord2f(0.0,1.0);
glVertex3f(-2.0,2.0,0.0);
glTexCoord2f(1.0,1.0);
glVertex3f(2.0,2.0,0.0);
glTexCoord2f(1.0,0.0);
glVertex3f(2.0,-2.0,0.0);
glEnable(GL_TEXTURE_2D);
UpdateData(true); glFinish();
}
void COrbitView::makeTexture()
{
  int i, j;
  FILE *fp;
  unsigned char *image;
  int rc;  fp = fopen("globe.bmp","rb");
  if(!fp) return;
  fseek(fp,54,SEEK_SET);
  image = (unsigned char *)malloc(checkImageWidth*checkImageWidth*4);
  rc=fread(image,sizeof(unsigned char),checkImageWidth*checkImageWidth*4,fp);
  fclose(fp);

  for(i=0; i<checkImageWidth; i++)
  {
     for(j=0; j<checkImageWidth; j++) 
 {
      checkImage[i][j][2] = (GLubyte) *(image+i*checkImageWidth*3+j*3);
      checkImage[i][j][1] = (GLubyte) *(image+i*checkImageWidth*3+j*3+1);
      checkImage[i][j][0] = (GLubyte) *(image+i*checkImageWidth*3+j*3+2);
      checkImage[i][j][3] = (GLubyte)255;
     }
   }
}
“globe.bmp”是一张地球位图

解决方案 »

  1.   

    gluBuild2DMipmaps和glTexImage2D两者选其一。
      

  2.   

    我试过了,都不行,我觉得是不是坐标设置有问题,各位高手们帮我看看!!
    我想要贴完纹理的地球是个三维的球体,因为我还要让它旋转起来。
    还有问题就是,读.bmp文件,怎么能够取到有用的图片信息。我上面的这种读法是不是把文件头信息,文件头,都读进来了?
      

  3.   

    其中maketexture()函数是截取的
    fp = fopen("globe.bmp","rb");
      if(!fp) return;
      fseek(fp,54,SEEK_SET);
    我不明白为什么要偏移54。
      

  4.   

    makeTexture()纯属多此一举,随便找个库就可以正确读入BMP,glaux里面就有,不过性能不好,很容易出错,还有记住图片的尺寸要是2的幂!
      

  5.   

    图像大小没问题512*512的,您说的现成的读取BMP文件的函数是哪个呀?能说说吗?
    我是刚开始学OPENGL,觉得里面的函数好多,但是都不知道
    我觉得我的问题好像出在文理坐标定义上。大家帮帮忙呀!