Add Morph Target (#180)

Support both glTF 2.0 and wiscene format.
This commit is contained in:
XthemeCore
2020-11-07 02:12:51 +07:00
committed by GitHub
parent 0786020843
commit 2559f88c2e
8 changed files with 112 additions and 1 deletions
+37
View File
@@ -513,6 +513,32 @@ void MeshWindow::Create(EditorComponent* editor)
AddWidget(&terrainGenButton);
morphTargetCombo.Create("Morph Target:");
morphTargetCombo.SetSize(XMFLOAT2(100, hei));
morphTargetCombo.SetPos(XMFLOAT2(x + 280, y += step));
morphTargetCombo.OnSelect([&](wiEventArgs args) {
MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity);
if (mesh != nullptr && args.iValue < mesh->targets.size())
{
morphTargetSlider.SetValue(mesh->targets[args.iValue].weight);
}
});
morphTargetCombo.SetTooltip("Choose a morph target to edit weight.");
AddWidget(&morphTargetCombo);
morphTargetSlider.Create(0, 1, 0, 100000, "Weight: ");
morphTargetSlider.SetTooltip("Set the weight for morph target");
morphTargetSlider.SetSize(XMFLOAT2(100, hei));
morphTargetSlider.SetPos(XMFLOAT2(x + 280, y += step));
morphTargetSlider.OnSlide([&](wiEventArgs args) {
MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity);
if (mesh != nullptr && morphTargetCombo.GetSelected() < mesh->targets.size())
{
mesh->targets[morphTargetCombo.GetSelected()].weight = args.fValue;
mesh->CreateRenderData();
}
});
AddWidget(&morphTargetSlider);
Translate(XMFLOAT3((float)wiRenderer::GetDevice()->GetScreenWidth() - 1000, 80, 0));
SetVisible(false);
@@ -603,6 +629,17 @@ void MeshWindow::SetEntity(Entity entity)
massSlider.SetValue(physicscomponent->mass);
frictionSlider.SetValue(physicscomponent->friction);
}
uint8_t selected = morphTargetCombo.GetSelected();
morphTargetCombo.ClearItems();
for (size_t i = 0; i < mesh->targets.size(); i++)
{
morphTargetCombo.AddItem(std::to_string(i).c_str());
}
if (selected < mesh->targets.size())
{
morphTargetCombo.SetSelected(selected);
}
SetEnabled(true);
}
else