Меню Сайта
Главная
Чат
__________________
Naruto TV-1
Naruto TV-2 Shipudenn
Naruto MOVIE-3
Naruto MOVIE-4
Naruto Приколы-Online
____________________
Windows XP
Linux
Vista
_______________
Games
3D_Модели
Програмы нужные Для Создания ИГР
ГАЛЕРЕЯ СКРИНШОТОВ из УРОКОВ
_______________________
--Blitz3D для начинающих---
Первая комната Blitz3d---
--Основы Cоздания Cетевых Игр---
Создание чата---
--Спрайты и Tекстуры---
Моделирование---
--Создание Серьезных Уровней---
Создание Kосмической Aркады---
--Звук, музыка и Интерфейс---
Создание основ Pолевой Игры---
--Простейший First-Person Шутер---
--Пиктограмма exe-файла---
___________________
Обои для Рабочего Стола
_________________
Раздел Банеров
Друзья-Сайта
Аниация и кправление камерой---
Redact
 

ToP Sites http://mo3del.ru/ http://mir3d.3dn.ru/ http://sw-in.narod.ru/

Аниация и кправление камерой---

Pассмотрим такой интересный пример, как управление камерой в играх от третьего лица. Для этого примера понадобится стандартная модель из комплекта поставки (Blitz3D) робот (robotic.3ds) и набор текстур для нее.



Цель программы - привязать камеру к модели робота, чтоб всегда видеть его спину. Управление движением модели будем производить с помощью клавиатуры.
Камеру и модель опишем в виде пользовательских типов следующим образом

В пользовательском типе Player: entity - родительский объект для модели, model - загружаемая с диска сама модель робота.
В пользовательском типе
SmartCam: entity - родительский объект для модели робота , camera - дескриптор камеры, target, heading - объекты, связанный с моделью робота, определяющие взаимоувязку его и камеры.

Загрузка всех необходимых медиа-ресурсов произведем в следующей функции:

Function LoadGameObjects()

  level=
LoadMesh( "mapstur.b3d" )

 
ScaleEntity level,.15,.15,.15
 
EntityType level,TYPE_WALL


  player_model =
LoadAnimMesh( "ROBOTrobotic.3DS" )
 
ScaleEntity player_model,.2,.2,.2
 
LoadAnimSeq player_model, ("ROBOTrunning.3DS" )
 
TurnEntity player_model,0,-180,0
 
HideEntity player_model

End Function

В качестве уровня используется объект  в формате .b3d, сделанный в редакторе CartographyShop 4.1  (ссылки на инструменты, которые мы будем использовать в курсе и другие полезные программы, смотрите тут: Полезные ссылки)
После загрузки уровня (для упрощения он представляет собой - пол, стенку и наклонные поверхности для демонстрации гравитации) он проходит масштабирование (функция
ScaleEntity) и ему присваивается тип -
TYPE_WALL (функция EntityType) для контроля столкновений с ним модели робота.
Далее происходит загрузка модели (
LoadAnimMesh) и анимационной последовательности его движения (LoadAnimSeq )

Создание самих объектов робота и камеры приведем ниже:

Function CreatePlayer.Player( x#,y#,z# )
  p.Player=
New Player
  pentity=
CreatePivot()
  pmodel=
CopyEntity( player_model,pentity )
  pplayer_y=y
 
PositionEntity pentity,x,y,z
 
EntityType pentity,TYPE_PLAYER
 
EntityRadius pentity,2
 
Return p
End Function

Function
CreateSmartCam.SmartCam( entity )
  c.SmartCam=
New SmartCam
  centity=entity
  ccamera=
CreateCamera()

  ctarget=
CreatePivot( entity )
  PositionEntity ctarget,0,5,-10
  EntityType ctarget,TYPE_TARGET

  cheading=
CreatePivot( entity )
  PositionEntity cheading,0,0,20
  Return c
End Function

При создании объекта робота (CreatePlayer.Player( x#,y#,z# )) - вначале создается пустой объект при помощи команды New. После чего инициализируем переменные объекта: entity и model.
Позиционирование в пространстве осуществляется функцией
PositionEntity. Функция EntityRadius задает радиус шара, который используется для столкновения модели с поверхностями уровня. Чем меньше радиус, тем ближе к стене может приблизиться модель.

При создании объекта камеры (
CreateSmartCam.SmartCam( entity )) - используется стандартная функция CreateCamera() Поля target и heading инициализируются как пустые объекты (pivot) и позиционируются в пространстве для установки благоприятного "видения" камерой модели.

Изменение состояние камеры и модели робота в процессе перемещения описываются следующим образом:

;================================
Function
UpdatePlayer( p.Player )

If KeyDown(203) ;поворот налево/направо
 
TurnEntity pentity,0,5,0
Else If KeyDown(205)
 
TurnEntity pentity,0,-5,0
EndIf

If KeyDown(30) ;движение вперед кл. А
 
If panim_speed<=0
    panim_speed=1.75
   
Animate pmodel, 1, 1.5, 1, 10
 
EndIf
 
MoveEntity pentity,0,0,1
Else If KeyDown(44) ;движение назад кл. Z
 
If panim_speed>=0
    panim_speed=-1.75
   
Animate pmodel, 1, 1.5, 1, 10
 
EndIf
 
MoveEntity pentity,0,0,-1
Else If panim_speed ;остановка анимации
  panim_speed=0
 
Animate pmodel, 2, 1, 0, 10
EndIf

ty#=
EntityY(pentity)
y_vel#=(ty-pplayer_y)
pplayer_y=ty

y_vel=y_vel -.5
TranslateEntity pentity,0,y_vel,0
End Function

;================================
Function UpdateSmartCam( c.SmartCam )

If KeyDown(200)
 
TranslateEntity cheading,0,-3,0
Else If KeyDown(208)
 
TranslateEntity cheading,0,+3,0
EndIf

dx#=
EntityX(ctarget,True)-EntityX(ccamera,True)
dy#=
EntityY(ctarget,True)-EntityY(ccamera,True)
dz#=
EntityZ(ctarget,True)-EntityZ(ccamera,True)

TranslateEntity ccamera,dx*ssp,dy*ssp,dz*ssp

PointEntity ccamera,cheading

PositionEntity ctarget,0,0,0
ResetEntity ctarget
PositionEntity ctarget,0,20,-15

End Function

В функции UpdayePlayer осуществляется реакция программы на нажатия клавиш A/Z - движение модели робота вперед/назад и стрелок вправо/влево. Изменение режимов анимации осуществляется при помощи команды Animate.  Всего этих режимов два - для перемещения робота и при отсутствии движения. Второй аргумент команды Animate как раз отвечает за смену последовательностей анимации. Движение модели робота вперед/назад осуществляется при помощи команды MoveEntity. Переменная y_vel отвечает за гравитацию. То есть, по сути, модель стремится к движению по оси Y, чему мешает пол уровня (коллизии учитываются автоматически при задании соответствующих зависисмостей ). Как только робот покидает пол, гравитация скидывает его в пропасть.

Почему модель не проваливается сквозь пол? За этот процесс отвечает контроль столкновений или коллизий описанный ниже:

Const TYPE_PLAYER=1, TYPE_TARGET=2, TYPE_WALL=3

Collisions TYPE_PLAYER,TYPE_WALL,2,2
Collisions TYPE_TARGET,TYPE_WALL,2,2

Команда Collisions устанавливает зависимости между разными объектами при их столкновении. Так зависимости установлены между объектами - "камера-уровень" и "робот-уровень".

Что касается функции
UpdateSmartCam, то она занимается синхронизацией и ориентированием камеры относительно модели робота. Клавиши вперед/назад - меняют угол наклона камеры.
переменная
ssp - отвечает за скорость (плавность) приближения камеры к модели робота. Команда
PointEntity  просто дает указание камере "смотреть" на модель.
Экран примера выглядит примерно так:


Полный текст примера находится здесь:  (smartcam.bb) , архив программы с моделями и текстурами можно взять тут:
(smartcam.zip).

 

уже 16013 посетителей!
 
Часы
 
Этот сайт был создан бесплатно с помощью homepage-konstruktor.ru. Хотите тоже свой сайт?
Зарегистрироваться бесплатно