Вычисляем угол поворота камеры

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Вычисляем угол поворота камеры

Сообщение Programmator21 01 ноя 2018, 18:50

Всем привет! Столкнулся с проблемой вычисления координат углов поворота камеры. Есть камера (точка в центре шара), она управляется мышкой.
Наводимся на точку h1, записываем в float _h1 Y координату вращения камеры.
Затем, наводимся на точку h2, записываем в float _h2 Y координату вращения камеры.
После чего, необходимо вычислить разницу _h2 - _h1 и вывести в Debug. Аналогично делаем с v1 и v2.
По идее получится число градусов чежду двумя точками по вертикали и горизонтали.
Пожалуйста напишите подробно (c#) Особенно интересует момент со считыванием координат поворота камеры.
Изображение
Programmator21
UNец
 
Сообщения: 11
Зарегистрирован: 24 окт 2018, 00:53

Re: Вычисляем угол поворота камеры

Сообщение DimaJoke 01 ноя 2018, 20:06

Ну тут высчитываем угол мы через transform.loclaLinearAngless(синтаксис может быть не верен, но тебе всё-равно дорога в гугл.)
И пуляй луч(по дороге в гугл ГАИ нет)
А если луч попадает в точку, то созраняй(что тебе там нужно, localLinearAngless высчитываются в Vector3)

Хорошо пути в гугл!
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Вычисляем угол поворота камеры

Сообщение Ziza 03 ноя 2018, 02:00

Если вы знаете h1 и h2, то зачем вам вообще что-то куда-то крутить и запоминать?)
Синтаксис:
Используется csharp
var p = camera.transform.position;
var angle = Vector3.Angle(h1 - p, h2 - p);
Аватара пользователя
Ziza
UNIт
 
Сообщения: 81
Зарегистрирован: 02 ноя 2018, 23:07

Re: Вычисляем угол поворота камеры

Сообщение Programmator21 03 ноя 2018, 20:33

Ziza писал(а):Если вы знаете h1 и h2, то зачем вам вообще что-то куда-то крутить и запоминать?)
Синтаксис:
Используется csharp
var p = camera.transform.position;
var angle = Vector3.Angle(h1 - p, h2 - p);


Это получится угол между векторами, да. Но это будет одно значение. А мне необходимо выводить два значения, по вертикали и горизонтали. Соответственно тут идет работа с проекциями векторов, что бы вычислять вертикальный, а затем горизонтальный угол. И если в плоскости XZ я еще могу найти горизонтальный угол, то что бы найти вертикальный мне придется использовать плоскости YX и YZ - их две. И как мне между ними переключаться в нужный момент я понятия не имею. В этом и загвостка данного способа. Поэтому и решил идти через углы вращения.
Programmator21
UNец
 
Сообщения: 11
Зарегистрирован: 24 окт 2018, 00:53

Re: Вычисляем угол поворота камеры

Сообщение 1max1 03 ноя 2018, 21:50

Аналогично можно и найти вертикальный угол.
И кстати:
что бы найти вертикальный мне придется использовать плоскости YX и YZ - их две

И там и там будет одно и тоже значение, так что можешь брать любую плоскость) (popcorn1)
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Вычисляем угол поворота камеры

Сообщение Programmator21 04 ноя 2018, 07:52

Хм... Эта штука работает как надо, до тех пор, пока я не повернусь с камерой на 90 градусов влево. Тогда меняется плоскость и становится YZ. И вертикальный угол уже не считается как надо (равен 0). Может быть как то можно присвоить значение проекций, чтобы создавалось еще две уже в плоскости YZ. :-?

Синтаксис:
Используется csharp
 _mmCB = _mB - _changeCamera.transform.position;
            _mmCA = _mA - _changeCamera.transform.position;

            Vector3 _projCBv0 = _mmCB;
            _projCBv0.x = _changeCamera.transform.position.x;
            //_projCBv0.z = _changeCamera.transform.position.z;
            Vector3 _projCAv0 = _mmCA;
            _projCAv0.x = _changeCamera.transform.position.x;
            //_projCAv0.z = _changeCamera.transform.position.z;
            _verticalAngle = Vector3.Angle(_projCBv0, _projCAv0);

            Vector3 _projCB0 = _mmCB;
            _projCB0.y = 0;
            Vector3 _projCA0 = _mmCA;
            _projCA0.y = 0;


            _horizontalAngle = Vector3.Angle(_projCB0, _projCA0);
Programmator21
UNец
 
Сообщения: 11
Зарегистрирован: 24 окт 2018, 00:53

Re: Вычисляем угол поворота камеры

Сообщение Programmator21 04 ноя 2018, 08:09

Кажется как то вот так
Синтаксис:
Используется csharp
_verticalAngle1 = 0;
            _verticalAngle2 = 0;

            _mmCB = _mB - _changeCamera.transform.position;
            _mmCA = _mA - _changeCamera.transform.position;

            Vector3 _projCBv0 = _mmCB;
            Vector3 _projCBv0Z = _mmCB;
            _projCBv0.x = _changeCamera.transform.position.x;
            _projCBv0Z.z = _changeCamera.transform.position.z;
            Vector3 _projCAv0 = _mmCA;
            Vector3 _projCAv0Z = _mmCA;
            _projCAv0.x = _changeCamera.transform.position.x;
            _projCAv0Z.z = _changeCamera.transform.position.z;
            _verticalAngle1 = Vector3.Angle(_projCBv0, _projCAv0);
            _verticalAngle2 = Vector3.Angle(_projCBv0Z, _projCAv0Z);

            Vector3 _projCB0 = _mmCB;
            _projCB0.y = 0;
            Vector3 _projCA0 = _mmCA;
            _projCA0.y = 0;


            _horizontalAngle = Vector3.Angle(_projCB0, _projCA0);

            if (_verticalAngle1 == 0 && _verticalAngle2 != 0) {
                _verticalAngle = _verticalAngle2;
            }
            if (_verticalAngle1 != 0 && _verticalAngle2 == 0) {
                _verticalAngle = _verticalAngle1;
            }
Programmator21
UNец
 
Сообщения: 11
Зарегистрирован: 24 окт 2018, 00:53

Re: Вычисляем угол поворота камеры

Сообщение 1max1 04 ноя 2018, 10:14

Не уверен в 100% работоспособности, но попробуй:
Синтаксис:
Используется csharp
   
    float GetVerticalAngle(Vector3 a, Vector3 b)
    {
        float va1 = Mathf.Atan2(a.y, a.x != 0.0f ? a.x : a.z);
        float va2 = Mathf.Atan2(b.y, b.x != 0.0f ? b.x : b.z);

        return Mathf.Abs(va1 - va2) * Mathf.Rad2Deg;
    }
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 20