Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9

Тема: Геометрия

  1. #1
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±

    Геометрия

    Есть у меня позиции камеры, вычитал от позиции транспорта результат, записал в массив

    PHP код:
    new Float:CameraPos[][] = {
        {-
    4.76982.56941.1252},
        
    //...
    };

    new 
    Float:CameraLookAt[][] = {
        {-
    3.87022.16440.9622},
        
    //...
    }; 
    Но позицию z не составило труда настроить, но не могу сделать X и Y, пробовал куча вариантов, не могу найти общую формулу
    PHP код:
        new
            
    Float:xFloat:yFloat:z,
            
    Float:a;

        
    GetVehiclePos(vehicleidxyz);
        
    GetVehicleZAngle(vehicleida);

        new
            
    Float:sinFloat:cos;

        
    sin floatmul(6.0floatsin(-adegrees)));
        
    cos floatmul(6.0floatcos(-adegrees)));
        
    SetPlayerCameraPos(playeridsincosCameraPos[0][2]);

        
    sin floatmul(6.0floatsin(-adegrees)));
        
    cos floatmul(6.0floatcos(-adegrees)));
        
    SetPlayerCameraLookAt(playeridsincosCameraLookAt[0][2]); 

  2. #2
    Аватар для tnc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.09.2019
    Сообщений
    121
    Репутация:
    26 ±
    Что ты пытаешься сделать?

  3. #3
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Тюнинг, я не хочу так сказать фризить, или еще какие-то палки совать, для того чтобы транспорт был на месте. А транспорт может находиться в любом месте, под разным углом. Но так вот, я перебрал координаты спойлер/нитро/колес и т.д. Нужно сделать так, чтобы камера направлялась строго что ты выбрал

  4. #4
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Актуально

  5. #5
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    SetPlayerCameraPos - Это координаты где находится камера.
    SetPlayerCameraLookAt - Это куда камера будет смотреть.

    Логично предположить что SetPlayerCameraLookAt должно быть на машине или как минимум ближе к машине, но у тебя выходит что точка где стоит и куда смотри одна и та же, разница только в высоте.

    1. new
    2. Float:x, Float:y, Float:z,
    3. Float:a;
    4.  
    5. GetVehiclePos(vehicleid, x, y, z);
    6. GetVehicleZAngle(vehicleid, a);
    7.  
    8. new
    9. Float:sin, Float:cos;
    10.  
    11. sin = x + floatmul(6.0, floatsin(-a, degrees)));
    12. cos = y + floatmul(6.0, floatcos(-a, degrees)));
    13. SetPlayerCameraPos(playerid, sin, cos, z + CameraPos[0][2]);
    14.  
    15. sin = x + floatmul(2.0, floatsin(-a, degrees)));
    16. cos = y + floatmul(2.0, floatcos(-a, degrees)));
    17. SetPlayerCameraLookAt(playerid, sin, cos, z + CameraLookAt[0][2]);


    Быть может так лучше будет.

  6. Пользователь сказал cпасибо:
    Pro_Coder (23.11.2020)
  7. #6
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Ну, у меня есть массив, там либо + либо -, этого массива. И камера должна смотреть на колеса
    PHP код:
    new Float:CameraPos[][] = {
        {-
    4.76982.56941.1252},
        {
    0.6505, -3.38851.4342},
        {-
    4.00180.20821.5372},
        {-
    3.86690.52101.2432},
        {-
    1.8699, -2.5420, -0.2812},
        {-
    4.92510.23440.3112},
        {
    5.0598, -0.01402.0302},
        {
    4.3737, -1.6269, -0.4192},
        {-
    3.0984, -2.5757, -0.6432},
        {-
    4.76982.56941.1252},
        {-
    4.76982.56941.1252},
        {-
    5.92440.51470.7882},
        {
    3.9429, -1.4952, -0.3412},
        {-
    4.00180.20821.5372},
        {-
    4.00180.20821.5372}
    };

    new 
    Float:CameraLookAt[][] = {
        {-
    3.87022.16440.9622},
        {
    0.9439, -2.49001.1082},
        {-
    3.13070.20461.0462},
        {-
    2.88960.46861.0382},
        {-
    1.2975, -1.7426, -0.4632},
        {-
    3.97000.36950.0472},
        {
    4.2290, -0.01751.4732},
        {
    3.5108, -1.1304, -0.3252},
        {-
    2.5562, -1.7382, -0.5762},
        {-
    3.87022.16440.9622},
        {-
    3.87022.16440.9622},
        {-
    4.93380.49290.6532},
        {
    3.0538, -1.0500, -0.4462},
        {-
    3.13070.20461.0462},
        {-
    3.13070.20461.0462}
    }; 
    Вот весь массив компонентов, колеса, спойлер и т.д. Нужно так. если ты по индексу колес обращаешься, то камера соответственно смотрит на колесса. Этим я делаю динамическую так сказать камеру

  8. #7
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Не вздумайте кидать тему в архив, еще актуально

  9. #8
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Цитата Сообщение от Pro_Coder Посмотреть сообщение
    Ну, у меня есть массив, там либо + либо -, этого массива. И камера должна смотреть на колеса
    PHP код:
    new Float:CameraPos[][] = {
        {-
    4.76982.56941.1252},
        {
    0.6505, -3.38851.4342},
        {-
    4.00180.20821.5372},
        {-
    3.86690.52101.2432},
        {-
    1.8699, -2.5420, -0.2812},
        {-
    4.92510.23440.3112},
        {
    5.0598, -0.01402.0302},
        {
    4.3737, -1.6269, -0.4192},
        {-
    3.0984, -2.5757, -0.6432},
        {-
    4.76982.56941.1252},
        {-
    4.76982.56941.1252},
        {-
    5.92440.51470.7882},
        {
    3.9429, -1.4952, -0.3412},
        {-
    4.00180.20821.5372},
        {-
    4.00180.20821.5372}
    };

    new 
    Float:CameraLookAt[][] = {
        {-
    3.87022.16440.9622},
        {
    0.9439, -2.49001.1082},
        {-
    3.13070.20461.0462},
        {-
    2.88960.46861.0382},
        {-
    1.2975, -1.7426, -0.4632},
        {-
    3.97000.36950.0472},
        {
    4.2290, -0.01751.4732},
        {
    3.5108, -1.1304, -0.3252},
        {-
    2.5562, -1.7382, -0.5762},
        {-
    3.87022.16440.9622},
        {-
    3.87022.16440.9622},
        {-
    4.93380.49290.6532},
        {
    3.0538, -1.0500, -0.4462},
        {-
    3.13070.20461.0462},
        {-
    3.13070.20461.0462}
    }; 
    Вот весь массив компонентов, колеса, спойлер и т.д. Нужно так. если ты по индексу колес обращаешься, то камера соответственно смотрит на колесса. Этим я делаю динамическую так сказать камеру
    Это массив со смещением?

    Так ты хочешь чтобы в "любом" месте можно было настроить камеру относительно т/с? Тогда тебе нужно шесть чисел:
    1. Угол поворота для камеры(не для самой камеры, а для того чтобы относительно тс можно было бы получить точку где должна быть камера)
    2. На каком расстоянии должна быть камера.
    3. Относительная высота камеры
    4. Угол поворота для того места на которое должна смотреть камера.
    5. На каком расстоянии должна быть точка на которую смотрит камера.
    6. Относительная высота точки куда смотрит камера

    1. enum CAM_INFO
    2. {
    3. Float:CAM_POS_ANGLE,
    4. Float:CAM_POS_DISTANCE,
    5. Float:CAM_POS_HEIGHT,
    6. Float:CAM_LOOK_AT_ANGLE,
    7. Float:CAM_LOOK_AT_DISTANCE,
    8. Float:CAM_LOOK_AT_HEIGHT
    9. }
    10. new CamInfo[40][CAM_INFO] = {
    11. {90.0, 5.0, 1.0, 90.0, 1.0, 0.0}
    12. };
    13.  
    14. ShowPlayerDialog(playerid, 37, DIALOG_STYLE_LIST, "Test", "Вид с боку", "Выбрать", "Закрыть");
    15.  
    16. if(dialogid == 37)
    17. {
    18. new
    19. Float:x, Float:y, Float:z,
    20. Float:a;
    21.  
    22. GetVehiclePos(vehicleid, x, y, z);
    23. GetVehicleZAngle(vehicleid, a);
    24.  
    25. new
    26. Float:sin, Float:cos;
    27.  
    28. sin = x + floatmul(CamInfo[listitem][CAM_POS_DISTANCE], floatsin(CamInfo[listitem][CAM_POS_ANGLE] + a, degrees)));
    29. cos = y + floatmul(CamInfo[listitem][CAM_POS_DISTANCE], floatcos(CamInfo[listitem][CAM_POS_ANGLE] + a, degrees)));
    30. SetPlayerCameraPos(playerid, sin, cos, z + CamInfo[listitem][CAM_POS_HEIGHT]);
    31.  
    32. sin = x + floatmul(CamInfo[listitem][CAM_LOOK_AT_DISTANCE], floatsin(CamInfo[listitem][CAM_LOOK_AT_ANGLE]+ a, degrees)));
    33. cos = y + floatmul(CamInfo[listitem][CAM_LOOK_AT_DISTANCE], floatcos(CamInfo[listitem][CAM_LOOK_AT_ANGLE]+ a, degrees)));
    34. SetPlayerCameraLookAt(playerid, sin, cos, z + CamInfo[listitem][CAM_POS_HEIGHT]);
    35. }


    Если же ты в том массиве хранишь относительные координаты, то они будут некоректные для разных уголов поворота машины.
    Последний раз редактировалось Seviel; 22.11.2020 в 21:18.

  10. Пользователь сказал cпасибо:
    Pro_Coder (23.11.2020)
  11. #9
    Аватар для Pro_Coder
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.10.2020
    Сообщений
    59
    Репутация:
    2 ±
    Решил, расставил индивидуально углы. Тему можно закрыть

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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