Как мне наложить текстуру на октаэдр? - PullRequest
1 голос
/ 13 июня 2010

Я собираюсь сойти с ума. Я не могу на всю жизнь выяснить координаты текстуры. У меня есть октаэдр, определенный 8 треугольниками ниже. Я хочу нанести на нее текстуру земли. Смотрите текстуру здесь: http://img37.imageshack.us/f/earthmap1k.jpg/

Мне бы хотелось, чтобы северный полюс в верхней точке и южный полюс в противоположной точке с экватором, обернутым вокруг центральной точки. Может кто-нибудь показать мне UV для каждой точки, чтобы нанести на карту текстуру, пожалуйста?

 0,  0,  1
 1, -1,  0
 1,  1,  0

-1,  1,  0
 0,  0,  1
 1,  1,  0

 0,  0,  1
-1,  1,  0
-1, -1,  0

 1, -1,  0
 0,  0,  1
-1, -1,  0

 1, -1,  0
 0,  0, -1
 1,  1,  0

 0,  0, -1
-1,  1,  0
 1,  1,  0

 0,  0, -1
-1, -1,  0
-1,  1,  0

 0,  0, -1
 1, -1,  0
-1, -1,  0

Ответы [ 2 ]

0 голосов
/ 13 июня 2010

Я не уверен, что вы подразумеваете под ультрафиолетом, но каждая грань октаэдра будет соответствовать прямоугольной области карты. Это будет включать растяжение и сжатие, но не обрезку, не пропуская места.

Начните с разделения карты на два прямоугольника, Север и Юг. Теперь сделайте три разреза с севера на юг, разрезая карту на 8 равных прямоугольников. Верхний левый прямоугольник содержит западную половину Северной Америки, восточную половину северной части Тихого океана и Гавайи. Давайте сопоставим это с первым описанным вами треугольником.

Если мы поместим систему координат в прямоугольник, начиная от (0,0) (центральная часть Тихого океана на экваторе) до (1,0) (где-то около Эквадора) и до (0,1) и (1,1) (оба - Северный полюс) тогда мы можем сопоставить его с октаэдром следующим образом:

(s,t) -> (1-t, (1-t)(2t-1), t)

Должно быть понятно, как то же самое для других лиц.

0 голосов
/ 13 июня 2010

простой способ подумать об этом - развернуть ваш октаэдр так:

   /\     /\     /\     /\   
  /  \   /  \   /  \   /  \  
 /    \ /    \ /    \ /    \ 
X------X------X------X------X
 \    / \    / \    / \    / 
  \  /   \  /   \  /   \  /  
   \/     \/     \/     \/

тогда вы можете просто сопоставить точки на плоскости с координатами текстуры

...