Не очень хорошо продуманный учебный материал OpenGL
Я пытаюсь изучить OpenGL и ознакомился с несколькими "руководствами" и "учебными пособиями". Эти "руководства" и "учебные пособия" говорят: "Сделай то и это, и это, и тогда у тебя есть команды рисования".
Я ищу какой-то учебный материал для OpenGL, который на самом деле объясняет, как работает движок, вместо того, чтобы давать мне бессмысленные идеи "вот что ты делаешь". До сих пор я консультировался с такими вещами, как http://www.glprogramming.com/red/, и совсем не был счастлив. До сих пор в первой главе я не знал, как работают параметры конфигурации, что за "контекстная структура" у opengl, какие есть на самом деле расширения, и, прежде всего, после прочтения все это не имеет никакого смысла:
Я также прочитал и увидел что-то вроде "framebuffer" и "renderbuffer", а также "контекст OpenGL". Я до сих пор не знаю, что это такое (я думал, что, по крайней мере, я знал, что такое кадровый буфер, прежде чем читать эти вещи). Противоречивые объяснения состоят в том, что буфер кадров содержит данные для всех примитивов и что буфер кадров связан (??) с буфером рендеринга, который что-то делает? Как бы то ни было, все эти "путеводители" разбрасывают слова "связывать и буферизовать", как будто я точно знаю, что они есть в главе 1. В первой главе красной книги я вижу glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
, Я понятия не имею, что это делает, потому что глава не говорит мне, как и следующий.
Представьте, если бы я просто бросил на вас систему GObject и сказал: "Хорошо, так что, да, просто вставьте этот код, а затем настройте его и напишите свое приложение". Это то, что делает все, что я прочитал. Практически невозможно научиться этому, потому что я не понимаю, что происходит за кулисами.
Я хочу знать:
- Что такое фреймбуфер
- Что такое внутренняя структура фреймбуфера
- Как я использую / создаю объект framebuffer
- То же самое для "renderbuffer", который, я подозреваю, может и не понадобиться
- Что такое GL Extensions и как они взаимодействуют с движком
- Какие типы объектов я должен создать, если я хочу нарисовать 3D-куб на экране, и что эти объекты делают
- Как система opengl инициализируется от начала до конца в отношении настройки памяти для рисования, отслеживания вершин / примитивов / текстур / других метаданных, рендеринга и т. Д.
- Процесс, через который проходит конвейер от начала до конца, скажем, если я хочу визуализировать красный квадрат в ячейке памяти
- Как вызовы типа glVertex3f взаимодействуют с движком
- Как работают все остальные буферы, такие как "буфер цвета" и "буфер вершин"
- Теория, лежащая в основе всего этого дерьма
GL_COLOR_BUFFER_BIT
- Что такое буфер глубины и буфер трафарета и как они взаимодействуют с рисованием? Являются ли они частью объекта framebuffer?
По сути, я хочу изучить теорию, лежащую в основе OpenGL, прежде чем люди бросят в меня код и странные термины. Я хочу знать, как работает система, прежде чем я начну бездумно копировать код из Интернета и называть его "обучающимся". Почему-то никто не пишет такой материал.
Может ли кто-нибудь здесь объяснить эти вещи или указать мне правильное направление (предпочтительно руководство, которое понимает, что я еще не знаю GL)?
1 ответ
Что такое фреймбуфер
Сортировка холста, на котором вы рисуете, используя OpenGL
Что такое внутренняя структура фреймбуфера
Вид слоев, которые обеспечивает холст
Как я использую / создаю объект framebuffer
То же самое для "renderbuffer", который, я подозреваю, может и не понадобиться
Renderbuffers - один из видов "слоя" холста кадрового буфера
Как система opengl инициализируется от начала до конца в отношении настройки памяти для рисования,
Создайте окно (зависит от ОС) и соответствующий ему контекст OpenGL - вот и все. Вы никогда не касаетесь памяти напрямую с OpenGL.
отслеживание вершин / примитивов / текстур / других метаданных, рендеринга и т. д.
Вы должны создать в этом отношении сами.
Процесс, через который проходит конвейер от начала до конца, скажем, хочу ли я сделать красный квадрат
Смотрите учебник, как на http://arcsynthesis.org/gltut
в место в памяти
Вы не заботитесь о местах памяти.
Как вызовы типа glVertex3f взаимодействуют с движком
OpenGL не является движком. OpenGL - это библиотека чертежей. glVertex - это команда непосредственного режима, которая в зависимости от состояния приводит к растеризации примитива (точка, линия или треугольник) в целевой кадровый буфер.
Как работают все остальные буферы, такие как "буфер цвета" и "буфер вершин"
Я думаю, что вы имеете в виду цветные вложения, и это абстрактный термин. Цветное вложение может быть либо буфером рендеринга, либо изображением текстуры. Цветовые вложения являются целями данных, а вершинные буферы - источниками данных.
Теория, лежащая в основе всего этого дерьма, такого как GL_COLOR_BUFFER_BIT
Эта "битая чепуха" - это давняя компьютерная технология, называемая битовыми флагами и масками. Возьмите переменную с N битами, как 32-разрядное целое число (в этом случае N=32). Каждый из этих битов может быть интерпретирован как логический флаг. Комбинируя несколько битовых масок, вы можете кодировать до N флагов в одну N-битную переменную.