Ghostland
Воскресенье, 05.05.2024, 04:04
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории каталога
Мои статьи [9]

Наш опрос
Играли ли вы в MMORG?
Всего ответов: 77

Главная » Статьи » Мои статьи

Blitz-физика
Большинство уважаемых читателей играло в такие шедевры игровой индустрии как DOOM, Half-Life и др.? Наверняка вы наслаждались физикой в этих играх: реалистичным поведением и взаимодействием предметов. Тем, как катится бочка или кантуется ящик. Оказывается, такую физику можно сделать даже на Blitz. Об этом и пойдет речь в предлагаемом цикле статей. 
  В начале будет немного теории. Я знаю, теория не настолько интересна, как программирование. Но без нее дальше будет много непонятного. Потом коротко рассмотрим существующие физические движки. В конце приведу пример создания физического мира. Материал совсем новый, постараюсь изложить ясно и остановится на нужных моментах более подробно. 
  Мы не будим писать физику предметов с нуля. Это очень трудоемкий и очень долгий процесс. Для этого существуют так называемые физические движки. Физический движок — это программа, которая рассчитывает физику предметов, сделанная для применения в играх и в других приложениях. Используется в играх как отдельный модуль для создания физического мира. На данный момент наиболее популярны: ODE, Newton, Takomak, Havok и PhysX. ODE — бесплатный и распространяется с исходным кодом. Newton тоже бесплатный, обладает высокой стабильностью, но по этой причине, увы, проигрывает в скорости. Havok и PhysX — самые быстрые, обладают очень большим спектром возможностей. Havok знаком по игре Half–Life 2, для нее он и был разработан. К сожалению, по причине его дороговизны я не смог его оценить. На PhysX игры только начали появляться. Вот игры, которые используют этот движок: 

• Tom Clancy's Ghost Recon Advanced Warfighter; 
• Rise of Nations: Rise of Legends (патч); 
• Bet on Soldier: Blood Sport (патч); 
• Bet on Soldier: Blood Of Sahara Expansion Pack; 
• CellFactor: Combat Training; 
• City of Villains (патч); 
• Gunship Apocalypse; 
• Stoked Rider: Big Mountain Snowboarding; 
• Switchball. 

  Остановимся на PhysX и в дальнейшем будем делать все только на нем. Почему именно он? PhysX намного быстрее других движков, очень гибок в настройках, имеет богатый спектр возможностей (их мы оценим по ходу изучения), а главное — его можно использовать бесплатно на условиях рекламы (иначе говоря, в вашей игре вы должны всеми возможными способами расхваливать PhysX, но можно поступить и иначе — просто заплатить кругленькую сумму долларов). 
  Если кто-то еще не знает, то PhysX был разработан компанией AGEIA для плат PhysX. Плата предназначена для ускорения просчета физики. Вот что нам обещает производитель чипа: 

• динамика твердого тела; 
• универсальный детектор столкновений; 
• анализ конечных элементов; 
• динамика мягких тел; 
• движение жидкостей; 
• симулятор волос и одежды; 
• позволяет рассчитывать физику нескольких сотен предметов одновременно ( рис. 1).


  К сожалению, в бесплатной версии половиной возможностей невозможно воспользоваться. Недоступны будут, например, движение жидкостей, симулятор волос и одежды. 
  Но то, что нам нужно, будет прекрасно работать и без денег. Конечно, есть недостатки: придется качать пятимегабайтный драйвер. Без него никак . PhysX не работает под «реликтовой» Windows 98 и ей подобными. 
  Теперь вы знаете, что такое физический движок и знаете где он применяется. Приступим к делу. Качаем драйвера: itmbin.nm.ru/physx/physx.zip — 5 метров (самые последние дрова можно закачать на сайте support.ageia.com, там же можно узнать подробную информацию), инсталлируем. Качаем PhysX — ddownloadd.nm.ru/Blitzpx.rar (либо смотрите на сайте dev.swargo.com в файлах, там буду выкладывать уроки и последние обновления — следите за новостями). Теперь ВНИМАТЕЛЬНО: в архиве два файла — Blitzpx.dll и Blitzpx.decls. Копируем их в папку X:\Blitz3d\userlibs. Все, движок готов к использованию. Создаем в блитце новый проект. 
 
Graphics3D 640,480 
SetBuffer BackBuffer() ;создаем камеру 
cam=CreateCamera() 
PositionEntity cam,0,3,-10 ;создаем свет 
light=CreateLight() 
PositionEntity light,15,66,15 ;создаем плоскость 
plane=CreatePlane() 
EntityColor plane,0,200,100 ;Инициализация физики 
PxCreateWorld(1) pxSetGravity(0,-10,0) ;физика кубика 
cube_body = PxCreateCube(1,1,1,3,2) 
pxSetPosition cube_body,0,7,0 
pxSetRotation cube_body,30,0,40 
cube_mesh=CreateCube() 
Repeat ;расчет физики 
RenderPhysic(30, 0)
pxSetEntity(cube_mesh, cube_body) 
UpdateWorld() 
RenderWorld() 
Flip 
Until KeyHit(1) 
End 

  Теперь разберем каждую команду и все параметры функций по отдельности. 
PxCreateWorld(1) — эта функция создает мир. Параметр 1 включает плоскость, с которой взаимодействуют предметы, 0 — отключает. Это самая первая команда в физике. Все остальные пишутся после. 
  pxSetGravity(0,-10,0) — устанавливает вектор гравитации. В нашем случае ускорение свободного падения равно 10 м/с*с и направлено к земле. По умолчанию — 9.8. 
  PxCreateCube(x, y, z, mass, dens) — эта функция создает параллелепипед с размерами по осям x, y, z и массой mass. Dens — плотность, пока об этом знать не обязательно, просто ставьте 1. В нашем случае мы создаем кубик с ребрами длиной 1 и массой 3. 
  Функции pxSetPosition body, x, y, z и pxSetRotation body, pitch, yaw, roll устанавливают кубик в точке x, y, z и разворачивают под углами pitch, yaw, roll. То есть кубик будет создан в точке 0,7,0 и развернут под углами 30,0,40. 
  RenderPhysic(30,0) — рассчитывает физику всех предметов в сцене. 30 — время просчета физики: чем больше время просчета, тем меньше требуется ресурсов от компьютера. 0 — синхронизация отключена, 1 — включена. Синхронизацию следует использовать, если у вас в сцене число тел не превышает 400. 
  
  pxSetEntity(cube_mesh, cube_body) — определяет каркас (меш) кубика для созданного нами физического тела. Можно обойтись без этой команды. Альтернативный способ рассмотрим потом. 
  
  В сцене можно наложить текстуры на кубик и плоскость. Это придаст реалистичный вид нашему творению. Из кубика можно сделать деревянный ящик, картонную коробку или кирпич :-). Вот что получилось у меня ( рис. 2).

 Как видите, всего несколькими строчками можно описать полную физику кубика. Можете попробовать сами создать несколько кубиков. Только учтите, что кубики не должны лепиться друг на друга. Просто меняйте позицию каждого следующего тела. Вроде бы ничего сложного нет. Если возникнут вопросы — пишите. В следующий раз рассмотрим физику сферы, капсулы и некоторые настройки тел.



Источник: http://blitz3d.at.ua
Категория: Мои статьи | Добавил: ghosty-3d (24.02.2009)
Просмотров: 1195 | Комментарии: 3 | Рейтинг: 1.7/6 |
Всего комментариев: 1
1 slewritoliose  
0
хорошее начало

Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024
Конструктор сайтов - uCoz