Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 05.08.2011
Сообщений: 102
1

Как вращать камеру с помощью мыши по оси X не сдвигая 3D модель?

11.10.2011, 22:23. Показов 1909. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как вращать камеру с помощью мыши по оси X не сдвигая 3D модель?

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

3D Tools Trackball смотрел там такие же проблемы.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
AxisAngleRotation3D rotate;
 
        public MainWindow()
        {
            InitializeComponent();
       }
 
        Point mouseLastPosition;
        double mouseDeltaFactor = 10.00;
        double scaleFactor = 1;
        Point3D currentPosition;
        Vector3D lookDirection;
 
        private void Viewport3D_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            mouseLastPosition = e.GetPosition(this);
        }
 
        private void Viewport3D_MouseMove(object sender, MouseEventArgs e)
        {
            if (Mouse.LeftButton == MouseButtonState.Pressed)
            {
                Point newMousePosition = e.GetPosition(this);
                if (mouseLastPosition.X != newMousePosition.X)
                {
                    HorizontalTransform(mouseLastPosition.X < newMousePosition.X, mouseDeltaFactor);
                }
                if (mouseLastPosition.Y != newMousePosition.Y)
                {
                //    VerticalTransform(mouseLastPosition.Y > newMousePosition.Y, mouseDeltaFactor);
                }
                mouseLastPosition = newMousePosition;
            }
        }
 
        private void VerticalTransform(bool upDown, double angleDeltaFactor)
        {
            Vector3D postion = new Vector3D(DefCamera.Position.X, DefCamera.Position.Y, DefCamera.Position.Z);
            Vector3D rotateAxis = Vector3D.CrossProduct(postion, DefCamera.UpDirection);
            RotateTransform3D rt3d = new RotateTransform3D();
            rotate = new AxisAngleRotation3D(rotateAxis, angleDeltaFactor * (upDown ? -1 : 1));
            rt3d.Rotation = rotate;
            Matrix3D matrix = rt3d.Value;
            Point3D newPostition = matrix.Transform(DefCamera.Position);
            DefCamera.Position = newPostition;
            DefCamera.LookDirection = new Vector3D(-newPostition.X, -newPostition.Y, -newPostition.Z);
 
            Vector3D newUpDirection = Vector3D.CrossProduct(DefCamera.LookDirection, rotateAxis);
            newUpDirection.Normalize();
            DefCamera.UpDirection = newUpDirection;
        }
 
        private void HorizontalTransform(bool leftRight, double angleDeltaFactor)
        {
            Vector3D postion = new Vector3D(DefCamera.Position.X, DefCamera.Position.Y, DefCamera.Position.Z);
            Vector3D rotateAxis = DefCamera.UpDirection;
            RotateTransform3D rt3d = new RotateTransform3D();
            AxisAngleRotation3D rotate = new AxisAngleRotation3D(rotateAxis, angleDeltaFactor * (leftRight ? -1 : 1));
            rt3d.Rotation = rotate;
            Matrix3D matrix = rt3d.Value;
            Point3D newPostition = matrix.Transform(DefCamera.Position);
            DefCamera.Position = newPostition;
            DefCamera.LookDirection = new Vector3D(-newPostition.X, -newPostition.Y, -newPostition.Z);
        }
 
        private void Viewport3D_MouseWheel(object sender, MouseWheelEventArgs e)
        {
            lookDirection.Normalize();
            currentPosition = DefCamera.Position;
            lookDirection = DefCamera.LookDirection;
            System.Diagnostics.Debug.WriteLine(e.Delta.ToString());
            lookDirection *= scaleFactor;
 
            if (e.Delta == 90)
            {
                if ((currentPosition.X + lookDirection.X) * currentPosition.X > 0)
                {
                    currentPosition += lookDirection;
                }
            }
            if (e.Delta == -90)
        {
            currentPosition -= lookDirection;
        }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2011, 22:23
Ответы с готовыми решениями:

Как повернуть камеру по осям с помощью мыши
Как повернуть камеру по осям с помощью мыши. Есть код нужно поворачивать объект сферы в...

Как правильно вращать камеру свайпами?
делаю вращение камеры через свайпы, и вот столкнулся с таким косяком что камера у меня вращается по...

Вращать сферу вокруг центра координат, и одновременно вращать ее вокруг своей оси
Всем привет! Долблюсь о стену второй день ( Суть в том, что мне необходимо вращать сферу вокруг...

Как вращать фигуру по оси
Здравствуйте! Возник такой вопрос. Как можно просто вращать фигуру вокруг определённой оси?...

0
11.10.2011, 22:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2011, 22:23
Помогаю со студенческими работами здесь

Найти точку Z и вращать вокруг своей оси
Доброго времени суток, задача такая: есть спидометр Удалено модератором. Изображение загружено на...

Office Web Component - вращать подписи по оси Х
Всем привет Может кто подскажет, существует ли возможность вращать подписи по оси Х под углом. Что...

Почему надо вращать не камеру, а весь "мир"
http://forum.startandroid.ru/viewtopic.php?t=7035 видимо связано с тем что расчетов меньше надо...

Как проверить по какой оси движется курсор мыши (х или у)
Как проверить по какой оси движется курсор мыши (х или у), подскажите пожалуйста. в зажатом...

TChart. Как взять значение точки на оси Х под курсором мыши
Здравствуйте. Не могу узнать значение при наведении курсора на BottomAxis, где расположены...

Переместить (плавно) камеру без мыши и клавиатуры
Здравствуйте, нужно переместить (плавно) камеру без мыши и клавиатуры. Известны конечные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru