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(std::vector<Level::Triangle> faces, GLuint &resID, double x, double y, double z ){
glColor3f(1, 1, 1);
//glColor3f(0, 1, 0);
glTranslatef(x, y, z);
glBegin(GL_TRIANGLES);
//glBindTexture(GL_TEXTURE_2D, resID);
//glActiveTexture(GL_TEXTURE1);
for (int i = 0; i < faces.size(); i++){
Level::Triangle t = faces[i];
glTexCoord2f(t.p1.tx, t.p1.ty);
//glTexCoord2f(0.0, 0.0);
glVertex3f(t.p1.x, t.p1.y, t.p1.z);
glTexCoord2f(t.p2.tx, t.p2.ty);
//glTexCoord2f(0.0, 1.0);
glVertex3f(t.p2.x, t.p2.y, t.p2.z);
glTexCoord2f(t.p3.tx, t.p3.ty);
//glTexCoord2f(1.0, 1.0);
glVertex3f(t.p3.x, t.p3.y, t.p3.z);
}
glEnd();
glTranslatef(-x, -y, -z);
}
テクスチャは c++ ベクトル クラス配列に読み込まれ、次に drawObject 関数に渡されます。オブジェクトを描画するときは、最後に読み込まれたテクスチャのみが使用されます。理由はわかりません。はい、SOIL がテクスチャをロードするたびに新しい Gluint が割り当てられ、テクスチャは使用前にロードされます。