【问题标题】:Texture Mapping on Quad not workingQuad上的纹理映射不起作用
【发布时间】:2011-12-27 07:35:28
【问题描述】:

我正在尝试编写一些代码来将纹理渲染到一个简单的正方形上,但是在让它工作时遇到了很多麻烦。我下载了一些用于纹理映射的示例源代码here 并对其进行了编译,它似乎可以很好地在它们的圆柱体上进行纹理映射。然后,我添加了一些代码来查看它是否会将纹理渲染到我的正方形上,但它只是用一种似乎介于红色和黑色之间的纯色来纹理它,而不是像它出现在圆柱体上的棋盘格。这是我在第一次调用 gluCylinder 之后添加的代码:

glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(1,0);
glVertex2f(1, -1);
glTexCoord2f(1, 1);
glVertex2f(1,  1);
glTexCoord2f(0,1);
glVertex2f(-1,  1);
glEnd();

为什么纹理会在圆柱体上正常渲染但在我的四边形上却不能正常渲染?

【问题讨论】:

    标签: c opengl textures


    【解决方案1】:

    示例代码启用了自动纹理坐标生成,因此您的 glTexCoord2f 调用将被忽略。自动生成被投影到 Z 平面上。由于您的四边形是 Y 平面,因此它实际上只是在整个四边形上拉伸纹理的一个像素。

    要让它工作,请在 glBegin 之前禁用自动纹理生成,然后在 glEnd 之后重新启用它。

    即:

    glDisable(GL_TEXTURE_GEN_S);
    glDisable(GL_TEXTURE_GEN_T);
    
    glBegin(GL_QUADS);
       glTexCoord2f(0, 0);
       glVertex2f(-1, -1);
       glTexCoord2f(1,0);
       glVertex2f(1, -1);
       glTexCoord2f(1, 1);
       glVertex2f(1,  1);
       glTexCoord2f(0,1);
       glVertex2f(-1,  1);
    glEnd();
    
    glEnable (GL_TEXTURE_GEN_S);
    glEnable (GL_TEXTURE_GEN_T);
    

    或者,您可以将自动纹理生成设置为在 Y 平面上投影,并省略 glTexCoord2f 调用,然后在完成后将其设置回 Z:

    float zPlane[4] = {0., 0., 1., 0.};
    float yPlane[4] = {0., 1., 0., 0.};
    glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane);
    
    glBegin(GL_QUADS);
       glVertex2f(-1, -1);
       glVertex2f(1, -1);
       glVertex2f(1,  1);
       glVertex2f(-1,  1);
    glEnd();
    
    glTexGenfv (GL_T, GL_OBJECT_PLANE, zPlane);
    

    【讨论】:

    • 就是这样!谢谢,你教了我很多关于 OpenGL 纹理映射的知识!
    猜你喜欢
    • 2013-05-23
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2011-03-16
    相关资源
    最近更新 更多