Я делаю небольшой воксельный движок, используя систему чанков (как в Minecraft). Я решил сделать 1 VBO на чанк, чтобы VBO содержал несколько кубов, которые будут использовать разные текстуры.
На самом деле у меня есть UV куба, и я хотел бы использовать его на всех кубах в VBO, чтобы текстура оборачивала все кубы одинаково, если бы кубы были в отдельных VBO.
Вот что я на самом деле получаю:
Как заставить OpenGL делать то же самое, что и первый куб, на всех кубах?
РЕДАКТИРОВАТЬ: вот мои шейдеры: вершинный шейдер #версия 400
layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec2 vertexUV;
out vec2 UV;
uniform mat4 MVP;
void main() {
gl_Position = MVP * vec4(vertexPosition_modelspace, 1);
UV = vertexUV;
}
фрагментный шейдер
#version 400
in vec2 UV;
out vec3 color;
uniform sampler2D textureSampler;
void main(){
color = texture(textureSampler, UV).rgb;
}
мой цикл glfw:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(programID);
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &chunkHandler.player.mvp[0][0]);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, grass);
glUniform1i(textureID, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, chunkHandler.loaded_chunks[0]->vboID);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, tboID);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
glDrawArrays(GL_TRIANGLES, 0, chunkHandler.loaded_chunks[0]->nbVertices);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glfwSwapBuffers(window);
glfwPollEvents();
tboID: tbo для объекта буфера текстуры
как я создаю TBO:
glGenBuffers(1, &tboID);
glBindBuffer(GL_ARRAY_BUFFER, tboID);
glBufferData(GL_ARRAY_BUFFER, 36 * 2 * sizeof(float), uvcube, GL_STATIC_DRAW);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
? - person Guillaume Racicot   schedule 08.02.2019tboID
? Является ли буфер массиваtboID
(для координат текстуры) действительным для всех 4 кубов? - person Rabbid76   schedule 08.02.2019tboID
подходит только для 1-го куба. Вы его где-то удаляете? Не задана ли переменнаяtboID
для 2-го, 3-го и 4-го куба? - person Rabbid76   schedule 08.02.2019glBindBuffer(GL_ARRAY_BUFFER, 0);
справа послеglBindBuffer(GL_ARRAY_BUFFER, tboID);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
- person Rabbid76   schedule 08.02.2019