Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение
Может быть язык Haxe — это то, что вам нужно
Класс! Прочитал на одном дыхании.
Все равно непонятно почему должно быть так:
<цвет_пикселя> = <изначальный_цвет> * (<цвет_источника_1> +… + <цвет_источника_n>)


В википедии как раз указана сумма:
<цвет_пикселя> = <фоновой (ambient)> + (<рассеянной (diffuse) источник 1> + <блики (specular) источник 1> + ... + <рассеянной (diffuse) источник n> + <блики (specular) источник n>) 


Ambient мы сохраняем в текстуру и потом постепенно добавляем диффузные и бликовые составляющие для каждого источника. Что-то тут не то.
Так же с помощью буфера трафарета. Шейдер источника света будет брать пиксель из буфера цвета и добавлять к нему свой цвет. Или типо нельзя одновременно рендерить и читать из текстуры?
Никак не пойму, почему нельзя обойтись двумя отрисовками всех объектов: 1) глубина, нормали 2) цвет. Ну а затем ренедерим шары источников света в буфер цвета, используя буферы из 1. В итоге есть готовая текстура — ее мы показываем полноэкранным квадом.
Мне стало страшнее жить, когда я начал узнавать как это все работает на уровне аппаратуры. До какого-то момента в чем, а в этом уровне был уверен и, так сказать, не лез туда. Оказалось там не все так строго, как я представлял. Потом уже я узнал, что процессор может в какой-то момент выкинуть исключение Macine Check и сказать «гудбай». Кэш память, прогнозирование переходов, спекулятивное исполнение — все это, казалось бы, обходные пути, однако это все работает на большинстве процессоров.

Еще забавен тот факт, что сложение двух чисел на C++ в некоторых случаях undifined behaviour (чисто теоретически может отформатировать жесткий диск):D
Однозначно плюс в карму. Но зачем заниматься вилосипедостроительством в 2016 году…

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность