MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Falcor / handleActions

Method handleActions

Source/RenderPasses/SDFEditor/SDFEditor.cpp:665–931  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

663}
664
665void SDFEditor::handleActions()
666{
667 if (!mpScene)
668 return;
669
670 const AnimationController* pAnimationController = mpScene->getAnimationController();
671 const GeometryInstanceData& instance = mpScene->getGeometryInstance(mCurrentEdit.instanceID);
672 const float4x4& instanceTransform = pAnimationController->getGlobalMatrices()[instance.globalMatrixID];
673 Ray ray = mpScene->getCamera()->computeRayPinhole(uint2(mUI2D.currentMousePosition), mFrameDim, false);
674
675 // Rescale grid instance if the grid resolution has changed.
676 float resolutionScalingFactor = mCurrentEdit.pSDFGrid->getResolutionScalingFactor();
677 if (std::fabs(resolutionScalingFactor - 1.0f) > FLT_EPSILON)
678 {
679 float3 scale;
680 quatf rotation;
681 float3 translation;
682 float3 skew;
683 float4 perspective;
684 math::decompose(instanceTransform, scale, rotation, translation, skew, perspective);
685
686 Transform finalTranform;
687 finalTranform.setTranslation(translation);
688 finalTranform.setRotation(rotation);
689 finalTranform.setScaling(scale * resolutionScalingFactor);
690
691 mpScene->updateNodeTransform(instance.globalMatrixID, finalTranform.getMatrix());
692 mCurrentEdit.pSDFGrid->resetResolutionScalingFactor();
693 }
694
695 // Handle transformation of the SDF grid instance.
696 if (mInstanceTransformationEdit.state != TransformationState::None)
697 {
698 // Initiating starting transformation.
699 if (mInstanceTransformationEdit.prevState == TransformationState::None)
700 {
701 mInstanceTransformationEdit.scrollTotal = 0.0f;
702
703 float3 scale;
704 quatf rotation;
705 float3 translation;
706 float3 skew;
707 float4 perspective;
708 math::decompose(instanceTransform, scale, rotation, translation, skew, perspective);
709
710 mInstanceTransformationEdit.startTransform.setTranslation(translation);
711 mInstanceTransformationEdit.startTransform.setRotation(rotation);
712 mInstanceTransformationEdit.startTransform.setScaling(scale);
713
714 float3 deltaCenter = translation - ray.origin;
715 float3 planeNormal = -normalize(mpScene->getCamera()->getTarget() - mpScene->getCamera()->getPosition());
716
717 float startT = dot(deltaCenter, planeNormal) / dot(ray.dir, planeNormal);
718 mInstanceTransformationEdit.startPlanePos = ray.origin + ray.dir * startT;
719 mInstanceTransformationEdit.startMousePos = mUI2D.currentMousePosition;
720
721 float3 arbitraryVectorNotOrthToPlane =
722 std::abs(planeNormal.z) < FLT_EPSILON ? float3(0.0f, 0.0f, 1.0f) : float3(1.0f, 0.0f, 0.0f);

Callers

nothing calls this directly

Calls 15

decomposeFunction · 0.85
quatFromAngleAxisFunction · 0.85
transposeFunction · 0.85
transformPointFunction · 0.85
matrixFromDiagonalFunction · 0.85
computeRayPinholeMethod · 0.80
setTranslationMethod · 0.80
setScalingMethod · 0.80
updateNodeTransformMethod · 0.80
normalizeFunction · 0.50
dotFunction · 0.50
absFunction · 0.50

Tested by

no test coverage detected