1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Формат WRL

Тема в разделе "Графика в играх", создана пользователем Alenr, 8 сен 2005.

Модераторы: Артер
  1. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте, Все.

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

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Сделал я вместо glOrtho и gluLookAt - gluPerspective. Результат тотже.
     
  3. Uri

    Uri Пользователь сайта

    С нами с:
    20.09.2005
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    2
    Очевидно надо видеть весь код - у меня же все работает, а так по одной команде догадаться нереально.

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

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    > (а может у тебя OpenGL неправильный? ;)
    У меня, который шол с Windows XP sp2.
     
  5. Uri

    Uri Пользователь сайта

    С нами с:
    20.09.2005
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    2
    В общем заканчиваем - у меня эта функция работает нормально, так как у тебя игрушки идут (идут?), то и у тебя тоже.

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

    Uri Пользователь сайта

    С нами с:
    20.09.2005
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    2
    Кстати, в твоем коде я разбираться тоже не намерен.
    Всем спасибо.
     
  7. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Спасибо и на этом.
    Буду разбираться.
     
  8. Saplus 8804

    Saplus 8804 Активный участник

    С нами с:
    05.09.2005
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    5
    А тебе принципиально поворачивать что-то в Нотепаде? Не проще это заделать визуально в том же Максе или Cosmo Worlds?
     
  9. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Я и делаю визуально в Максе, затем хочу срендерить эту картинку через OpenGL. Наиболее подходящий для себя вариант я подобрал: экспортировать сцену в WRL, и уже оттуда брать данные для вывода, и не могу разобраться с поворотом.
     
  10. Saplus 8804

    Saplus 8804 Активный участник

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

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

    Saplus 8804 Активный участник

    С нами с:
    05.09.2005
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    5
    в VRML значения угла в радианах...
     
  12. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Я понял, что в радианах. Но они там как-то очень странно хранятся. Если у примитива в 3DS Max'е установить углы x=90, y=1, z=0 и экспортировать его в wrl, в нем x=(неважно какое значение), но при этом y=z. Если в максе изменить 'x', в wrl меняются и'x' и'y' и 'z' и четверный параметр.
     
  13. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Везде, где, я что нашол по VRML, написано примерно как у тебя и пример приведен как у тебя, но ни где не расписано, то что ты не помнишь.
     
  14. Guest

    Нет ничего проще - этот параметр очень красиво вписывается в OpenGL - glRotatef(v1, v2, v3, v4), где параметры - как раз соответствующие значения из rotation.
     
  15. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Я хотя недавно начал изучать OpenGL. Но точно могу сказать, что этот параметр вобще не вписывается в glRotatef, и даже не потому, что ты их перепутал местами и даже не потому, что в OpenGL нужно передавать градусы а не радианы - это все легко преобразовать и переставить. А потому что их вообще нет смысла передавать в glRotatef, потомы что значения осей он принимает либо -1, либо 0, либо 1.
     
  16. Uri

    Uri Пользователь сайта

    С нами с:
    20.09.2005
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    2
    Обосновано, но неправильно.

    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. Ссылки проживут недолго. Уж звиняйте. Если скажете где их можно выложить "на подольше" - перелью.
     
  17. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Возможно я погорячился, снова проверю.

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

    Uri Пользователь сайта

    С нами с:
    20.09.2005
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    2
    57.295f = (float) (180 / 3.1415);
    "а"? Может "f"? Это указание, что константа float, а не double.
     
  19. Alenr

    Alenr Пользователь сайта

    С нами с:
    08.09.2005
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Не знаю, может нужно что-нибудь настраивать в OpenGL, но у меня строки
    glRotatef(90, 0, 0, 0.01);
    и
    glRotatef(90, 0, 0, 1);
    воздействуют на модель абсолютно одинаково.
     
  20. Uri

    Uri Пользователь сайта

    С нами с:
    20.09.2005
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    2
    А как настраивал вьюпорт?
     
Модераторы: Артер

Поделиться этой страницей