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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alexei Frounze                       2:5020/400     21 May 2001  23:39:18
 To : Michael Komm
 Subject : 2 Questions
 -------------------------------------------------------------------------------- 
 
 Fri May 18 2001 02:11, Michael Komm wrote to All:
 
  MK> 1) Hарод! Поморите с текстуремаппином разобраться - всего-то нужно -
  MK>    есть текстура размером tsx на tsy, есть некотрая 4-угольная фигура с 
  MK> координатами вершин в экранных координатах, по какому принципу текстуру 
  MK> накладывают? 
 
 Батенька, это ведь просто почти как 2х2. Если ты знаешь геометрию (особенно
 что касается всяких векторов в пространстве) и можешь решать системы линейных
 уравнений, то вывести всю это штуку можно всего за час-другой никуда не
 торопясь...
 
 Вот тебе готовое решение:
 
 --------8<-------
 Перспективно-верное текстурирование
 Текстурирование прямоугольных областей
 
 Вектор P указывает на вершину прямоугольника, расположенного в игровом
 пространстве. Этой вершине соответствует левый верхний угол накладываемой на
 прямоугольник текстуры. Вектора M и N - это направляющие вектора данного
 прямоугольника в том же трёхмерном игровом пространстве. Исходят эти вектора
 из вершины, в которую указывает вектор P. Вектор M соответствует
 горизонтальной оси текстуры, а вектор N - вертикальной.
 Соответствие точки экранной проекции прямоугольника точке текстуры
 
 Введём три дополнительных вектора:
 
 ->   ->   ->
 
 MN = M x N
 
 ->   ->   ->
 
 NP = N x P
 
 ->   ->   ->
 
 PM = P x M
 
 D  = MN.Z*K + X_Screen * MN.X + Y_Screen * MN.Y
 Du = NP.Z*K + X_Screen * NP.X + Y_Screen * NP.Y
 Dv = PM.Z*K + X_Screen * PM.X + Y_Screen * PM.Y
 
 u = Du / D
 v = Dv / D
 
 Где X_Screen и Y_Screen - экранные координаты точки, а K - коэффициент
 пропорциональности при преобразовании трёхмерных мировых координат в
 двухмерные координаты экранной проекции (для K часто выбирают число равное 256
 в режиме 320x200x256 (VGA 13h), а для режима 640x400x256 (SVGA 100h) уже нужно
 брать значение 512):
 X_Screen = K * X_World / Z_World
 Y_Screen = K * Y_World / Z_World
 
 А u и v - горизонтальное и вертикальное смещения точки в самой текстуре. u и
 v, вычисленные по этим формулам, попадают в числовой диапазон от нуля до
 единицы.
 
 Примечание: в этом документе предполагается, что экран имеет точку (0,0) в
 своём центре и нуль системы координат трёхмерного игрового пространства так же
 совпадает с этой точкой. Z возрастает в направлении удаления от пользователя -
 вглубь экрана.
 1999 Алексей Фрунзе.
 --------8<-------
 
 Можно не выводить те формулы, а заметить, что отношения u/z, v/z и 1/z вдоль
 экранной проекции любой прямой пространства есть линейные ф-ции экранных
 координат. Тогда можно для любой стороны многоугольника в пространстве
 вычислить эти три отношения в каждом конце стороны (вершине многоугольника) а
 дальше линейно интерполировать их вдоль проекции на экран. В каждой точке
 проекции тогда u = (u/z)/(1/z) и v = (v/z)/(1/z).
 Больше деталей тут:
 http://www.lysator.liu.se/~mikaelk/doc/perspectivetexture/
 
 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/16679cd30d0e7.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional