openGL - 纹理映射多维数据集失败

时间:2015-04-20 06:17:56

标签: c++ qt opengl

我正在尝试一些非常简单的事情,通常是:在立方体的不同表面上应用纹理。 我可以应用它,但似乎他只是采用我的图像的平均颜色。

为什么好吗? 我的代码:

void MyGLWidget::drawCube()
{
    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 
    glLoadIdentity();               
//  glPushMatrix();

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    glTranslatef( 0.5, 0, 0.0); 
    glRotatef(getCubeAngle(), 0.0f, 1.0f, 0.0f); 
    glTranslatef(0, 0, 0);

    glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);

    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glBegin(GL_QUADS);

       //back
       glVertex3f(-0.1, 0.1,-0.1 );//upper left corner
       glVertex3f(0.1, 0.1,-0.1); //uper right
       glVertex3f(0.1,-0.1,-0.1 ); // down left
       glVertex3f(-0.1,-0.1,-0.1); // down right
/* other code to create rest of the cube*/

      glEnd();
      glFlush();
 //     glPopMatrix();
}

void MyGLWidget::resizeGL(int width, int height)
{
  glViewport(0, 0, width, height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glScalef(height *1./width, 1.0, 1.0);
  glMatrixMode(GL_MODELVIEW);
}

void MyGLWidget::myTextureMapping()
{

        QImage t;
        QImage b;

        if(!b.load("..../myImage.bmp"))
        {qDebug("error with image\n");}


        t = QGLWidget::convertToGLFormat(b);
        glGenTextures( 1, &texture[0] );
        glBindTexture( GL_TEXTURE_2D, texture[0] );
        glTexImage2D( GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits() );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}


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

        glEnable(GL_TEXTURE_2D);        
        glShadeModel(GL_SMOOTH);                        
        glClearColor(0.0f, 0.0f, 0.0f, 0.5f);           
        glClearDepth(1.0f);                         
        glEnable(GL_DEPTH_TEST);                
        glDepthFunc(GL_LEQUAL);                             
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  

}

修改

添加了这些tex坐标:

  glTexCoord2f(-0.1, 0.1);    
  glVertex3f(-0.1, 0.1,0 );//upper left corner

  glTexCoord2f(0.1, 0.1);      
  glVertex3f(0.1, 0.1,0); //uper right

  glTexCoord2f(0.1, -0.1);
  glVertex3f(0.1,-0.1,0 ); // down left

  glTexCoord2f(-0.1, -0.1);    
  glVertex3f(-0.1,-0.1,0); // down right

但是我的形象比我的立方体的脸大:

源图片:http://imgur.com/h48QARM

导致软件:http://imgur.com/rxvK0Ot

2 个答案:

答案 0 :(得分:1)

您应该为每个顶点提供纹理坐标。你现在拥有的只是Quad的位置数据,缺少纹理坐标。

看看这个:

OpenGL Textured Cube Not Being Mapped Correctly

试试这个:

glTexCoord2f(0, 0);    
glVertex3f(-0.1, 0.1,0 );//upper left corner

glTexCoord2f(1, 0);      
glVertex3f(0.1, 0.1,0); //uper right

glTexCoord2f(0, 1);
glVertex3f(-0.1,-0.1,0 ); // down left

glTexCoord2f(1, 1);    
glVertex3f(0.1,-0.1,0); // down right

答案 1 :(得分:0)

纹理坐标是不是错了?对我来说,似乎你要去-0.1到0.1,而纹理坐标通常是在区间[0,1]中定义的。