Перемещение обектов OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем _vi_, 14 дек 2007.

  1. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
    Всем доброе время суток. Относительно недавно начал меня мучать вопрос о передвижении объектов в 3Д сцене. Пытаюсь засунуть движок в длл, и вот дошел до парсера моделей, модельки будут отрисовываться по частям, тобиш помешно для применения различных эффектов к разным частям модельки. Выводится всё это через ессесвено ВБО.
    Так воД, насколько я понимаю чтоб двигать объект в 3Д сцене(не камеру! например: бегЁт на тебя вражина-зомби) нужно ко всем соответсвующим координатам объекта прибавить какое либо число, например зомбик прыгает, то прибавлям там 5 к Y, падает то -5 и т.д. а затем изменяем ВБО скажем с помощью glBufferSubDataARB и отправляем на рендер. Анимация не имеет значение т.к. планирую применять костлявую через шедеры. Хочу спросить правильная ли это будет реализация или плохой из меня гуглист, может с бубном мало танцевал?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    _vi_

    Вот молодеж пошла... Что такое VBO и скелетная анимация на шейдерах они знают, а элементарные понятия, которые 10 лет назад каждый 12-ти летний демосценер знал - нет. Стыдно!

    Нет никакой камеры, нет никакого перемещения объектов. Есть координаты и матрицы трансформации. Для начала нужно понять это, а только потом уже говорить Так воД, насколько я понимаю чтоб двигать объект в 3Д сцене(не камеру!...

    Почитай что такое матрицы трансформации, как они работают, как участвуют в рендере и как "человеческие понятия" типа position/rotation/scale преобразуются в матрицы.
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Вопрос почему это так? Может потому-что книг про высокоуровневое API валом, а про самою суть большая редкость. И те что есть в основном на english, которые понимать в такой непростой области сложно.
    _vi_
    Хорошие книжки в помощь. Андре Ламот "Программирование игр в Windows" - описывается создание програмного игрового движка. 3D графика без аппаратных API. Не Doom, но тоже не плохо. Очень советую для просветления.
    Ещё например Михаил Фленов "Искусство программирования игр в Windows", DirectX. Вообще советую почитать вначале книги про игровые движки, а также поюзать готовые. А уже потом быть может что-то и своё сделать. Имхо основная проблема в архитектуре двига, её очень сложно самому придумать не имея навыков. Так что читаем, читаем и ещё раз читаем.
    З.Ы Неужели ты умеешь скелетку делать на шейдерах, не владея матрицами трансформаций?
     
  4. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
    енто мы знаем, и давно просто не удачно выразился, в первой же статье которую читал про опен - в не на это большой акцен был
    - не умею, но литературу соответсвующую нашел. в частности на степс3д
    - да да - будем искать, спасибо
    и за матрицы спасибо, а то бы я щас в дебри залез.
    Насчет архитектуры есть хорошая серия статеек http://www.gamedev.ru/articles/?sect=7
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _vi_
    Я хоть и уважаю Gamedev, но имхо статьи эти сплошная демагогия. Лучше взять нормальную книгу. В тех что я перечислил, предельно конкретно описаны этапы игрового двига. Статьи это так, на досуге почитать, а стремиться нужно к фундаментальным знаниям. Например Ламот - 1400 страниц, ну какие статьи сравняться с эти монументальным полотном, и там всё очень подробно разжёвано, понимание приходит очень легко.
    Уважаю Александра Борескова. Но его книга "Графика трехмерной компьютерной игры на основе OPENGL", по-мойму слабовата. А так респект автору. Если увижу книгу "Компьютерная графика. Полигональные модели." обязательно куплю, тем более что отзывы о ней положительные.
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    _vi_

    С геймдевом не торопись, а то разучишся не только программировать графику, но и программировать в принципе )))
    Начни с основных понятий. Сразу же браться писать движог - занятие неблагодарное и практически бессмысленное.

    Конечно, если у тебя очень много свободного времени и ты готов "клепать" движки каждый месяц, то вперед :)
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Всё верно, вначале нужно накапливать массу знаний, туторы делать, демо и т.д. А уж потом как эта масса перейдёт в критическую... Ещё очень важна математическая подготовка, без неё никак.
     
  8. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
    У меня тож пару книг было в пдф гдето - но кудато пропали они, оч хотелось бы книжку одну найти но ксожалению название я ее забыл, что значительно затрудняет поиск, есть только содержание и пару глав в пдф - там все есть вплоть до игровой консоли как делать=(
    Ну а по сути - незная про эти матрицы, невольно вводиш в гугл "перемещение объектов OpenGL" и одно из первых что находится как раз вот эта наша тема - так что я надеюсь, что она поможет не только мне =)

    Насчет математики норм - на экзаменах в школе был высоки балл, да же еще успел двум челам помоч, в обмен на помощь по истории =) также имеется краткий курс высшей математики - логика, матрицы, комплексные числа и т.д. (птушный конечно, но всеже)
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Ага, линейная алгебра и аналитическая геометрия за первый курс универа - самое то.
     
  10. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
    вот очень интересна цитата:
    "Стать хакером очень просто. Достаточно выучить и понять: математические дисциплины (математический анализ, теорию функций комплексного переменного, алгебру, геометрию, теорию вероятностей, математическую статистику, математическую логику и дискретную математику...)".
    Борис Леонтьев "Хакеры & Internet".

    Помоему к гейм мейкерам она тоже относится =)
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Ну а куда ж без неё -). Вообще мне кажется что начинать программировать на OpenGL конечно хорошо, но как-то это размягчает мозг. Директ в этом плане поучительней будет, ведь там с матрицами сразу имеешь дело. А лучше вообще без API.
    _vi_
    Советую всё же скачать Ламота, благо в сети эта книга есть в электронном виде. В бумаге уже сложно достать, староватое издание. Там все эти выкрутасы с матрицами хорошо описаны. Думаю эта книга даст любому неплохой фундамент знаний по 3D.
    А что касаемо твоего случая. То тут IMHO неплохо организовать объект или структуру с необходимыми данными: VBO, мировая матрица трансформации, ещё чего-нибуть там. И либо метод объекта или функция которая принимает указатель на структуру, должна отрисовать его с учётом соответствующей матрицы. А другая функция или метод ответсвенна за изменение этой матрицы. ООП принципы однако.
     
  12. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
  13. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
    Блин во я тупеть, оказывается все проще пареной репы: банально

    ... рисуем сцену...
    m_fAngle = m_fAngle + 5.0f;
    glPushMatrix();
    glRotatef(m_fAngle, 0.0f, 0.0f, 1.0f);
    glRectf(-0.5f, 0.5, 0.5f, -0.5f);
    glPopMatrix();

    ой мааать роди меня обратно=)
     
  14. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    _vi_

    Ты знаешь что такое "автомат с конечным числом состояний"? (АК-47 не в счет).
     
  15. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
    не подкавыривай =) OpenGL - это он самый и есть. а АК-47 тоже - патроны ведь кончатся=) но состояния у него всего 3=) предохранитель - длинная очередь - короткая очередь =)


    поготь поготь понял к чему клонишь - такой подход для каждого объекта жирно будет?
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _vi_
    Я балдею. Знаешь о VBO, но не знаешь о glRotatef. Я такое и предположить не мог.
    Да, google до добра не доводит -).
    Просто обычно для объектов применяют тот подход который я описал, с инкапсуляцией мировой матрицы. Ты над этой матрицей извращаешся как хочешь (вращением, перемещением, маштабированием, и так много раз сколько душе угодно). А дело объекта просто нарисоваться с применением данной матрицы. Не хранить же все эти углы, перемещения в объекте.
     
  17. _vi_

    _vi_ Денис

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    48
    glRotatef просто для проверки, а насчет вбо =) думается так сначала как вывести получше и побыытрей а уж потом как двигать=)
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    _vi_

    Нет, я клоню не к этому.

    Я клоню вот к чему. OpenGL это, как ты правильно подметил, автомат с конечным числом состояний. Что это значит? Это значит, что OpenGL имеет некоторый набор состояний :) И еще это значит, что когда ты рендеришь меш, он рендерица в некотором смысле способом, зависящим от текущего состояния. Т.е. рендер отдельно, состояния отдельно. Установили состояние, отрендерели. Поменяли состояние, снова отрендерели. Т.е. имеем два понятия: "Что мы рендерим" и "Как мы рендерим". В "Как мы рендерим" относятся и положение объекта, и его текстура и его цвет, и его освещение и его шейдер и т.д.
    Улавливаешь? :)

    PS. Такой подход для каждого объекта не жирно. Вот только все риальные пацаны юзают только одну функцию для работы с матрицами - glLoadMatrix. Все матричные операции делаются либо на проце, либо на шейдере. Но об этом пока что наверно рановато...)