glGenTextures(1, &texWood);
glBindTexture(GL_TEXTURE_2D, texWood);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
int w, h, nc;
unsigned char* data = SOIL_load_image("textures/wood.jpg", &w, &h, &nc, SOIL_LOAD_RGB);
if (data) {
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
std::cout << " Loaded wood.jpg (" << w << "x" << h << ") → 主纹理(80%)\n";
}
else {
std::cerr << "Failed to load wood.jpg → 使用白色占位符\n";
unsigned char white[] = { 255, 255, 255 };
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, white);
}
SOIL_free_image_data(data);
// === 加载 container.png (笑脸纹理,作为叠加纹理 20%) ===
glGenTextures(1, &texContainer);
glBindTexture(GL_TEXTURE_2D, texContainer);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
data = SOIL_load_image("textures/container.png", &w, &h, &nc, SOIL_LOAD_RGB);
if (data) {
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
std::cout << "Loaded container.png (" << w << "x" << h << ") → 叠加纹理(20%)\n";
}
else {
std::cerr << " Failed to load container.png → 使用黄色占位符\n";
unsigned char yellow[] = { 255, 255, 0 };
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, yellow);
}
SOIL_free_image_data(data);
glBindTexture(GL_TEXTURE_2D, 0);
std::cout << "纹理初始化完成!\n";
}
详细解释每行代码
最新发布