Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alexei Frounze                       2:5020/400     25 May 2001  09:37:00
 To : Aleksey Malov
 Subject : текстурирование (сырэц)
 -------------------------------------------------------------------------------- 
 
 Fri May 25 2001 02:01, Aleksey Malov wrote to Yuri Burger:
 
  AM>   Вот в таком виде эхотаг текстурирования не видно совсем. Пользы от
  AM> ТАКОГО исходника на C не больше, чем от исходника на асме (разве что C -
  AM> межплатформенный язык).
 
 Правду говоришь.
 
  AM> Кстати. Учитывает ли народ то, что для корректной растеризации
  AM> треугольника надо обсчитывать по несколько различающимся формулам
  AM> смещения в экране и в текстуре по крутым и по пологим ребрам, а также
  AM> учитывать то, какй треуголльник - левосторонний или правосторонний (с
  AM> какой стороны находится средняя вершина).
 
  AM> Пример:
 
  AM> Заметно, что для ребра AB расчет смещения в экране по формуле
  AM>  AB.step_x = (B.x - A.x)/(B.y - A.y)
  AM>  не дает правильного результата (граница полигона не совпадает с контуром
  AM> полигона). Приходится использовать модифицированные формулы расчета для
  AM> "верхних" и "нижних" ребер.
 
 Кое-кто учитывает. Я, например. Во-первых, я преобразования (повороты и
 сдвиги) относительно камеры делаю в вещ. арифметике, во вторых, обход по
 периметру тоже делаю в вещ. арифм - точность лучше чем целыми. Что ещё я делаю
 с полученными x и step_x - я корректирую их, учитывая то, что экран дискретный
 и только потом уже текстурирую скан-лайны. Кроме всего прочего ещё не мешает
 левую и правую стороны многоугольника чуть по разному обрабатывать -
 использовать ceil() для левой и ceil()-1 для правой - тогда стыки текстур
 выходят правильные, незаметные.
 Ещё есть один эффект, который можно выправить в реализации, которая
 интерполирует значения u и v вдоль группы из 8/16/... пикселов в скан-лайне.
 Поясню эффект... Интерполяция начинается на левой стороне полигона и
 заканчивается на правой. Если полигон на экране имеет вертикальные левую и
 правую рёбра, то всё выглядит ок. Если же левые и правые под некоторым углом к
 вертикали (трапецевидная/ромбовидная/... проекция на экран), то группы из тех
 8/16/... пикселов имеют смещённые центры относительно друг друга в соседних
 скан-лайнах. Это приводит к некоторой волнистости текстуры на экране - сдвиг в
 некоторых местах текстуры на 1 пиксел в соседних скан-лайнах. Происходит это
 от того, что ошибка при интерполяции u и v максимальна где-то в центре группы.
 Если группы в соседних сканлайнах точно одна под другой, то ошибка не заметна,
 т.к. она на одном и том же экранном Y в соседних скан-лайнах. Если же ситуация
 с не строго вертикальными рёбрами, то в соседних скан-лайнах масимум ошибки на
 разных экранных Y. Можно исправить, если первую группу выбрать заканчивающейся
 в ближайшей позиции, где остаток от деления X на 8/16/... (длина группы).
 В принципе, можно и не исправлять, если не нужно качество или большое
 разрешение на экране, где смещения на 1 пиксел почти не заметны.
 
 Казалось бы, простой топик. Hе правда ли? :) Ан - нет, приколов тут порядочно.
 Если нужен вариант исходника на чистом си, могу запостить.
 
 http://alexfru.chat.ru
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 2 Questions   Michael Komm   18 May 2001 02:11:45 
 2 Questions   Alexei Frounze   21 May 2001 23:39:18 
 текстурирование (сырэц)   Yuri Burger   22 May 2001 21:04:01 
 текстурирование (сырэц)   Aleksey Malov   25 May 2001 02:01:00 
 Re: текстурирование (сырэц)   Serge Kanilo   25 May 2001 07:19:38 
 текстурирование (сырэц)   Alexei Frounze   25 May 2001 09:37:00 
Архивное /ru.algorithms/16679ee4ac8cc.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional