如何在一个VBO(顶点缓冲区对象)中构造多个多维数据集?

时间:2019-02-11 21:02:12

标签: opengl glfw voxel

我正在创建一个小的体素引擎,我发现要做的优化之一是每个块仅创建1个VBO。 每个块包含很多多维数据集。 但是实际上我的纹理不能在每个多维数据集上正确重复,这是一个包含10个多维数据集的示例: 10 cubes 如您所见,只有左下角的立方体具有良好的纹理(这就是问题所在)

要对多维数据集进行纹理处理,我不使用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);

0 个答案:

没有答案