Pull to refresh

Comments 11

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main()
{
    gl_Position = projection * view * model * vec4(position, 1.0f);
}

Мне кажется странным, что через юниформы передаются три матрицы, которые при вычислении позиции каждой вершины перемножаются заново (и так почему-то во многих примерах в интернете).
Насколько вероятно то, что в данном варианте при компиляции шейдеров драйвер заметит фишку и перемножит матрицы только один раз, а потом для всех вершин будет умножать вектор только на одну матрицу? типа (pvmmatrix) * vec4 ?

Судя по всему этот курс рассчитан на новичков, поэтому автор пытается писать попроще и вопросам эффективности особо много внимания не уделяет. В следующем уроке (2.2 Основы освещения) он так и пишет, примерно следующее:… это не эффективно, но в целях обучения вполне сойдет.
О вероятности интеллектуальности драйвера ничего сказать не могу….в книжке Рост Рэнди пишет, что это зависит от конкретной реализации.
Может быть для шейдера перемножение трех матриц не такая уж трудоемкая операция (по сравнению например с сэмплированием текстур), что бы её оптимизировать? Не знаю, до замеров производительности и профилирования я пока не добрался. Надеюсь более компетентные читатели что-нибудь сообщат на эту тему.
Для обучения даже правильно именно так писать, чтобы в конечном итоге было понятно, как и производится проекция.
По сути описано создание и использование Diffuse color, который определяет сам цвет объекта. Будет ли далее объяснено создание Ambient, Emissive and Specular, это скорее всего в статье про освещение?
Это скорее не диффузный а фоновый (Ambient) цвет объекта.
В следующем уроке (2.2 Основы освещения) будет рассмотрена модель освещения по Фонгу (Ambient, Diffuse и Specular). O свечении (emission map) будет упомянуто в уроке (2.4 Текстурные карты), но только в разделе «Упражнения» (т.е. в качестве задания и готового решения)

Вообще-то Ambient, Diffuse и Specular в OpenGL присутствуют и без Фонга, при освещении Гуро.

Да, в фиксированном конвейере визуализации присутствует. Но здесь то речь идет о шейдерах, т.е. о программируемом конвейере. А в нем нем ни Гуро ни Фонга. Вернее вообще ничего кроме переменных и функций нет, поэтому всё приходится считать вручную.
Спасибо за переводы. Читать на русском намного приятнее, а целостных русскоязычных пособий по opengl 3+ почти и нет.
И вам спасибо :)
Читать на русском может быть и приятнее, но пользы меньше. Лично я после такого чтения на следующий день уже почти ничего не помню :( Поэтому и взялся за переводы. Так хоть что-то в голове оседает.

На русском есть книжка «Рост Рэнди — OpenGL Трехмерная графика и язык программирования шейдеров».
Еще «Боресков Алексей — Разработка и отладка шейдеров» но она больше похожа на обзорно-ознакомительный справочник, чем на самоучитель. Обе старые, 2005 года, но почитать стоит.
UFO just landed and posted this here
Тогда нужно использовать какую-нибудь вспомогательную библиотеку. Потому что вручную самостоятельно разбирать формат PNG наверное будет слишком трудоемко, да и зачем?
В Windows читать .PNG умеет «штатный» GDI+ объект Bitmap (т.е. никаких библиотек не нужно)
В не-Windows можно воспользоваться библиотекой libpng.
А потом, имея массив пикселей создать в OpenGL текстуру функцией glTexImage2D(..) и т.д.
Sign up to leave a comment.

Articles