9 февраля 2010 в 15:00
Blitz3d уроки - 4. Поворты объектов и слежение
Круто, конечно, перемещаться стрейфом, но это не всегда то, что нам нужно.
В этот раз кое-что переделаем – две последние строчки проверки нажатия клавиш немного изменим. Теперь, когда мы будем нажимать кнопки ВЛЕВО и ВПРАВО он будет поворачиваться влево и вправо (для тех, кто не понял - раньше он перемещался влево и вправо ).
Итак, строчки:
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
Вот у нас уже что-то вроде автогонок вырисовывается (точнее кубогонок ). Так, команду TurnEntity вы уже знаете, но обратите внимание, что если мы хотим, чтобы наш объект вертелся именно влево-вправо, мы поворачиваем его по оси Y.
Чтобы немного было понятнее, где у него передняя часть, а где боковые, я предлагаю его немного трансформировать!
ScaleEntity cub,1,.5,2
Эту команду нужно вставить после команды создания куба (смотрите не вставьте её в цикл ).
Синтакс: 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 строчках!
Если запустить программу, то видно, что камера как бы следит за кубиком, хотя это плохо понятно – такое чувство, как будто он ездит сам как хочет. Всё это потому, что у нас нет ничего, с чем мы могли бы сравнивать его положение.
29 сентября 2018 в 09:49
У меня куб вертится вниз вверх
авторизуйтесь
или войдите через