что работает:
шейдер
#version 330 core
attribute vec3 pos;
attribute vec2 uv;
out vec3 color;
uniform mat4 view;
uniform mat4 projection;
void main() {
gl_Position = projection * view * vec4(pos.xy, sin(10.0*(pos.x + pos.y))/8.0 + 1.0, 1.0);
color = vec3(pos.xy, sin(10.0*(pos.x + pos.y))/8.0);
}
питон
vao = glGenVertexArrays(1)
glBindVertexArray(vao)
# [x, y, z]
vertices = vbo.VBO(np.array([[...],[...],...], dtype=np.float32))
def draw():
glUseProgram(program)
glUniformMatrix4fv(projectionLoc, 1, False, perspectiveMatrix)
glUniformMatrix4fv(viewLoc, 1, False, viewMatrix)
vertices.bind()
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3, GL_FLOAT, 12, vertices)
glDrawArrays(GL_TRIANGLES, 0, lenVerticesArray)
vertices.unbind()
Я хотел бы либо иметь отдельный массив значений uv [x, y] для перехода к атрибуту uv, либо добавить их к текущим вершинам как [x, y, z, ux, uy] и иметь те, которые являются атрибутом ультрафиолета.
Я попытался сделать следующее с помощью [x, y, z, ux, uy]:
glEnableVertexAttribArray(posLoc)
glVertexAttribPointer(posLoc, 3, GL_FLOAT, False, 12, vertices)
glEnableVertexAttribArray(uvLoc)
glVertexAttribPointer(uvLoc, 2, GL_FLOAT, False, 12, vertices+12)
Однако это не работает. Все остальное, что я пробовал, является некоторым вариантом этого, но все это не помогает. Кажется, я не понимаю, что нужно делать, чтобы отправить данные.