Modern OpenGL: VBO, GLM и матричные стеки

После поиска и чтения о Modern OpenGL, чтобы обновить мой существующий проект, я немного запутался, так как мой 3D фреймворк основан на OpenGL 2.1.

Итак, насколько я понял...

  • нам нужно сгенерировать наш Vertex-Buffer-Objects из вершин, индексов, нормалей, цветов, uvs и т.д.

  • затем мы можем использовать GLM для матричного преобразования, и мы используем VBO только для создания или манипулирования сетками, наконец, мы передаем все в GLSL вершинный шейдер следующим образом...

    glm::mat4 MVP = проекция * вид * модель;
    glUniformMatrix4fv(glGetUniformLocation(shaderProgramID, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); //or &MVP[0][0]
    
    // uniform mat4 MVP;
    // in vec3 Vertex;
    // void main(void)
    // {
    // gl_Position = MVP * vec4(Vertex, 1.0); // вместо ftransform();
    // }
    

ВОПРОС: Как сделать иерархические преобразования без pushMatrix/popMatrix? (или мы можем делать иерархические преобразования, используя наши VBO, возможно ли это?)

Если нет, то как достичь того же результата, что и pushMatrix/popMatrix, используя GLM и библиотеку C++ < stack >?

Допустим, мне нужно что-то вроде этого:

> Set identity
> Translate to X, Y, Z
> Draw Mesh 1
> Rotate 0.5 by X axis
> Draw Mesh 2
> Scale down to 0.1
> Draw Mesh 3
7
задан Bart 12 February 2012 в 13:32
поделиться