Всем доброе время суток. Относительно недавно начал меня мучать вопрос о передвижении объектов в 3Д сцене. Пытаюсь засунуть движок в длл, и вот дошел до парсера моделей, модельки будут отрисовываться по частям, тобиш помешно для применения различных эффектов к разным частям модельки. Выводится всё это через ессесвено ВБО. Так воД, насколько я понимаю чтоб двигать объект в 3Д сцене(не камеру! например: бегЁт на тебя вражина-зомби) нужно ко всем соответсвующим координатам объекта прибавить какое либо число, например зомбик прыгает, то прибавлям там 5 к Y, падает то -5 и т.д. а затем изменяем ВБО скажем с помощью glBufferSubDataARB и отправляем на рендер. Анимация не имеет значение т.к. планирую применять костлявую через шедеры. Хочу спросить правильная ли это будет реализация или плохой из меня гуглист, может с бубном мало танцевал?
_vi_ Вот молодеж пошла... Что такое VBO и скелетная анимация на шейдерах они знают, а элементарные понятия, которые 10 лет назад каждый 12-ти летний демосценер знал - нет. Стыдно! Нет никакой камеры, нет никакого перемещения объектов. Есть координаты и матрицы трансформации. Для начала нужно понять это, а только потом уже говорить Так воД, насколько я понимаю чтоб двигать объект в 3Д сцене(не камеру!... Почитай что такое матрицы трансформации, как они работают, как участвуют в рендере и как "человеческие понятия" типа position/rotation/scale преобразуются в матрицы.
_DEN_ Вопрос почему это так? Может потому-что книг про высокоуровневое API валом, а про самою суть большая редкость. И те что есть в основном на english, которые понимать в такой непростой области сложно. _vi_ Хорошие книжки в помощь. Андре Ламот "Программирование игр в Windows" - описывается создание програмного игрового движка. 3D графика без аппаратных API. Не Doom, но тоже не плохо. Очень советую для просветления. Ещё например Михаил Фленов "Искусство программирования игр в Windows", DirectX. Вообще советую почитать вначале книги про игровые движки, а также поюзать готовые. А уже потом быть может что-то и своё сделать. Имхо основная проблема в архитектуре двига, её очень сложно самому придумать не имея навыков. Так что читаем, читаем и ещё раз читаем. З.Ы Неужели ты умеешь скелетку делать на шейдерах, не владея матрицами трансформаций?
енто мы знаем, и давно просто не удачно выразился, в первой же статье которую читал про опен - в не на это большой акцен был - не умею, но литературу соответсвующую нашел. в частности на степс3д - да да - будем искать, спасибо и за матрицы спасибо, а то бы я щас в дебри залез. Насчет архитектуры есть хорошая серия статеек http://www.gamedev.ru/articles/?sect=7
_vi_ Я хоть и уважаю Gamedev, но имхо статьи эти сплошная демагогия. Лучше взять нормальную книгу. В тех что я перечислил, предельно конкретно описаны этапы игрового двига. Статьи это так, на досуге почитать, а стремиться нужно к фундаментальным знаниям. Например Ламот - 1400 страниц, ну какие статьи сравняться с эти монументальным полотном, и там всё очень подробно разжёвано, понимание приходит очень легко. Уважаю Александра Борескова. Но его книга "Графика трехмерной компьютерной игры на основе OPENGL", по-мойму слабовата. А так респект автору. Если увижу книгу "Компьютерная графика. Полигональные модели." обязательно куплю, тем более что отзывы о ней положительные.
_vi_ С геймдевом не торопись, а то разучишся не только программировать графику, но и программировать в принципе ))) Начни с основных понятий. Сразу же браться писать движог - занятие неблагодарное и практически бессмысленное. Конечно, если у тебя очень много свободного времени и ты готов "клепать" движки каждый месяц, то вперед
_DEN_ Всё верно, вначале нужно накапливать массу знаний, туторы делать, демо и т.д. А уж потом как эта масса перейдёт в критическую... Ещё очень важна математическая подготовка, без неё никак.
У меня тож пару книг было в пдф гдето - но кудато пропали они, оч хотелось бы книжку одну найти но ксожалению название я ее забыл, что значительно затрудняет поиск, есть только содержание и пару глав в пдф - там все есть вплоть до игровой консоли как делать=( Ну а по сути - незная про эти матрицы, невольно вводиш в гугл "перемещение объектов OpenGL" и одно из первых что находится как раз вот эта наша тема - так что я надеюсь, что она поможет не только мне =) Насчет математики норм - на экзаменах в школе был высоки балл, да же еще успел двум челам помоч, в обмен на помощь по истории =) также имеется краткий курс высшей математики - логика, матрицы, комплексные числа и т.д. (птушный конечно, но всеже)
вот очень интересна цитата: "Стать хакером очень просто. Достаточно выучить и понять: математические дисциплины (математический анализ, теорию функций комплексного переменного, алгебру, геометрию, теорию вероятностей, математическую статистику, математическую логику и дискретную математику...)". Борис Леонтьев "Хакеры & Internet". Помоему к гейм мейкерам она тоже относится =)
_DEN_ Ну а куда ж без неё -). Вообще мне кажется что начинать программировать на OpenGL конечно хорошо, но как-то это размягчает мозг. Директ в этом плане поучительней будет, ведь там с матрицами сразу имеешь дело. А лучше вообще без API. _vi_ Советую всё же скачать Ламота, благо в сети эта книга есть в электронном виде. В бумаге уже сложно достать, староватое издание. Там все эти выкрутасы с матрицами хорошо описаны. Думаю эта книга даст любому неплохой фундамент знаний по 3D. А что касаемо твоего случая. То тут IMHO неплохо организовать объект или структуру с необходимыми данными: VBO, мировая матрица трансформации, ещё чего-нибуть там. И либо метод объекта или функция которая принимает указатель на структуру, должна отрисовать его с учётом соответствующей матрицы. А другая функция или метод ответсвенна за изменение этой матрицы. ООП принципы однако.
воооов то что надо: только по беглому просмотру уже выглядит круто http://www.proklondike.com/contentview.php?content=266 Всем спасибо, как всегда помогли.
Блин во я тупеть, оказывается все проще пареной репы: банально ... рисуем сцену... 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(); ой мааать роди меня обратно=)
не подкавыривай =) OpenGL - это он самый и есть. а АК-47 тоже - патроны ведь кончатся=) но состояния у него всего 3=) предохранитель - длинная очередь - короткая очередь =) поготь поготь понял к чему клонишь - такой подход для каждого объекта жирно будет?
_vi_ Я балдею. Знаешь о VBO, но не знаешь о glRotatef. Я такое и предположить не мог. Да, google до добра не доводит -). Просто обычно для объектов применяют тот подход который я описал, с инкапсуляцией мировой матрицы. Ты над этой матрицей извращаешся как хочешь (вращением, перемещением, маштабированием, и так много раз сколько душе угодно). А дело объекта просто нарисоваться с применением данной матрицы. Не хранить же все эти углы, перемещения в объекте.
glRotatef просто для проверки, а насчет вбо =) думается так сначала как вывести получше и побыытрей а уж потом как двигать=)
_vi_ Нет, я клоню не к этому. Я клоню вот к чему. OpenGL это, как ты правильно подметил, автомат с конечным числом состояний. Что это значит? Это значит, что OpenGL имеет некоторый набор состояний И еще это значит, что когда ты рендеришь меш, он рендерица в некотором смысле способом, зависящим от текущего состояния. Т.е. рендер отдельно, состояния отдельно. Установили состояние, отрендерели. Поменяли состояние, снова отрендерели. Т.е. имеем два понятия: "Что мы рендерим" и "Как мы рендерим". В "Как мы рендерим" относятся и положение объекта, и его текстура и его цвет, и его освещение и его шейдер и т.д. Улавливаешь? PS. Такой подход для каждого объекта не жирно. Вот только все риальные пацаны юзают только одну функцию для работы с матрицами - glLoadMatrix. Все матричные операции делаются либо на проце, либо на шейдере. Но об этом пока что наверно рановато...)