|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/16679cd30d0e7.html, оценка из 5, голосов 10
|