Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поворот камеры в 3D, WPF, Trackball реализация. 
:(
    Опции темы
jenik15
Дата 14.2.2010, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Я нашел на нескольких форумах пример как реализовать движение камеры вокруг объекта в пространстве. 
Значит, примерно делается следующее:

Код

private void Grid_MouseMove(object sender, MouseEventArgs e) 
{
      if(mDown) {
        Point pos = Mouse.GetPosition(viewport);
        Point actualPos = new Point(pos.X - viewport.ActualWidth / 2, viewport.ActualHeight / 2 - pos.Y);
        double dx = actualPos.X - mLastPos.X, dy = actualPos.Y - mLastPos.Y;

        double mouseAngle = 0;
        if(dx != 0 && dy != 0) {
          mouseAngle = Math.Asin(Math.Abs(dy) / Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2)));
          if(dx < 0 && dy > 0) mouseAngle += Math.PI / 2;
          else if(dx < 0 && dy < 0) mouseAngle += Math.PI;
          else if(dx > 0 && dy < 0) mouseAngle += Math.PI * 1.5;
        }
        else if(dx == 0 && dy != 0) mouseAngle = Math.Sign(dy) > 0 ? Math.PI / 2 : Math.PI * 1.5;
        else if(dx != 0 && dy == 0) mouseAngle = Math.Sign(dx) > 0 ? 0 : Math.PI;

        double axisAngle = mouseAngle + Math.PI / 2;

        Vector3D axis = new Vector3D(Math.Cos(axisAngle) * 4, Math.Sin(axisAngle) * 4, 0);

        double rotation = 0.01 * Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2));

         Transform3DGroup group = axes.Transform as Transform3DGroup;
        QuaternionRotation3D r = new QuaternionRotation3D(new Quaternion(axis, rotation * 180 / Math.PI));
          group.Children.Add(new RotateTransform3D(r));

        mLastPos = actualPos;
      }
    }

 
 axes - уже создан. То есть, как я понимаю, при смене положения миши 
  поверх Grid и нажата кнопка с объектом axes возникает смена его положения.
с 3D я новичек, но разве не нужно поворачивать как то камеру вокруг оси, а не все объекты сцены. 
Подскажите, пожалуйста, как правильно реализовать данную функциональность.

Или вообще как вращать камеру вокруг объекта?

Это сообщение отредактировал(а) jenik15 - 14.2.2010, 01:37
PM MAIL   Вверх
zeon007
Дата 17.10.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.1.2010

Репутация: нет
Всего: нет



В голову пришло только две идеи:
Менять LookDirection камеры либо задавать ей Transform.
Какая у тебя 3D сцена?
Если тебе нужно просто крутить объект то код в принципе  подойдет.
У меня на нем куб крутится.
А сам я убил много времени в поисках какой нибудь инфы по повороту камеры мышкой.Результатов ни каких+(
вот пару ссылок может чтото интерестное и найдешь.
ссылка1
ссылка2
PM MAIL   Вверх
zel25b
Дата 18.10.2010, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.2.2010

Репутация: нет
Всего: нет



правильно подметили - нужно поворачивать камеру вокруг оси
для старта есть такая библиотека как http://3dtools.codeplex.com/
в нем смотри функционал по Trackball'у, в нэте есть описание с картинками как он работает, ссылка не сохранилась
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.