Вопрос Отрисовка скелетов имгуй.

Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Добрый день! Как можно сделать так, что бы линия рисовалась, например по Bip01_L_Hand, Bip01_L_Forearm. Задаю эти кости в качестве координат, не работает.
C++:
ImGui::GetBackgroundDrawList()->AddLine(ImVec2(Bip01_L_Hand, Bip01_L_Hand), ImVec2(Bip01_L_Forearm, Bip01_L_Forearm), ImColor(255, 255, 255, 255));
 
Начинающий
Статус
Оффлайн
Регистрация
5 Ноя 2023
Сообщения
20
Реакции[?]
1
Поинты[?]
1K
Добрый день! Как можно сделать так, что бы линия рисовалась, например по Bip01_L_Hand, Bip01_L_Forearm. Задаю эти кости в качестве координат, не работает.
C++:
ImGui::GetBackgroundDrawList()->AddLine(ImVec2(Bip01_L_Hand, Bip01_L_Hand), ImVec2(Bip01_L_Forearm, Bip01_L_Forearm), ImColor(255, 255, 255, 255));
и что нам этот кусок кода дает ? Ты хотя бы world to screen делаешь ? и что за Bip01_L_Hand , ты позицию косточки получал хотя бы ? слишком много информации предоставил , давай поменьше
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
и что нам этот кусок кода дает ? Ты хотя бы world to screen делаешь ? и что за Bip01_L_Hand , ты позицию косточки получал хотя бы ? слишком много информации предоставил , давай поменьше
Как получить позицию кости?
C++:
if (pRenderer->WorldToScreen(Warface->GetPlayerPossfd(pEntity), Out))
{
    if (pFunction.skelet) {
        
        ImGui::GetBackgroundDrawList()->AddLine(ImVec2(Bip01_L_Hand, Bip01_L_Hand), ImVec2(Bip01_L_Forearm, Bip01_L_Forearm), ImColor(255, 255, 255, 255));

    }
}
 
Начинающий
Статус
Оффлайн
Регистрация
5 Ноя 2023
Сообщения
20
Реакции[?]
1
Поинты[?]
1K
Как получить позицию кости?
C++:
if (pRenderer->WorldToScreen(Warface->GetPlayerPossfd(pEntity), Out))
{
    if (pFunction.skelet) {
       
        ImGui::GetBackgroundDrawList()->AddLine(ImVec2(Bip01_L_Hand, Bip01_L_Hand), ImVec2(Bip01_L_Forearm, Bip01_L_Forearm), ImColor(255, 255, 255, 255));

    }
}
то есть ты берешь

if (pRenderer->WorldToScreen(Warface->GetPlayerPossfd(pEntity), Out))
ворд ту скринишь позицию , нно блять отображаешь в в отрисовке просто циферки ? я правильно понимаю ,что
Bip01_L_Hand и
Bip01_L_Forearm
это просто из enum class ?
 
Начинающий
Статус
Оффлайн
Регистрация
2 Фев 2022
Сообщения
68
Реакции[?]
14
Поинты[?]
19K
Как получить позицию кости?
C++:
if (pRenderer->WorldToScreen(Warface->GetPlayerPossfd(pEntity), Out))
{
    if (pFunction.skelet) {
       
        ImGui::GetBackgroundDrawList()->AddLine(ImVec2(Bip01_L_Hand, Bip01_L_Hand), ImVec2(Bip01_L_Forearm, Bip01_L_Forearm), ImColor(255, 255, 255, 255));

    }
}
Чил, можешь не благодарить

C++:
Vector3 GetBonePositionByID(IEntity* pEntity, ISkeletonPose* pSkeletonPose, int boneID)
{
    Matrix34 position = pEntity->GetWorldTM();
    Matrix34 skeletonAbs = Matrix34(pSkeletonPose->GetAbsJointByID(boneID));

    Matrix34 boneMatrix = position * skeletonAbs;

    return boneMatrix.GetTranslation();
}

Vector3 GetBoneByName(IEntity* pEntity, ISkeletonPose* pSkeletonPose, const char* boneName)
{
    int boneID = pSkeletonPose->GetJointIDByName(boneName);

    if (boneID > 0)
    {
        return GetBonePositionByID(pEntity, pSkeletonPose, boneID);
    }

    return Vector3();
}

IActor* targetPlayer = pActorSystem->GetActor(pEntity->GetRawId());
IEntity* targetEntity = targetPlayer->GetEntity();

ICharacterInstance* pCharacterInstance = targetEntity->GetCharacter(0);
ISkeletonPose* pSkeletonPose = pCharacterInstance->GetISkeletonPose();

Vector3 headBone = GetBoneByName(targetEntity, pSkeletonPose, xor ("Bip01 Head"));
 
Начинающий
Статус
Оффлайн
Регистрация
27 Ноя 2022
Сообщения
2
Реакции[?]
0
Поинты[?]
0
Добрый день! Как можно сделать так, что бы линия рисовалась, например по Bip01_L_Hand, Bip01_L_Forearm. Задаю эти кости в качестве координат, не работает.
C++:
ImGui::GetBackgroundDrawList()->AddLine(ImVec2(Bip01_L_Hand, Bip01_L_Hand), ImVec2(Bip01_L_Forearm, Bip01_L_Forearm), ImColor(255, 255, 255, 255));
// Предположим, что Bip01_L_Hand и Bip01_L_Forearm представляют собой координаты X и Y для точек руки и предплечья. ImVec2 start(Bip01_L_Hand_X, Bip01_L_Hand_Y); ImVec2 end(Bip01_L_Forearm_X, Bip01_L_Forearm_Y); ImGui::GetBackgroundDrawList()->AddLine(start, end, ImColor(255, 255, 255, 255));
 
Начинающий
Статус
Оффлайн
Регистрация
2 Фев 2022
Сообщения
68
Реакции[?]
14
Поинты[?]
19K
// Предположим, что Bip01_L_Hand и Bip01_L_Forearm представляют собой координаты X и Y для точек руки и предплечья. ImVec2 start(Bip01_L_Hand_X, Bip01_L_Hand_Y); ImVec2 end(Bip01_L_Forearm_X, Bip01_L_Forearm_Y); ImGui::GetBackgroundDrawList()->AddLine(start, end, ImColor(255, 255, 255, 255));
Так точно :seemsgood:
 
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
// Предположим, что Bip01_L_Hand и Bip01_L_Forearm представляют собой координаты X и Y для точек руки и предплечья. ImVec2 start(Bip01_L_Hand_X, Bip01_L_Hand_Y); ImVec2 end(Bip01_L_Forearm_X, Bip01_L_Forearm_Y); ImGui::GetBackgroundDrawList()->AddLine(start, end, ImColor(255, 255, 255, 255));
ну это же бред...
 
Начинающий
Статус
Оффлайн
Регистрация
2 Фев 2022
Сообщения
68
Реакции[?]
14
Поинты[?]
19K
Пользователь
Статус
Оффлайн
Регистрация
5 Июл 2022
Сообщения
996
Реакции[?]
86
Поинты[?]
23K
Что бред? Так и работает дефолтная отрисовка скелетов, получаешь старт + энд позицию и потом вызываешь драв лайн, все.
да это понятно. но для начала то надо поулчить позиуцию костей
 
Сверху Снизу