Проблема со specular map у диаблы, посмотрите его возведение неважно чего в степень ноль. Сколько моделей, столько коэффициентов. У нас неполные данные :)
Учу ваш курс на малинке. Сейчас на втором уроке и голову треугольниками рисует довольно быстро. С ужасом представляю, сколько времени будет рендериться чорт :)
Спасибо за курс, кроме графики и математики разберусь немного в C++ и Makefile.
Если просто, то проходите по каждому пикселю в текстуре, имеете его (u,v) координаты. Затем делаете билинейную интерполяцию в экранном прямоугольнике (находите две точки на противоположных рёбрах, что соответствуют координате u, две точки на двух других противолежащих, что соответствуют координате v). Считаете пересечение двух отрезков, это экранные коордианты пикселя из текстуры.
Недостаток следующий: на экране вы можете несколько раз закрасить один и тот же пиксель.
Спасибо! Действительно не сложно. До этого что читал — там буфер строят какой-то специальный — видимо как раз чтобы не рисовать несколько раз один пиксель. Попробую реализовать.
Если четырёхугольник растягивает текстуру, то может понадобиться проходить с субпиксельным шагом по оригинальной текстуре, чтобы на экране не было дырок. В общем, преобразование uv->xy быстрое и безболезненное, xy->uv требует небольшой гимнастики.
Да просто работайте с квадратом, а не с треугольниками и все.
Тот же сканлайн даст вам корректный результат в этом случае.
Косяк из-за того, что два треугольника обрабатываются независимо.
Если же вы будете работать с квадратом и использовать все четыре точки, то результат будет корректный.
Скажите, почему вы умножаете на матрицу Mshadow во втором фрагментном шейдере вместо того, чтобы заново считать значение shadow-буфера во втором вершинном шейдере (какой-нибудь varying_shadow) и потом интерполировать во втором фрагментном шейдере? Есть какая-нибудь причина для этого, или просто так было проще?
Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 6 из 6