PDA

Просмотр полной версии : [Вопрос] учет перевернутых координат сампа



na4uMy4Ka
07.04.2022, 11:41
привет, есть некий объект, нужно относительно него вычислить координаты для создания другого объекта. все оффсеты относительно поворота получены, при создании этих объектов в 2х сторонах света - все нормально, при создании в 2х других - нет, связано это скорее всего с перевернутыми осями в игре, вопрос, как их учитывать верно?

$continue$
07.04.2022, 16:58
привет, есть некий объект, нужно относительно него вычислить координаты для создания другого объекта. все оффсеты относительно поворота получены, при создании этих объектов в 2х сторонах света - все нормально, при создании в 2х других - нет, связано это скорее всего с перевернутыми осями в игре, вопрос, как их учитывать верно?


покажи код, который у тебя есть

na4uMy4Ka
07.04.2022, 19:57
new Float:sin = floatsin(-main_object_z_rot, degrees);
new Float:cos = floatcos(-main_object_z_rot, degrees);

new_x = main_object_x + cos * offset_x - sin * offset_y;
new_y = main_object_y + sin * offset_x + cos * offset_y;

obj = CreateDynamicObject(1234, new_x, new_y, main_object_z_rot, 0.0, 0.0, 0.0, world, interior);

$continue$
08.04.2022, 15:52
весь код, а не отгрызками

na4uMy4Ka
08.04.2022, 23:00
а для чего больше кода? есть один объект который имеет позицию и повороты относительно осей, есть второй объект который нужно выставить относительно первого, вопрос, как правильно учитывать смещенные оси сампа?

$continue$
09.04.2022, 12:59
а для чего больше кода? есть один объект который имеет позицию и повороты относительно осей, есть второй объект который нужно выставить относительно первого, вопрос, как правильно учитывать смещенные оси сампа?

Чтобы посмотреть, что ты вообще делаешь? И поиграться самому в игре перед тем как помочь?

Salik_Davince
19.04.2022, 13:25
Актуально ? Такой же вопрос, вращаю объект и 2й объект меняет ось в не нужную или береи некорректную ось/позицию к первому объекту.

Примерная функция/команда:


CMD:test(playerid, params[])
{
new radarObject;
SendClientMessage(playerid, -1, "Edited Mode");
radarObject = CreateDynamicObject(18880, x, y, z+0.35, 0.0, 0.0, 0.0);
return true;
}

Паблик OnPlayerEditDynamicObject -

public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
if(response == 1)
{
SendClientMessage(playerid, -1, !"Radar ustanovlen!");

tmpobjid = CreateDynamicObject(19482, x, y, z + 7, 0.000000, 0.000000, 90.700019);
SetDynamicObjectMaterialText(tmpobjid, 0, "120km/h", 130, "Arial", 90, 1, 0xFFFFFFFF, 0x00000000, 1);

tmpobjid = CreateDynamicObject(19482, x, y, z + 7, 0.000000, 0.000000, rz + 90.700019);//2 test
SetDynamicObjectMaterialText(tmpobjid, 0, "130km/h", 130, "Arial", 90, 1, 0xFFFFFFFF, 0x00000000, 1);
}
}


И как вообще вычислить смещение, с машиной и игроком ясное, но вот с объектом, не понятно.

$continue$
19.04.2022, 20:01
Актуально ? Такой же вопрос, вращаю объект и 2й объект меняет ось в не нужную или береи некорректную ось/позицию к первому объекту.

Примерная функция/команда:


CMD:test(playerid, params[])
{
new radarObject;
SendClientMessage(playerid, -1, "Edited Mode");
radarObject = CreateDynamicObject(18880, x, y, z+0.35, 0.0, 0.0, 0.0);
return true;
}

Паблик OnPlayerEditDynamicObject -

public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
if(response == 1)
{
SendClientMessage(playerid, -1, !"Radar ustanovlen!");

tmpobjid = CreateDynamicObject(19482, x, y, z + 7, 0.000000, 0.000000, 90.700019);
SetDynamicObjectMaterialText(tmpobjid, 0, "120km/h", 130, "Arial", 90, 1, 0xFFFFFFFF, 0x00000000, 1);

tmpobjid = CreateDynamicObject(19482, x, y, z + 7, 0.000000, 0.000000, rz + 90.700019);//2 test
SetDynamicObjectMaterialText(tmpobjid, 0, "130km/h", 130, "Arial", 90, 1, 0xFFFFFFFF, 0x00000000, 1);
}
}


И как вообще вычислить смещение, с машиной и игроком ясное, но вот с объектом, не понятно.

Что за смещение? Тебе нужно делать перемещение префаба? (группового объекта (состоит из нескольких составных частей)), если да, то перемещение делается не так, не говоря уже, а повороте. Поворот вообще делается через матрицу поворота.

Salik_Davince
20.04.2022, 12:03
Так точно, групповые объекты префаба, можно что нибудь в примерах? Попытался поискать в TextureStudio, но толком не нашёл, либо кое что упустил.

Salik_Davince
20.04.2022, 13:07
UPD. покопался нашёл, функция - AttachPoint, автору вопроса она так же не помешает, и скорее решение в нем.

$continue$
20.04.2022, 16:06
UPD. покопался нашёл, функция - AttachPoint, автору вопроса она так же не помешает, и скорее решение в нем.

Ну если тебя устраивает оно, то используй ее. Но вообще это можно сделать без attach'а.

P.S: готовое есть, но писалось для проекта и код нельзя сливать.

Salik_Davince
20.04.2022, 23:42
Все же не все ахти с функций аттача, то ли я не понял её принципа действия, но хотелось бы увидеть другую реализацию, ждем-c.

$continue$
21.04.2022, 00:03
Все же не все ахти с функций аттача, то ли я не понял её принципа действия, но хотелось бы увидеть другую реализацию, ждем-c.


Ну для начала тебе нужно скомбинировать углы, сделать это можно через матрицу поворота. Дальше нужно получить из матрицы обратные углы, сделать это можно через эту формулу:

https://i.imgur.com/m4Y4Bb4.png

Матрица поворота для zxy:

https://i.imgur.com/JDTarYv.png

Вся информация взята:

https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix

P.S: С позцией все намного проще. Нужно просто вычислить оффсеты от главного объекта.
P.S.S: У меня ушло 3 дня на дебаг всего этого. Удачного кодинга :)