openGL纹理映射 - 没有细节,为什么?

时间:2015-04-19 13:10:48

标签: c++ qt opengl

我正在尝试将纹理贴图应用于我绘制的球体。 我可以将纹理应用到它。但我没有看到我的形象的任何细节。我只看到一个橙色的球体,没有细节。

这是我的图片:http://imgur.com/vCF2rPq 我的图像是17x17 24bit bmp。

enter image description here

我只看到一个绿色的球体。为什么请?

http://imgur.com/aTPrmIr

我的代码:

void glWidget::myTextureMapping()
 {
    QImage t;
    QImage b;
    if(!b.load("...sun2.bmp"))
    {
       qDebug("error with image\n");
    }

    t = QGLWidget::convertToGLFormat( b );
    glGenTextures( 1, &texture[0] );
    glBindTexture( GL_TEXTURE_2D, texture[0] );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    gluBuild2DMipmaps( GL_TEXTURE_2D,3 ,17,17, GL_RGB,GL_BITMAP, t.bits());

 }

 void glWidget::drawSphere()
 {
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glLoadIdentity();
   glBindTexture(GL_TEXTURE_2D, texture[0]);

    glPushMatrix();
   glScalef(1,1,1);
   glLoadIdentity();
   GLUquadricObj *quadric=gluNewQuadric();
   gluQuadricNormals(quadric, GLU_SMOOTH);
   gluSphere(quadric, 0.25, 360,360);
   gluDeleteQuadric(quadric);
   glPopMatrix();
  }

 void glWidget::initializeGL()
{
   myTextureMapping();

    glEnable(GL_TEXTURE_2D);                            // Enable Texture Mapping ( NEW )
    glShadeModel(GL_SMOOTH);                            // Enable Smooth Shading
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);               // Black Background
    glClearDepth(1.0f);                                 // Depth Buffer Setup
    glEnable(GL_DEPTH_TEST);                            // Enables Depth Testing
    glDepthFunc(GL_LEQUAL);                             // The Type Of Depth Testing To Do
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Really Nice Perspective Calculations
  }

1 个答案:

答案 0 :(得分:2)

在使用以下函数绘制球体之前,必须启用纹理坐标的生成:

gluQuadricTexture(quadric, GLU_TRUE);

默认情况下禁用纹理坐标的生成。

请参阅this

相关问题