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

Method updateSymmetryPrimitive

Source/RenderPasses/SDFEditor/SDFEditor.cpp:305–337  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

303}
304
305void SDFEditor::updateSymmetryPrimitive()
306{
307 const AnimationController* pAnimationController = mpScene->getAnimationController();
308 const GeometryInstanceData& instance = mpScene->getGeometryInstance(mCurrentEdit.instanceID);
309 float4x4 invInstanceTransform = transpose(pAnimationController->getInvTransposeGlobalMatrices()[instance.globalMatrixID]);
310
311 const float3& instanceLocalPrimitivePos = mCurrentEdit.primitive.translation;
312 float3 instanceLocalPlanePosition = transformPoint(invInstanceTransform, mUI2D.symmetryPlane.position);
313 float3 instanceLocalPlaneNormal = normalize(transformVector(invInstanceTransform, mUI2D.symmetryPlane.normal));
314 float3 projInstanceLocalPrimitivePos =
315 (instanceLocalPrimitivePos - dot(instanceLocalPrimitivePos, instanceLocalPlaneNormal) * instanceLocalPlaneNormal);
316 float3 projInstanceLocalPlanePos = dot(instanceLocalPlanePosition, instanceLocalPlaneNormal) * instanceLocalPlaneNormal;
317
318 float3 reflectedInstanceLocalPos;
319 if (length(projInstanceLocalPrimitivePos) > 0.0f)
320 {
321 reflectedInstanceLocalPos =
322 math::reflect(-(instanceLocalPrimitivePos - projInstanceLocalPlanePos), normalize(projInstanceLocalPrimitivePos));
323 }
324 else
325 {
326 reflectedInstanceLocalPos = length(instanceLocalPrimitivePos - projInstanceLocalPlanePos) * -instanceLocalPlaneNormal;
327 }
328
329 reflectedInstanceLocalPos += projInstanceLocalPlanePos;
330
331 float3x3 symmetricPrimitiveTransform = float3x3(inverse(mCurrentEdit.primitive.invRotationScale));
332 symmetricPrimitiveTransform = math::rotate(float4x4(symmetricPrimitiveTransform), float(M_PI), instanceLocalPlaneNormal);
333
334 mCurrentEdit.symmetryPrimitive = mCurrentEdit.primitive;
335 mCurrentEdit.symmetryPrimitive.translation = reflectedInstanceLocalPos;
336 mCurrentEdit.symmetryPrimitive.invRotationScale = inverse(float3x3(symmetricPrimitiveTransform));
337}
338
339void SDFEditor::setupPrimitiveAndOperation(
340 const float2& center,

Callers

nothing calls this directly

Calls 9

transposeFunction · 0.85
transformPointFunction · 0.85
reflectFunction · 0.85
rotateFunction · 0.85
normalizeFunction · 0.50
transformVectorFunction · 0.50
dotFunction · 0.50
lengthFunction · 0.50
inverseFunction · 0.50

Tested by

no test coverage detected