Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Общая теория "отрисовки" игр, ИЛИ... как это делается? 
:(
    Опции темы
Coocky
Дата 1.8.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Фуф.
Тяжело переходить от программирования в ответ на события системы к программированию игр.
Че-то я никак в толк не возьму smile 
Может кто-то обьяснить или дать ссылку-как происходит это игроделанье? smile 
Проблема вот в чем-я никак не могу уложить в голове -как можно всю более менее нормальную игру уложить в одну отрисовку в главном окне? smile 
Ну вот к примеру, есть сценку с чем-то летающим прыгающим. Это понятно. Можно рисовать обьекты, и взависимости от действий пользователя либо по времени просто менять координаты, на которых основывается данная сценка.
Но вот как быть в играх. Ведь сценка все равно циклична, рано или поздно. А вот игра ж-она прямолинейна?
Вот непонятна ситуация. Допустим есть отрисованая территория (ландшафт). Я иду по ней. И в определеном месте я должен встретится с кем -то. Неужели нужно постояно в основной отрисовке ловить if ( ) внутри которого зашита отрисовка персонажа №2 ? А если потом нужно с ним взаимодействовать? Как прервать времено основную отрисовку персонажа №1 (которая должна была быть, по идее. если б я не встретил №2)? Бред..

Ну я думаю меня поняли smile  Поняли то, чего я не могу понять smile 


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
arilou
Дата 1.8.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Для игр можно применить вариацию MVC подхода, как и для обычного приложения. А рендеринг перенести в Application.Idle (ну на каждой платформе это называется по-своему, но смысл думаю ясен).

Мир разделяется на зоны (локации), и обновление происходит только в рамках текущей локации. Умный рендерер перерисовывает только видимые объекты используя вариации на тему BSP или Octree. Т.е. фактически локация живет своей жизнью, а на экране отображается только видимая часть.



Это сообщение отредактировал(а) arilou - 1.8.2006, 11:22


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Coocky
Дата 1.8.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



arilou, 
Цитата(arilou @  1.8.2006,  11:21 Найти цитируемый пост)
Для игр можно применить вариацию MVC  подхода, как и для обычного приложения


Цитата(arilou @  1.8.2006,  11:21 Найти цитируемый пост)
 Умный рендерер перерисовывает только видимые объекты используя вариации на тему BSP  или Octree.

 smile 
Ударил два раза.. В пах.. smile 
Откуда ж мне знать все эти термины smile 

Цитата(arilou @  1.8.2006,  11:21 Найти цитируемый пост)
А рендеринг перенести в Application.Idle 

Ну это я понял, весь просчет делать во время простоя приложения (когда очередь сообщения пуста.)
Ну уж очень я сомневаюсь, что можно всегда 100% "просочится" через очередь сообщений об отрисовке.
Насколько я понял, все сценки строятся на Timer (Paint(), Paint() ,Paint()....), а Paint ( DrawScene() ) (все обозначения условные).

Цитата(arilou @  1.8.2006,  11:21 Найти цитируемый пост)
мный рендерер перерисовывает только видимые объекты 

Приимерно догадываюсь. Постояно идет какой то- просчет. Невидимый. Как только доходит время и до него (до нужного просчета), он отображается (если отображалку умно написать.)
Можно для примера словами описать ситуацию -"Перекресток".
Есть машина. Она едет по видимой дороге. Где "там" едет другая машина. Едет постояно. может иногда останавливаясь.Живет своей жизню (свой класс, со своими координатами,со своим алгоритмом поведения ) .
Как мне узнать время столкновения? Будет ли оно? Будет ли вообще отрисована вторая машина? Где это все сделать (проверки всякие)



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
arilou
Дата 1.8.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Таак  smile 

1. MVC - Model View Controller
2. BSP  - Binary Space Partitioning
3. Octree


Цитата(Coocky @  1.8.2006,  13:18 Найти цитируемый пост)
Насколько я понял, все сценки строятся на Timer (Paint(), Paint() ,Paint()....), а Paint ( DrawScene() )


Не, таймер не стоит, имхо. Тогда уже типа

Код

while(true)
{
  UpdateEnvironment();
  RenderEnvironment();

  if(userWantsToExit)
     break;
}


Цитата(Coocky @  1.8.2006,  13:18 Найти цитируемый пост)
Как мне узнать время столкновения? Будет ли оно? Будет ли вообще отрисована вторая машина? Где это все сделать (проверки всякие


1. Перед рендером каждого кадра все скармливается физическому движку, например Open Dynamics Engine (ODE) - http://www.ode.org/
2. Физический движок рассчитывает положения объектов исходя из времени, прошедшего с предыдущего кадра. 
3. Исходя их рез-тов обсчета в п.2 обновляются координаты моделей и рендерится кадр

Это что касается столкновений. 

Перед скармливанием физическому движку ты должен обновить состояние всех интересующих тебя объектов. Например, едет твоя машина. Исходя из ее скорости и времени прошедшего с момента прошлого обсчета, ты обновляешь координаты (хранятся в объекте Машина1). Потом перед передачей физическому движку переводишь координаты в мировые, а после рассчета физики корректируешь. Ну не очень хороший пример. Можно например добавить скриптовой AI, тогда первым действием будет вызов скриптов, они определят текущее состояние сущности (монстра), потом физика обсчитает этого монстра, потом исходя из координат и состояния всех монстров сформируются вершинные буферы, текстуры и т.д. и т.п. и будет передано рендереру.

Вообще, я бы порекомендовал тебе пойти на http://www.ogre3d.org и посмотреть, как грамотные люди делают рендерер.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Coocky
Дата 1.8.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Цитата(arilou @  1.8.2006,  13:59 Найти цитируемый пост)
Таак   


Да уж.. smile  Пока так smile 

arilou, сенкс за заботу. Сейчас схожу на сайт. Поучусь smile 
(А здесь никому не раслаблятся. Я вернусь smile )

Добавлено @ 14:13 
Цитата(arilou @  1.8.2006,  13:59 Найти цитируемый пост)
Можно например добавить скриптовой AI,

(Ну это уже апперкот, после того, как два раза в пах.)
Ладно , иду на сайт! smile 



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
$tatic
Дата 2.8.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



В таких великолепных играх как Morrowind и Oblivion используется следующий метод обработки событий: каждый скрипт (прикрепленный к какому-либо объекту) зациклен на бесконечность и о событиях (например игрок подошел к объекту или активировал объект) должен догадываться сам (посредством условий). Для обработки также могут быть использованы глобальные (статические) переменные.
Естественно все скрипты в мире обработать невозможно, поэтому обрабатываются только ближайшие к игроку. Возможно это делается в многопоточном режиме.

В игровом цикле не делается никаких задержек, поскольку хорошие игры и без них тормозят smile. Самым ресурсоемким является конечно процесс рендеринга.
PM MAIL   Вверх
unicuum
Дата 3.8.2006, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: нет
Всего: 8



Цитата($tatic @  2.8.2006,  20:04 Найти цитируемый пост)
о событиях (например игрок подошел к объекту или активировал объект) должен догадываться сам (посредством условий)

Для выделения вычисляется треугольник по нормали и его принадлежность к объекту (только как бы в обратном порядке), эта тема всегда затрагивается в книгах по 3D.

Цитата($tatic @  2.8.2006,  20:04 Найти цитируемый пост)
Естественно все скрипты в мире обработать невозможно, поэтому обрабатываются только ближайшие к игроку. 

Ага, сначала обрабатывается сцена (мир поделён на сцены), потом bounding box и потом уже можно говорить о треугольничках.

Добавлено @ 02:48 
А вот, ещё что забыл. Иногда можно убирать объекты из обработки, которых не видно. Плюс не все пересечения обрабатываются со всеми, а только тех объектов, которые были заданы. У каждого они свои. Coocky рекомендую посмотреть 3D Studio Max и её физику, и станет всё понятно.


--------------------
user posted image
обычный день на винграде
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.