g-cont
> Да что он вам сделал? Детство испортил?
Видать на улице новые кроссовки отжал. Такая затаенная детская обида на гопника Гену Квадратова ))))
Cheb
> Чтобы нарисовать квадрат совместимо с тем, как исторически работает GL_QUAD, надо четыре треугольника, иначе интерполяция даст для центра совсем не то, как оно работает.
Что за бред? Квады всегда работали как два треугольника, по крайней мере на железе с шейдерами.
> Два треугольника достаточны только для параллелепипеда или ромба. Трапеция выйдет отекстуренной через жопу.
Если кривые текстурные координаты, то одна лишняя точка ничем не поможет — вместо одного излома будет два.
> Отсюда торчат уши у перекошенных текстур на пушках и прочих лоу-поли моделях в первом и втором квейке.
Там просто не было перспективно корректной интерполяции (точнее, она была включена только на стенах).
> Отсюда торчат уши у перекошенных текстур на пушках и прочих лоу-поли моделях в первом и втором квейке.
Там анварп скинов просто кривой... А плывущие текстуры на моделях там вообще из за формата моделей. К гл_квадз этого отношения не имеет, да и рисовались они через триангл стрип-фан
Я думаю в 95-м году просто нормальных пакетов моделирования еще не было. Я в Arcane Dimensions поиграл и там нормальные модельки вполне. Так что формат непричём.
>>Почему считается, что отдельные треугольники быстрее квадратов будут?
потому что Sony PlayStation выиграла, а Sega Saturn проиграла.
>Там просто не было перспективно корректной интерполяции
Ты предполагаешь, что трапеция - это результат перспективной проекции прямоугольника.
А трапеция может быть просто трапецией. Как часть линии, нарисованной GL_QUADS, например. И вот в этом случае - НЕТ, два треугольника не работают, получается через жопу. Тем сильнее, чем она трапециевиднее.
Я недавно это на своей заднице выучил, портируя код рисования линий с glBegin(GL_QUADS) на нормальные 2d модели из индекснутых треугольников.
>Там анварп скинов просто кривой...
Механика другая, косяк тот же. Нормально отекстурить трапецию, натянув на неё прямоугольник, можно только 4 треугольниками. Иначе банальная линейная интерполяция текстурных координат приводит к говнищу на узких длинных треугольниках.
У вас есть лоу-поли трапеция? Тогда этот косяк идёт к вам!
Cheb
а покажи пример кривого текстурирования трапеции, взяв в качестве текстуры шахматное поле
Cheb
> Ты предполагаешь, что трапеция - это результат перспективной проекции прямоугольника.
В данном конкретном случае (баги с текстурами в кваке) это именно так и есть.
> А трапеция может быть просто трапецией. Как часть линии, нарисованной GL_QUADS, например. И вот в этом случае - НЕТ, два треугольника не работают, получается через жопу.
Потому что текстурные координаты кривые (нелинейные), трепецевидность тут напрямую не при чем, просто наиболее часто возникающий частный случай.
Для работы с нелинейными текстурными координатами можно использовать тесселяцию либо специальный шейдер.
И тесселяция с добавлением единственной точки никак не может считаться универсальным решением.
Наслаждайтесь!
По быстрому переколбасил в своём движке из фона гуя:

Без дополнительной точки в центре - честная линейная интерполяция даёт ЖОПУ.
>И тесселяция с добавлением единственной точки никак не может считаться универсальным решением.
Она является универсальным решением для 100% эмуляции поведения ныне покойной GL_QUADS
>координаты кривые (нелинейные)
Нет, что самое смешное - они-то как раз линейные. Просто GL_QUADS интерполирует по всем четырём соседним, а железо, рисующее треугольник - по трём, ничего не зная о четвёртой точке четырёхугольника.
а теперь найди разницу с этим:
статья https://en.wikipedia.org/wiki/Texture_mapping раздел Perspective correctness
Какая разница? Мы не о проекции говорим, а об отекстуренной ленточке из прямоугольников, имеющей изгибы и расширения.
Как ты её не прецируй потом, она останется отекстуренной через жопу
Отекстуренные ленточки имеют 100500 применений: следы махов меча, всякие магические потоки, вихрящиеся вокруг героя, элементы гуя... Колея железной дороги, на худой конец, в лоу-поли виде сверху.
И во всех этих случаях без средней точки сгенерированный меш скатывается в сраное говно.
Раньше было проще: и трава зеленее, и ленточку рисуешь, используя GL_QUADS - и ни..почём.
А сегодня - или геометрический шейдер, или среднюю точку на CPU - но всё ручками, всё сам.
Cheb
> Она является универсальным решением для 100% эмуляции поведения ныне покойной GL_QUADS
Поведение GL_QUADS при нелинейных текстурных координатах, неплоской поверхности и невыпуклого контура — это UB.
Т. е. само использование таких квадов не особенно корректно, ибо каждый вендор делает как хочет.
> Нет, что самое смешное - они-то как раз линейные.
Под словом "линейные" я понимаю, что значения во всех четырех точках задаются одним линейным уравнением Ax + By + C.
Очевидно, что в твоем примере с перекошенной шахматкой это не так.
>>а теперь найди разницу с этим:
Ну в примере Cheb речь про ортогональную проекцию, а не про коррекцию перспективы. Т.е. на том скриншоте обычный квад, искаженный перспективно.
Но вообще странно конечно.
Cheb
Что-то сомнительно, что точка в центре пофиксит проблему на 100%. Покаж результат.
Думаю, фиксить баг можно двумя теругольниками с 4-х мерными текстурными координатами. То есть перспективной коррекцией. Но что-то мне кажется, все забивают на такое при ленточках. Ленточки нужно моделировать ровнее :)
Human
Современные GPU понимают треугольники, а квады — нет. Квады конвертируются в треугольники перед рендером.
Тема в архиве.