C++ 使用上次加载的纹理的Opengl glBindTexture

C++ 使用上次加载的纹理的Opengl glBindTexture,c++,opengl,soil,C++,Opengl,Soil,opengl只使用最后加载的纹理,我不知道为什么。这是我的密码: GLuint loadTex(const char* c) { GLuint temp = SOIL_load_OGL_texture( c, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT

opengl只使用最后加载的纹理,我不知道为什么。这是我的密码:

GLuint loadTex(const char* c) {
GLuint temp = SOIL_load_OGL_texture(
    c,
    SOIL_LOAD_AUTO,
    SOIL_CREATE_NEW_ID,
    SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
    );

if (0 == temp)
{
    printf("SOIL loading error: '%s'\n", SOIL_last_result());
    //return 0;
}

//glGenTextures(1, &temp);

glBindTexture(GL_TEXTURE_2D, temp);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
return temp;
}

void drawObject(标准::向量面、GLuint和resID、双x、双y、双z){
gl3f(1,1,1);
//gl3f(0,1,0);
glTranslatef(x,y,z);
glBegin(GL_三角形);
//glBindTexture(GL_TEXTURE_2D,残余);
//玻璃结构(GL_纹理1);
对于(int i=0;i
}

<纹理>加载到C++向量类数组中,然后传递给DRAPEOTAL函数。绘制对象时只使用最后加载的纹理,我不知道为什么。是的,每次土壤加载纹理时,都会为其指定一个新的粘合点,并且是的,纹理在使用之前加载

glBegin(GL_TRIANGLES);
//glBindTexture(GL_TEXTURE_2D, resID);
//glActiveTexture(GL_TEXTURE1);
glBegin
glEnd
之间可以调用的唯一函数是顶点提交调用,如
glColor*
glTexCoord*
glVertex*
,以及其他一些函数<必须在
glBegin
之前调用code>glBindTexture
glActiveTexture

另外,您的
glActiveTexture
glBindTexture
顺序不正确;您需要首先选择要使用
glActiveTexture
绑定到的纹理,然后使用
glBindTexture
实际绑定它


(我还建议您根本不要使用
glBegin
和friends;学习使用顶点缓冲区对象、顶点数组对象和着色器,因为
glBegin
等都已弃用且无法缩放)

非常感谢,我不敢相信我没有注意到这一点
glBegin(GL_TRIANGLES);
//glBindTexture(GL_TEXTURE_2D, resID);
//glActiveTexture(GL_TEXTURE1);