【发布时间】:2019-06-02 20:44:45
【问题描述】:
我尝试按照本教程创建一个带纹理的天空盒: cubemaps。盒子的一些三角形(它是三角形的)根本没有显示出来,但奇怪的是,并不是每个正方形的第二个三角形都丢失了(1 个正方形的纹理是正确的)。我的问题可以在下面的图片中看到。浅灰色是场景的“一般”颜色,与天空盒无关。
我认为问题是由其中一个着色器引起的,因为我得到了一个
无效操作
在尝试使用天空盒的着色器时出错。可能是什么问题?
这里是顶点着色器的代码:
#version 330 core
layout (location = 0) in vec3 aPos;
out vec3 TexCoords;
uniform mat4 projection;
uniform mat4 view;
void main() {
TexCoords = aPos;
vec4 pos = projection * view * vec4(aPos, 1.0);
gl_Position = pos.xyww;
}
和片段着色器:
#version 330 core
out vec4 FragColor;
in vec3 TexCoords;
uniform samplerCube skybox;
void main() {
FragColor = texture(skybox, TexCoords);
}
最后是加载立方体贴图的过程:
GLuint loadCubemap(std::vector<std::string> faces) {
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);
int width, height, nrChannels;
for (GLuint i = 0; i < faces.size(); i++) {
unsigned char *data = stbi_load(faces[i].c_str(), &width, &height, &nrChannels, 0);
if (data) {
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
stbi_image_free(data);
} else {
std::cout << "Cubemap texture failed to load at path: " << faces[i] << std::endl;
stbi_image_free(data);
}
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
return textureID;
}
请求的几何图形(它是一个 .obj 文件):
o Cube
v 300.000000 -300.000000 -300.000000
v 300.000000 -300.000000 300.000000
v -300.00000 -300.000000 300.000000
v -300.00000 -300.000000 -300.00000
v 300.000000 300.000000 -300.000000
v 300.000000 300.000000 300.00000
v -300.000000 300.000000 300.000000
v -300.000000 300.000000 -300.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 -0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
s off
f 2//1 4//1 1//1
f 8//2 6//2 5//2
f 5//3 2//3 1//3
f 6//4 3//4 2//4
f 3//5 8//5 4//5
f 1//6 8//6 5//6
f 2//1 3//1 4//1
f 8//2 7//2 6//2
f 5//3 6//3 2//3
f 6//4 7//4 3//4
f 3//5 7//5 8//5
f 1//6 4//6 8//6
【问题讨论】:
-
那你画的是什么几何图形?
-
一个缺少 5 个三角形的三角立方体。
-
所以请展示整个几何图形。看起来这是个问题
-
我数了数,少了 5 个三角形。
-
好吧,“显示整个几何图形”是指您发送到顶点着色器的实际数据,而不是一些图像。