Render.ru

Формат WRL

Alenr

Пользователь сайта
Рейтинг
2
#1
Здравствуйте, Все.

Разбираюсь с форматом WRL. Файл экспортироват из 3DS Max.
Документации нет вобще, но в файле и так почти все понятно. Не могу тоько разобраться с углами поворота, тэг "rotation". Не подскажете как данные из файла из этого тэга преобразовать в углы в градусах (например которые были заданы в 3DS Max'е).
Или киньте ссылку на описание формата файла WRL.
 

Alenr

Пользователь сайта
Рейтинг
2
#2
Сделал я вместо glOrtho и gluLookAt - gluPerspective. Результат тотже.
 

Uri

Пользователь сайта
Рейтинг
2
#3
Очевидно надо видеть весь код - у меня же все работает, а так по одной команде догадаться нереально.

(а может у тебя OpenGL неправильный? ;)
 

Alenr

Пользователь сайта
Рейтинг
2
#4
> (а может у тебя OpenGL неправильный? ;)
У меня, который шол с Windows XP sp2.
 

Uri

Пользователь сайта
Рейтинг
2
#5
В общем заканчиваем - у меня эта функция работает нормально, так как у тебя игрушки идут (идут?), то и у тебя тоже.

Если твой код не работает - знать ничего не знаю и не ведаю. Тут либо видеть весь код, либо сам дальше разбирайся.
 

Uri

Пользователь сайта
Рейтинг
2
#6
Кстати, в твоем коде я разбираться тоже не намерен.
Всем спасибо.
 

Saplus 8804

Активный участник
Рейтинг
5
#8
А тебе принципиально поворачивать что-то в Нотепаде? Не проще это заделать визуально в том же Максе или Cosmo Worlds?
 

Alenr

Пользователь сайта
Рейтинг
2
#9
Я и делаю визуально в Максе, затем хочу срендерить эту картинку через OpenGL. Наиболее подходящий для себя вариант я подобрал: экспортировать сцену в WRL, и уже оттуда брать данные для вывода, и не могу разобраться с поворотом.
 

Saplus 8804

Активный участник
Рейтинг
5
#10
Я с VRML завязал года 4 назад... Помнится, там была дурацкая система, типа максовской Euler XYZ. Только с учетом того, что Z - это ось "глубины", а Y - высоты.
И трансформация ноды определялась путем сперва обозначения "по какой (каким) осям, и четвертое значение - как-раз "насколько" в радианах.
То есть, например:
0 0 1 3.14 - означало поворот на 180 градусов по Z. А вот когда по нескольким осям сразу - хоть убей не помню как высчитывал, когда ручками писал =)

Набей в яндексе VRML97 Specification - там усё написано ;)
 

Alenr

Пользователь сайта
Рейтинг
2
#12
Я понял, что в радианах. Но они там как-то очень странно хранятся. Если у примитива в 3DS Max'е установить углы x=90, y=1, z=0 и экспортировать его в wrl, в нем x=(неважно какое значение), но при этом y=z. Если в максе изменить 'x', в wrl меняются и'x' и'y' и 'z' и четверный параметр.
 

Alenr

Пользователь сайта
Рейтинг
2
#13
Везде, где, я что нашол по VRML, написано примерно как у тебя и пример приведен как у тебя, но ни где не расписано, то что ты не помнишь.
 
#14
Нет ничего проще - этот параметр очень красиво вписывается в OpenGL - glRotatef(v1, v2, v3, v4), где параметры - как раз соответствующие значения из rotation.
 

Alenr

Пользователь сайта
Рейтинг
2
#15
Я хотя недавно начал изучать OpenGL. Но точно могу сказать, что этот параметр вобще не вписывается в glRotatef, и даже не потому, что ты их перепутал местами и даже не потому, что в OpenGL нужно передавать градусы а не радианы - это все легко преобразовать и переставить. А потому что их вообще нет смысла передавать в glRotatef, потомы что значения осей он принимает либо -1, либо 0, либо 1.
 

Uri

Пользователь сайта
Рейтинг
2
#16
Обосновано, но неправильно.

1. Значения осей glRotatef принимает аж никак не -1, 0, или 1; а нормальный float. RTFM.
2. Да, с порядком переменных я немного наврал, первым, конечно же, идет угол поворота. Но это мелочь. А про радианы/градусы и сами знать были должны.
3. Я это не с неба взял - у меня так рисуется :)

Вот тебе подтверждения:
а) Кусок WRL файла из макса:
DEF Teapot01 Transform {
translation -3.615 -26.6 0
rotation -0.8792 -0.4477 -0.163 -0.785
children [
б) Код, который поворачивает
glRotatef((*subsystem)->rotation.w* 57.295f,
(*subsystem)->rotation.x* 57.295f,
(*subsystem)->rotation.y* 57.295f,
(*subsystem)->rotation.z* 57.295f);
в) Дебажное окно
http://dpr.unirep.ru/temp/debug.jpg
г) Скрин из макса
http://dpr.unirep.ru/temp/max.jpg
д) Мой скрин
http://dpr.unirep.ru/temp/my.jpg

И кто из нас неправ? ;)

P.P.S. Ссылки проживут недолго. Уж звиняйте. Если скажете где их можно выложить "на подольше" - перелью.
 

Alenr

Пользователь сайта
Рейтинг
2
#17
Возможно я погорячился, снова проверю.

А что за число 57.295f?
И что означает а на конце? У звиняйте если вопрос ламерский, просто с "С" я мало знаком.
 

Uri

Пользователь сайта
Рейтинг
2
#18
57.295f = (float) (180 / 3.1415);
"а"? Может "f"? Это указание, что константа float, а не double.
 

Alenr

Пользователь сайта
Рейтинг
2
#19
Не знаю, может нужно что-нибудь настраивать в OpenGL, но у меня строки
glRotatef(90, 0, 0, 0.01);
и
glRotatef(90, 0, 0, 1);
воздействуют на модель абсолютно одинаково.
 
Сверху