![]() |
|
Модераторы: Rickert |
![]()
|
|
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Фуф.
Тяжело переходить от программирования в ответ на события системы к программированию игр. Че-то я никак в толк не возьму Может кто-то обьяснить или дать ссылку-как происходит это игроделанье? Проблема вот в чем-я никак не могу уложить в голове -как можно всю более менее нормальную игру уложить в одну отрисовку в главном окне? Ну вот к примеру, есть сценку с чем-то летающим прыгающим. Это понятно. Можно рисовать обьекты, и взависимости от действий пользователя либо по времени просто менять координаты, на которых основывается данная сценка. Но вот как быть в играх. Ведь сценка все равно циклична, рано или поздно. А вот игра ж-она прямолинейна? Вот непонятна ситуация. Допустим есть отрисованая территория (ландшафт). Я иду по ней. И в определеном месте я должен встретится с кем -то. Неужели нужно постояно в основной отрисовке ловить if ( ) внутри которого зашита отрисовка персонажа №2 ? А если потом нужно с ним взаимодействовать? Как прервать времено основную отрисовку персонажа №1 (которая должна была быть, по идее. если б я не встретил №2)? Бред.. Ну я думаю меня поняли -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Для игр можно применить вариацию MVC подхода, как и для обычного приложения. А рендеринг перенести в Application.Idle (ну на каждой платформе это называется по-своему, но смысл думаю ясен).
Мир разделяется на зоны (локации), и обновление происходит только в рамках текущей локации. Умный рендерер перерисовывает только видимые объекты используя вариации на тему BSP или Octree. Т.е. фактически локация живет своей жизнью, а на экране отображается только видимая часть. Это сообщение отредактировал(а) arilou - 1.8.2006, 11:22 |
|||
|
||||
| Coocky |
|
||||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
arilou,
Ударил два раза.. В пах.. Откуда ж мне знать все эти термины Ну это я понял, весь просчет делать во время простоя приложения (когда очередь сообщения пуста.) Ну уж очень я сомневаюсь, что можно всегда 100% "просочится" через очередь сообщений об отрисовке. Насколько я понял, все сценки строятся на Timer (Paint(), Paint() ,Paint()....), а Paint ( DrawScene() ) (все обозначения условные). Приимерно догадываюсь. Постояно идет какой то- просчет. Невидимый. Как только доходит время и до него (до нужного просчета), он отображается (если отображалку умно написать.) Можно для примера словами описать ситуацию -"Перекресток". Есть машина. Она едет по видимой дороге. Где "там" едет другая машина. Едет постояно. может иногда останавливаясь.Живет своей жизню (свой класс, со своими координатами,со своим алгоритмом поведения ) . Как мне узнать время столкновения? Будет ли оно? Будет ли вообще отрисована вторая машина? Где это все сделать (проверки всякие) -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
||||
|
|||||
| arilou |
|
||||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Таак
1. MVC - Model View Controller 2. BSP - Binary Space Partitioning 3. Octree
Не, таймер не стоит, имхо. Тогда уже типа
1. Перед рендером каждого кадра все скармливается физическому движку, например Open Dynamics Engine (ODE) - http://www.ode.org/ 2. Физический движок рассчитывает положения объектов исходя из времени, прошедшего с предыдущего кадра. 3. Исходя их рез-тов обсчета в п.2 обновляются координаты моделей и рендерится кадр Это что касается столкновений. Перед скармливанием физическому движку ты должен обновить состояние всех интересующих тебя объектов. Например, едет твоя машина. Исходя из ее скорости и времени прошедшего с момента прошлого обсчета, ты обновляешь координаты (хранятся в объекте Машина1). Потом перед передачей физическому движку переводишь координаты в мировые, а после рассчета физики корректируешь. Ну не очень хороший пример. Можно например добавить скриптовой AI, тогда первым действием будет вызов скриптов, они определят текущее состояние сущности (монстра), потом физика обсчитает этого монстра, потом исходя из координат и состояния всех монстров сформируются вершинные буферы, текстуры и т.д. и т.п. и будет передано рендереру. Вообще, я бы порекомендовал тебе пойти на http://www.ogre3d.org и посмотреть, как грамотные люди делают рендерер. |
||||||
|
|||||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Да уж.. arilou, сенкс за заботу. Сейчас схожу на сайт. Поучусь (А здесь никому не раслаблятся. Я вернусь Добавлено @ 14:13 (Ну это уже апперкот, после того, как два раза в пах.) Ладно , иду на сайт! -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| $tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 7 Всего: 22 |
В таких великолепных играх как Morrowind и Oblivion используется следующий метод обработки событий: каждый скрипт (прикрепленный к какому-либо объекту) зациклен на бесконечность и о событиях (например игрок подошел к объекту или активировал объект) должен догадываться сам (посредством условий). Для обработки также могут быть использованы глобальные (статические) переменные.
Естественно все скрипты в мире обработать невозможно, поэтому обрабатываются только ближайшие к игроку. Возможно это делается в многопоточном режиме. В игровом цикле не делается никаких задержек, поскольку хорошие игры и без них тормозят |
|||
|
||||
| unicuum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
Для выделения вычисляется треугольник по нормали и его принадлежность к объекту (только как бы в обратном порядке), эта тема всегда затрагивается в книгах по 3D.
Ага, сначала обрабатывается сцена (мир поделён на сцены), потом bounding box и потом уже можно говорить о треугольничках. Добавлено @ 02:48 А вот, ещё что забыл. Иногда можно убирать объекты из обработки, которых не видно. Плюс не все пересечения обрабатываются со всеми, а только тех объектов, которые были заданы. У каждого они свои. Coocky рекомендую посмотреть 3D Studio Max и её физику, и станет всё понятно. -------------------- ![]() обычный день на винграде |
||||
|
|||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |