4. Свобода и Власть 3Д (1)

 

Круто, конечно, перемещаться стрейфом, но это не всегда то, что нам нужно.

 

В этот раз кое-что переделаем – две последние строчки проверки нажатия клавиш немного изменим. Теперь, когда мы будем нажимать кнопки ВЛЕВО и ВПРАВО он будет поворачиваться влево и вправо (для тех, кто не понял - раньше он перемещался влево и вправо J).

 

Итак, строчки:

 

If KeyDown(203) MoveEntity cub,-.1,0,0

If KeyDown(205) MoveEntity cub,.1,0,0

 

Нужно заменить на:

 

If KeyDown(203) TurnEntity cub,0,1,0

If KeyDown(205) TurnEntity cub,0,-1,0

 

Вот у нас уже что-то вроде автогонок вырисовывается (точнее кубогонок J). Так, команду TurnEntity вы уже знаете, но обратите внимание, что если мы хотим, чтобы наш объект вертелся именно влево-вправо, мы поворачиваем его по оси Y.

Чтобы немного было понятнее, где у него передняя часть, а где боковые, я предлагаю его немного трансформировать!

 

ScaleEntity cub,1,.5,2

 

Эту команду нужно вставить после команды создания куба (смотрите не вставьте её в цикл J).

Синтакс: ScaleEntity объект, трансформация по X, по Y, по Z. То есть в примере мы оставляем такой же размер  по X (ширину) (1 значит, что мы оставляем тот же размер), трансформируем размер по Y (высоту) до 0.5 от его размера (то есть просто уменьшаем в 2 раза) – получается как бы сплющиваем его сверху, и в два раза увеличиваем размер по Z (длину) – то есть растягиваем его в длину. Получился такой… кирпич…

Вот ездит этот кирпич, ездит, да заезжает за экран, так что мы перестаём его видеть. А как бы сделать так, чтобы не терять его из виду? Здесь нам поможет такая замечательная команда PointEntity объект1, объект2 – эта команда просто поворачивает объект1 в сторону объекта2. То есть если мы хотим, чтобы наша камера всегда следила за нашим кубиком, нам просто нужно вставить эту команду в цикл!

Вот как это делается:

 

PointEntity cam,cub

 

Эту команду можно вставить в любое место в цикле, но, чтобы у нас было всё по порядку, поставим её после команд проверяющих нажатия клавиш.

Вот полный код:

 

Graphics3D 640,480,16,1

SetBuffer BackBuffer()

 

cam=CreateCamera()

PositionEntity cam,0,5,-10

 

lit=CreateLight()

 

cub=CreateCube()

ScaleEntity cub,1,.5,2

 

Repeat

 

 If KeyDown(200) MoveEntity cub,0,0,.1

 If KeyDown(208) MoveEntity cub,0,0,-.1

 If KeyDown(203) TurnEntity cub,0,1,0

 If KeyDown(205) TurnEntity cub,0,-1,0

 

 PointEntity cam,cub

 

 UpdateWorld

 RenderWorld

 

 Flip

 

Until KeyHit(1)

 

End

 

Опять же столько всего, только в 18 строчках!

 

Если запустить программу, то видно, что камера как бы следит за кубиком, хотя это плохо понятно – такое чувство, как будто он ездит сам как хочет. Всё это потому, что у нас нет ничего, с чем мы могли бы сравнивать его положение.

 

 

 Оглавление:

 

0.  Введение

1.  В начале была Тьма

2.  Есть ли жизнь в DirectX

3.  Свобода и Власть 3Д (0)

4.  Свобода и Власть 3Д (1)

5.  2Д в 3Д

6.  Трёхмерный курсор

7.  Родительская зависимость или Привязки

8.  Фишки с привязками

9.  Коллизион Детекшн или как устроен мир…

10.     Первая 3Д игра. Часть 0 – основы движка

11.     Первая 3Д игра. Часть 1 – разработка движка

12.     Первая 3Д игра. Часть 2 – устранение багов

13.     Первая 3Д игра. Часть 3 – внешний вид

14.     Первая 3Д игра. Часть 4 – от массива к спискам

15.     Первая 3Д игра. Часть 5 – оптимизация кода

16.     Первая 3Д игра. Часть 6 – завершение

17.     Выведение

 

 

 

 

Используются технологии uCoz