Четверг, 10.07.2025, 11:01


Главная
Регистрация
Вход
Dota our life Приветствую Вас Гость | RSS  
Меню сайта

Категории раздела
Jass [8]
Декорации [1]
Объекты [7]
Рельеф [7]
Триггеры [0]
Импорт и Экспорт [12]
Всё о WorldEditor [0]
Прочее [26]
Всё о MdlVis [12]

Кликаем)

Наш опрос
Оцените мой сайт
Всего ответов: 27

Форма входа

Главная » Статьи » Создание карт » Jass

Углы Эйлера (Yaw, Pitch) в WarCraft III
Эта статья поможет вам задать углы Эйлера для любой модели, таким образом получив целых три новых разновидности поворота.

Что такое Yaw, Pitch и Roll?

Чтобы это понять, посмотрите на картинки ниже.

Угол Yaw:

Угол Pitch:

Угол Roll:

Для эмуляции этих углов требуется три шага.

Шаг 1 - Подготовка модели.

- Скачайте Model Editor здесь.
- Откройте нужную модель в этой программе.
- Выберите Windows -> Node Manager.
- Нажмите правой кнопкой на хелпер (шарик с буквой "i" внутри), который назван Bone_Root или как-то похоже.
- Выберите Edit Node.
- Переименуйте его в Bone_Head.
- Сохраните.
- Импортируйте отредактированную модель в карту.

Шаг 2 - Работа в Редакторе.

- В нужном воине в Редакторе Объектов измените параметр "Графика - Файл модели" на импортированный.
- Измените значение поля "Графика - Анимация: Время цветового перехода (сек.)" на 0.
- Создайте боевую единицу.
- Создайте две реальные переменные, их значение будет являться градусной мерой угла.

Шаг 3 - Задаём углы Yaw и Pitch.

В задании углов Yaw и Pitch нам помогут две простые Jass-функции.

Code
function AdjustToRangeOfNum takes real adj, real num returns real
  local real adjusting = adj
   
  loop
  exitwhen (adjusting <= num and adjusting >= 0)
  if adjusting < 1 then
  set adjusting = adjusting + num
  elseif adjusting > num then
  set adjusting = adjusting - num
  endif
  endloop
   
  return adjusting
endfunction

function SetUnitYawPitch takes unit u, real yaw, real pitch returns nothing
  // Пользователь может ввести любой угол, а нам нужен такой, который попадёт в область [0;360].
  // И это делается из-за проверки недопустимых pitch-углов (90 и 270 градусов), у них изменение угла будет 0 и функция не поменяет поворот.
  local real y = AdjustToRangeOfNum(yaw,360.)  
  local real p = AdjustToRangeOfNum(pitch,360.)

  local real offsetX
  local real offsetY
  local real offsetZ
   
  if p == 90. or p == 270. then
  set p = p - 1.
  endif

  if y == 90. or y == 270. then
  set y = y - 1
  endif
   
  set offsetX = Cos(p * .0174532) * Cos(y * .0174532) * 1000000.
  set offsetY = Cos(p * .0174532) * Sin(y * .0174532) * 1000000.
  set offsetZ = Sin(p * .0174532) * 1000000.
   
  call SetUnitLookAt(u,"head",u,offsetX,offsetY,offsetZ)
endfunction

Вот, собственно, и всё.


Категория: Jass | Добавил: FaerieDragon (03.07.2011)
Просмотров: 1272 | Теги: Pitch) в WarCraft III, Углы Эйлера (Yaw, Картостроение, язык Jass | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Реклама

Друзья сайта

Счётчики

Copyright MyCorp © 2025Бесплатный конструктор сайтовuCoz