Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.08.2012, 14:58
Jitakuzu вне форума Посмотреть профиль Отправить личное сообщение для Jitakuzu Найти все сообщения от Jitakuzu
  № 1  
Ответить с цитированием
Jitakuzu

Регистрация: Jun 2010
Сообщений: 97
По умолчанию Исключительно математический вопрос

Всем доброго времени суток!

Вопрос в следующем: как сделать так, чтобы объект в пространстве (3D) постоянно смотрел на камеру, но только одной стороной. То есть, в точке А есть плоский объект и есть камера в точке В. Если плоский объект расположен вдоль оси Х, то все легко:

Код AS3:
var angleX:Number = Math.atan2(_object.z - _camera.z, _object.y - _camera.y) * 180 / Math.PI;
_object.rotationX = angleX;
Все работает: перемещая камеру по по плоскости YZ, плоский объект "лицом" смотрит на камеру, но смещаясь по другим плоскостям (XY и XZ), плоский объект остается на месте.

Но нужно сделать так, чтобы это работало вне зависимости от того, как расположен плоский объект. То есть, он может быть расположен не четко вдоль оси Х.

Как я понимаю, тут нужно проделать аналогичные манипуляции с другими углами, но в связи с отсутствием каких либо знаний в тригонометрии, я не могу до этого додуматься.

Старый 01.08.2012, 15:49
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Тут не столько тригонометрия, сколько линейная алгебра/аналитическая геометрия и кватернионы (если использовать только матрицы без кватернионов некоторые операции с углами будут проблематичны)
Если я правильно понял задачу (мутно написано, рисунок нужен):
- провести вектор из плоского объекта в камеру
- найти минимальный угол между нормалью к плоскому объекту этим вектором
- повернуть объект вокруг оси, перпендикулярной обоим этим векторам на этот угол
Теорию читать на gamedev.ru


Последний раз редактировалось expl; 01.08.2012 в 16:06.
Старый 01.08.2012, 16:09
Jitakuzu вне форума Посмотреть профиль Отправить личное сообщение для Jitakuzu Найти все сообщения от Jitakuzu
  № 3  
Ответить с цитированием
Jitakuzu

Регистрация: Jun 2010
Сообщений: 97
ну вроде бы правильно понял, только, наверное, "между нормалью к плоскому объекту И этим вектором".
Проблема в том, как найти эту самую ось, перпендикулярную этим векторам. Ведь эта плоскость явно не совпадет с X, Y или Z. На теорию времени нет... =)

Насчет нормали к плоскости, так она определяется?
Код AS3:
//object - плоский объект
var normal:Vector3D = new Vector3D( -object.y, object.x, object.z );


Последний раз редактировалось Jitakuzu; 01.08.2012 в 16:25.
Старый 01.08.2012, 16:59
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Проблема в том, как найти эту самую ось
Это как раз не проблема - находится _векторным_ перемножением этих 2-х векторов.
А вот повернуть вокруг произвольной оси - это уже веселее. Но можно алгоритм найти на том же gamedev.ru. Единственное, там 2 способа - с помощью матриц и кватернионов - нужно использовать, тот, который с кватернионами.

Цитата:
Насчет нормали к плоскости, так она определяется?
Выбираем 2 любых (непараллелльных) вектора на плоскости, перемножаем их векторно, нормализуем вектор, чтобы длинны 1 был
(направление нормали будет зависеть от порядка перемножения векторов)
Вам же нужно чтобы эта нормаль на камеру смотрела?

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:04.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.