2010-12-01 6 views
14

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

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

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

ответ

9

Поскольку немедленный режим устарел, применение приложения «привет треугольник» является более привлекательным. Существует хороший учебник по современной OpenGL здесь:

http://arcsynthesis.org/gltut/

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

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

Вы можете увидеть здесь:

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

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

+0

Спасибо за ответ. Я определенно посмотрю на эту ссылку, как только у меня появится шанс. И я знал, что должен делать эха-шейдер, как в том, что вы написали, просто не был уверен, нужно ли вам решать, что делать, или если opengl все-таки сделал это для вас, и все, что вам нужно было сделать, это цвет позиции/пикселя (что, кажется, так, слава богу). Очень полезный ответ +1 – Zepee 2010-12-03 18:14:02

Смежные вопросы