gpt4 book ai didi

c++ - openGL - 测试映射立方体失败

转载 作者:行者123 更新时间:2023-11-28 06:18:39 25 4
gpt4 key购买 nike

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

为什么要这样?我的代码:

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

最佳答案

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

看看这个:

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

关于c++ - openGL - 测试映射立方体失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29740499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com