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

Довожу здравый смысл до абсурда

Отправить сообщение
Отличные картинки. Перепады можно сгладить, взяв нормальный вектор не к треугольнику, а к каждой его вершине. Массив хранится в строках vn x y z, в строках f x/x/vn1 x/x/vn2 x/x/vn3 число vni — это индекс из массива нормалей.
Таким образом, мы получаем три разные интенсивности в вершинах треугольника. Теперь треугольник нужно заливать не одним цветом, а плавным градиентом между тремя. Всё это называется тонировкой Гуро.

Должно получиться нечто вроде вот этого
Супер, добавьте небольшую константу к освещённости всех треугольников (около 40 из 255 возможных). Это будет так называемый ambient lighting (свет, отражённый от стен, от пола и прочего). Скалярное произведение с нормалями даёт диффузную компоненту освещённости — это свет непосредственно от источника, падающий на матовую поверхность.

Стоп. Освещение и отсечение «задних» поверхностей — это разные вещи, они совпадают только если свет позади камеры.

Если свет сбоку, то освещённость нужно считать скалярным произведением между нормалью и светом, а отсекать рисование треугольников скалярным произведением между направлением вектора взгляда и нормалью.
Супер, отличные рендеры.
Сортировка по минимальной вершине — это практически «алгоритм художника». У меня в репозитории код з-буфера уже есть, статья будет через несколько дней.
Отлично, спасибо! К выходным выложу код z-буфера.
Попробуйте отрендерить мою голову (осторожно, требует доработки напильником, ~10-20 строк кода).
Окей, модель доступна в репозитории. Раз уж домашка, то мой текущий код на ней сломается. Почините и выкладывайте скриншоты!
Согласен, но это всё не тема обсуждения. Спасибо за уточнение.

Я вообще не хочу писать здесь оптимизированный код, я просто показал, как писать целочисленного брезенхема для расширения кругозора. Всего этого в моём коде не будет, оптимизированный код зачастую гораздо длиннее и нечитабельнее, не моя цель.
Вся геометрия будет вынесена в отдельную статью.
Сборщик примитивов. А перед ним геометрический шейдер.
a) да просто потому, что мне всё равно, мне скорость абсолютно не важна здесь
б) потому, что в финальной версии отрисовки треугольников эта переменная зависит от индекса цикла
В какой момент я вам задолжал, не подскажете? Аккуратнее со словами, пожалуйста.
Хотите права администратора на репозиторий?
Ага, спасибо, может кому пригодится. К сожалению, это увеличит размер кода, а это для меня неприемлимо. А вот непосредственный просчёт координат для каждой точки прямоугольника может быть кратким и существенно более читаемым, нежели мой код растеризации.
Мм. Я не очень понял, у меня несколько коммитов на одну статью. Вы что предлагаете в тагах ставить?
Нет, восстановление 3д модели по трём обычным фотоснимкам.
В моём профиле есть список всех публикаций.
Да, но этот метод не позволяет интерполировать. Скорость мне абсолютно побоку, мне компромисс между самым коротким и самым читаемым кодом. Мой код абсолютно нечитаем, это плохо.

Вот так у меня выглядит отрисовка треугольника с z-буфером. Вы можете написать код лучше моего? С удовольствием его возьму :)

Вычисление барицентрических координат мне импонирует тем, что получается элегантнаая интерполяция, особенно когда мы добавим текстурные координаты и/или векторы нормали.
Мне казалось, что схематичных рисунков по отрисовке треугольника там как минимум три-четыре…

Информация

В рейтинге
3 798-й
Зарегистрирован
Активность