C++ 无法将纹理应用于对象
我试着把草纹理放在一个简单的矩形上,但我不能强迫它工作。将纹理绑定到id的函数工作正常(已测试),所以它一定在这里的某个地方,但我无法识别错误。矩形仍然是白色,没有任何纹理,也没有尝试纹理的任何迹象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);
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对不起我的愚蠢。我做到了,现在一切正常,非常感谢