Render.ru

Преобразование координат в 3D MAX.

x5reunion

Пользователь сайта
Рейтинг
2
#1
Всем привет я далек от 3D дизайна, я занимаюсь программированием. Моя задача перетащить модель из 3D Max в DirectX.

Заранее извиняюсь если слишком большой текст я не нашел опции скрыть код, или вопрос не в тот раздел. Просто я не знаю у кого еще спросить.

У меня вопрос. Я нашел ед пример для obj формата и то из Майи.

Как вот это?

Код:
mtllib cube.mtl
g default
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.998008 0.998008
vt 0.001992 0.998008
vt 0.998008 0.001992
vt 0.001992 0.001992
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
s 1
g pCube1
usemtl file1SG
f 1/1/1 2/2/2 3/3/3
f 3/3/3 2/2/2 4/4/4
s 2
f 3/13/5 4/14/6 5/15/7
f 5/15/7 4/14/6 6/16/8
s 3
f 5/21/9 6/22/10 7/23/11
f 7/23/11 6/22/10 8/24/12
s 4
f 7/17/13 8/18/14 1/19/15
f 1/19/15 8/18/14 2/20/16
s 5
f 2/5/17 8/6/18 4/7/19
f 4/7/19 8/6/18 6/8/20
s 6
f 7/9/21 1/10/22 5/11/23
f 5/11/23 1/10/22 3/12/24

Преобразовать вот в это?

Код:
Vertex Count: 36

Data:

-0.5 0.5 -0.5 0.001992 0.00199199 0 0 -1
0.5 -0.5 -0.5 0.998008 0.998008 0 0 -1
-0.5 -0.5 -0.5 0.001992 0.998008 0 0 -1
0.5 0.5 -0.5 0.998008 0.00199199 0 0 -1
0.5 -0.5 -0.5 0.998008 0.998008 0 0 -1
-0.5 0.5 -0.5 0.001992 0.00199199 0 0 -1
-0.5 0.5 0.5 0.001992 0.00199199 0 1 -0
0.5 0.5 -0.5 0.998008 0.998008 0 1 -0
-0.5 0.5 -0.5 0.001992 0.998008 0 1 -0
0.5 0.5 0.5 0.998008 0.00199199 0 1 -0
0.5 0.5 -0.5 0.998008 0.998008 0 1 -0
-0.5 0.5 0.5 0.001992 0.00199199 0 1 -0
-0.5 -0.5 0.5 0.998008 0.998008 0 0 1
0.5 0.5 0.5 0.001992 0.00199199 0 0 1
-0.5 0.5 0.5 0.998008 0.00199199 0 0 1
0.5 -0.5 0.5 0.001992 0.998008 0 0 1
0.5 0.5 0.5 0.001992 0.00199199 0 0 1
-0.5 -0.5 0.5 0.998008 0.998008 0 0 1
-0.5 -0.5 -0.5 0.001992 0.00199199 0 -1 -0
0.5 -0.5 0.5 0.998008 0.998008 0 -1 -0
-0.5 -0.5 0.5 0.001992 0.998008 0 -1 -0
0.5 -0.5 -0.5 0.998008 0.00199199 0 -1 -0
0.5 -0.5 0.5 0.998008 0.998008 0 -1 -0
-0.5 -0.5 -0.5 0.001992 0.00199199 0 -1 -0
0.5 0.5 -0.5 0.001992 0.00199199 1 0 -0
0.5 -0.5 0.5 0.998008 0.998008 1 0 -0
0.5 -0.5 -0.5 0.001992 0.998008 1 0 -0
0.5 0.5 0.5 0.998008 0.00199199 1 0 -0
0.5 -0.5 0.5 0.998008 0.998008 1 0 -0
0.5 0.5 -0.5 0.001992 0.00199199 1 0 -0
-0.5 0.5 0.5 0.001992 0.00199199 -1 0 -0
-0.5 -0.5 -0.5 0.998008 0.998008 -1 0 -0
-0.5 -0.5 0.5 0.001992 0.998008 -1 0 -0
-0.5 0.5 -0.5 0.998008 0.00199199 -1 0 -0
-0.5 -0.5 -0.5 0.998008 0.998008 -1 0 -0
-0.5 0.5 0.5 0.001992 0.00199199 -1 0 -0
Как все это объединить?

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


Аналогично у меня есть модель куба из 3D Max.

Код:
v  -0.5000 0.0000 0.5000
v  -0.5000 0.0000 -0.5000
v  0.5000 0.0000 -0.5000
v  0.5000 0.0000 0.5000
v  -0.5000 1.0000 0.5000
v  0.5000 1.0000 0.5000
v  0.5000 1.0000 -0.5000
v  -0.5000 1.0000 -0.5000
# 8 vertices

vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 -0.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
vn -1.0000 0.0000 -0.0000
# 6 vertex normals

vt 0.3393 0.6607 0.0000
vt 0.3393 0.3393 0.0000
vt 0.6607 0.3393 0.0000
vt 0.6607 0.6607 0.0000
vt 0.0100 0.6686 0.0000
vt 0.3314 0.6686 0.0000
vt 0.3314 0.9900 0.0000
vt 0.0100 0.9900 0.0000
vt 0.3393 0.0100 0.0000
vt 0.6607 0.0100 0.0000
vt 0.6607 0.3314 0.0000
vt 0.3393 0.3314 0.0000
vt 0.6686 0.0100 0.0000
vt 0.9900 0.0100 0.0000
vt 0.9900 0.3314 0.0000
vt 0.6686 0.3314 0.0000
vt 0.0100 0.3393 0.0000
vt 0.3314 0.3393 0.0000
vt 0.3314 0.6607 0.0000
vt 0.0100 0.6607 0.0000
vt 0.0100 0.0100 0.0000
vt 0.3314 0.0100 0.0000
vt 0.3314 0.3314 0.0000
vt 0.0100 0.3314 0.0000
# 24 texture coords

g Box003
usemtl Material__25
f 1/1/1 2/2/1 3/3/1 
f 3/3/1 4/4/1 1/1/1 
f 5/5/2 6/6/2 7/7/2 
f 7/7/2 8/8/2 5/5/2 
f 1/9/3 4/10/3 6/11/3 
f 6/11/3 5/12/3 1/9/3 
f 4/13/4 3/14/4 7/15/4 
f 7/15/4 6/16/4 4/13/4 
f 3/17/5 2/18/5 8/19/5 
f 8/19/5 7/20/5 3/17/5 
f 2/21/6 1/22/6 5/23/6 
f 5/23/6 8/24/6 2/21/6 
# 12 faces
Я знаю какие буквы что обозначают, допустим

f 1/1/1 2/2/1 3/3/1
Vertex[1] - > texture[1] -> normals[1] ; Vertex[2] - > texture[2] -> normals[2] ; Vertex[3] - > texture[3] -> normals[3] ;

Обратил внимание что в майе идет сперва

v -0.500000 -0.500000 0.500000
/.....
vt 0.001992 0.001992
/....
vn 0.000000 0.000000 1.000000

А в максе

v -0.5000 0.0000 0.5000
/....
vn 0.0000 -1.0000 -0.0000
/....
vt 0.3393 0.6607 0.0000

Значит ли это что и идут в другом порядке? f 1/1/1 2/2/1 3/3/1
 

x5reunion

Пользователь сайта
Рейтинг
2
#2
Я разобрался частично с проблемой.

Оказывается

v -0.5000 0.0000 0.5000 = 1
v -0.5000 0.0000 -0.5000 = 2
v 0.5000 0.0000 -0.5000 = 3
v 0.5000 0.0000 0.5000 и т.д
/*****
****/
# 8 vertices


vn 0.0000 -1.0000 -0.0000 = 1
vn 0.0000 1.0000 -0.0000 = 2
vn 0.0000 0.0000 1.0000 = 3
/**** и т.д
****/
# 6 vertex normals


vt 0.3393 0.6607 0.0000 = 1
vt 0.3393 0.3393 0.0000 = 2
vt 0.6607 0.3393 0.0000 = 3
/****
****/
# 24 texture coords


Соответствует количеству face. И никогда не будет превышать максимальную цифру.


Тоесть запись
f 1/1/1 2/2/1 3/3/1
/****
****/
# 12 faces

напомню что это

Vertex[1] - > texture[1] -> normals[1] ; Vertex[2] - > texture[2] -> normals[2] ; Vertex[3] - > texture[3] -> normals[3] ;

Сообщает редактору

v -0.5000 0.0000 0.5000; vt 0.3393 0.6607 0.0000; vn 0.0000 -1.0000 -0.0000; v -0.5000 0.0000 -0.5000; vt 0.3393 0.3393 0.0000; vn 0.0000 -1.0000 -0.0000; и т.д

Единственное у меня некоторые текстуры на кубе получаются расположены не в ту сторону как в 3D Max но больше они не плывут. Есть подозрение что из за того что треугольники строятся по часовой стрелке надо брать обратный отсчет face.
 

x5reunion

Пользователь сайта
Рейтинг
2
#3
Я полностью разобрался в чем была проблема и почему текстуры были перевернуты.

Оказывается их надо приводить к отрицательным значениям тоесть если есть

vt 0.3393 0.6607 0.0000 = 1 то будет vt -(0.3393) -(0.6607) -(0.0000) = 1

Не знаю кто это придумал и зачем это нужно но факт.

Всем спасибо кто хотябы прочитал эту тему.

 

dsmok

Активный участник
Рейтинг
7
#4
Очень хорошо что разобрались!
к сожалению поздно, но тем не менее:
в МАХе пространственные координаты сделаны слегка через попу. тем кто сразу работает в максе - нормально, а вот остальным...
Обычно ось Х это длина, У-высота а Z-глубина, Так вот в максе всё несколько иначе. В связи с чем возникают проблемы с импортом-экспортом...
 
Сверху