OpenGL 3.1-4.1 новые и устаревшие функции

Я работаю с OpenGL около года и многому научился. К сожалению, так, как я узнал, это был старый способ pre 3.x, что означает немедленный режим, шейдеры по умолчанию, стеки матриц и т.д. Я более или менее имею представление о том, что изменилось с того момента и до сих пор, глядя на спецификации OpenGL, однако Я не совсем понимаю некоторые из новых способов сделать что-то.

По моему мнению, они избавились от матричных стеков, а это значит, что вам нужно следить за своими собственными матрицами трансформации, что не кажется слишком сложным. Они также избавились от немедленного режима, то есть теперь вам нужно использовать VBOs или VAO (никогда не знаете, какой из них, может быть, и того и другого..), чтобы отправить пиксель/нормальный/текстуру и т.д. информацию в программу шейдеров. Я действительно не понимаю, как работают эти объекты, я думаю, вам нужно поместить всю информацию в них и предоставить некоторый набор, чтобы показать разделители между пиксельными, нормальными и текстурными координатами. Может ли кто-нибудь кратко объяснить, как это работает (или отправить мне ссылку, которая объясняет это)? Я пробовал википедию и искал ее, но обнаружил, что все еще не совсем понимаю их.

Еще один момент, о котором я хотел бы узнать больше, - это шейдеры, поскольку я никогда не использовал их. Я не собираюсь спрашивать, как закодировать их или что-то еще, только то, что нужно сделать там, и то, что все еще делает для вас. В частности, что вам нужно сделать в шейдерах, чтобы получить базовую программу рендеринга? Я знаю, что вам нужно выполнить все лигирующие вычисления и использовать свои матрицы для вычисления реальной вершинной позиции. Но opengl по-прежнему заботится об отбраковке поверхности, обрезке линий, заполнении многоугольников и других проблемах нижнего уровня, или вам нужно закодировать их в шейдеры (или они даже не входят в шейдеры)?

Ответы

Ответ 1

Поскольку немедленный режим устарел, выполнение приложения "привет-треугольник" немного более активно. Здесь есть хороший учебник по современному OpenGL:

http://arcsynthesis.org/gltut/

Вы должны прочитать его полностью. Имейте в виду, что он не использует VAO, поэтому вам придется читать об этом где-то еще потом. VAO не сильно меняют ситуацию, поэтому вам не придется отучивать вещи из упомянутого учебника, чтобы использовать их.

И о вашем втором вопросе... Ваш вершинный шейдер будет выполняться OpenGL для каждой вершины. Ваша задача состоит в том, чтобы вычислить конечную позицию вершины и подготовить данные (например, нормали, световые данные...) для отправки в фрагментарный шейдер, учитывая атрибуты вершин и другие данные, которые вы отправляете в шейдер (униформа - вы будете читать о это в учебнике). Фрагмент-шейдер будет выполнен для каждого фрагмента, а в флеш-шейдере вы вычисляете окончательный цвет каждого фрагмента.

Вы можете посмотреть здесь:

http://www.opengl.org/sdk/docs/man4/

что такие вещи, как glPolygonMode и glCullFace, все еще существуют.