C++ 无法将纹理应用于对象

C++ 无法将纹理应用于对象,c++,opengl,C++,Opengl,我试着把草纹理放在一个简单的矩形上,但我不能强迫它工作。将纹理绑定到id的函数工作正常(已测试),所以它一定在这里的某个地方,但我无法识别错误。矩形仍然是白色,没有任何纹理,也没有尝试纹理的任何迹象 void Draw() { glBegin(GL_QUADS); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

我试着把草纹理放在一个简单的矩形上,但我不能强迫它工作。将纹理绑定到id的函数工作正常(已测试),所以它一定在这里的某个地方,但我无法识别错误。矩形仍然是白色,没有任何纹理,也没有尝试纹理的任何迹象

void Draw()
    {
        glBegin(GL_QUADS);
        glEnable(GL_TEXTURE_2D);
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
        glBindTexture(GL_TEXTURE_2D, grass);
        glPushMatrix();

        float m_amb[] = { 1.0f, 1.0f, 1.0f, 1.0f };
        float m_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
        float m_spe[] = { 0.0f, 0.0f, 0.0f, 1.0f };
        glMaterialfv(GL_FRONT, GL_AMBIENT, m_amb);
        glMaterialfv(GL_FRONT, GL_DIFFUSE, m_dif);
        glMaterialfv(GL_FRONT, GL_SPECULAR, m_spe);

        glTexCoord2f(0.0f, 0.0f);
        glNormal3f(0.0f, 0.0f, 1.0f);
        glVertex3f(place.x - 15.0f, place.y - 15.0f, place.z - 5.0f);

        glTexCoord2f(1.0f, 0.0f);
        glNormal3f(0.0f, 0.0f, 1.0f);
        glVertex3f(place.x +15.0f, place.y - 15.0f, place.z - 5.0f);

        glTexCoord2f(1.0f, 1.0f);
        glNormal3f(0.0f, 0.0f, 1.0f);
        glVertex3f(place.x + 15.0f, place.y + 15.0f, place.z - 5.0f);

        glTexCoord2f(0.0f, 1.0f);
        glNormal3f(0.0f, 0.0f, 1.0f);
        glVertex3f(place.x - 15.0f, place.y + 15.0f, place.z - 5.0f);
        glDisable(GL_TEXTURE_2D);
        glEnd();
        glPopMatrix();
    }
在序列之间,除了用于指定顶点属性的命令外,不允许使用其他命令,如
glTexCoord2f
glNormal3f
glVertex3f

如的OpenGL参考页所述,忽略此项将产生
GL\u INVALID\u操作
错误

要解决此问题,您必须移动
glBegin(GL_QUADS)就在第一条
glTexCoord2f
指令和
glEnd()之前直接在最后一条
glVertex3f
指令之后:

glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f);
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3f(place.x - 15.0f, place.y - 15.0f, place.z - 5.0f);

    glTexCoord2f(1.0f, 0.0f);
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3f(place.x +15.0f, place.y - 15.0f, place.z - 5.0f);

    glTexCoord2f(1.0f, 1.0f);
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3f(place.x + 15.0f, place.y + 15.0f, place.z - 5.0f);

    glTexCoord2f(0.0f, 1.0f);
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3f(place.x - 15.0f, place.y + 15.0f, place.z - 5.0f);
glEnd();

您确实需要检查OpenGL函数的结果,其中一个函数可能失败,这是问题的原因
glDisable(GL\u TEXTURE\u 2D)。这将获得一个
GL\u无效\u操作
错误。在
glEnd
指令后移动它。但由于这不是一个问题,因此无法确定这是否是主要问题。序列应仅包含
glTexCoord2f
glNormal3f
glVertex3f
指令;在格伦背后,但它不起作用,所以不是这个one@Rabbid76对不起我的愚蠢。我做到了,现在一切正常,非常感谢