我正在创建一个小的体素引擎,我发现要做的优化之一是每个块仅创建1个VBO。 每个块包含很多多维数据集。 但是实际上我的纹理不能在每个多维数据集上正确重复,这是一个包含10个多维数据集的示例: 如您所见,只有左下角的立方体具有良好的纹理(这就是问题所在)
要对多维数据集进行纹理处理,我不使用UV映射,而是使用opengl多维数据集映射计算着色器中的纹理位置。
这是我的着色器: 顶点着色器:
#version 400
layout(location = 0) in vec3 vertexPosition_modelspace;
out vec3 textureDir;
uniform mat4 MVP;
void main() {
gl_Position = MVP * vec4(vertexPosition_modelspace, 1);
textureDir = vertexPosition_modelspace;
}
片段着色器:
#version 400
in vec3 textureDir;
out vec3 color;
uniform samplerCube textureSampler;
void main(){
color = texture(textureSampler, textureDir).rgb;
}
这是我创建纹理的方式:
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture_id);
for (GLint i = 0; i < 6; i++)
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_BGR,
GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_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);