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

Method handlePicking

Source/RenderPasses/SDFEditor/SDFEditor.cpp:1176–1208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1174}
1175
1176bool SDFEditor::handlePicking(const float2& currentMousePos, float3& localPos)
1177{
1178 if (!mpScene)
1179 return false;
1180
1181 // Create picking ray.
1182 float3 rayOrigin = mpCamera->getPosition();
1183
1184 const CameraData& cameraData = mpCamera->getData();
1185 float2 ndc = float2(-1.0f, 1.0f) + float2(2.0f, -2.0f) * (currentMousePos + float2(0.5f, 0.5f)) / float2(mFrameDim);
1186 float3 rayDir = normalize(ndc.x * cameraData.cameraU + ndc.y * cameraData.cameraV + cameraData.cameraW);
1187
1188 float3 iSectPosition;
1189 if (mUI2D.gridPlane.active) // Grid is on, so we pick on the grid.
1190 {
1191 float t = mUI2D.gridPlane.intersect(rayOrigin, rayDir);
1192 iSectPosition = rayOrigin + rayDir * t;
1193 }
1194 else if (mAllowEditingOnOtherSurfaces || mPickingInfo.instanceID == mCurrentEdit.instanceID)
1195 {
1196 iSectPosition = rayOrigin + rayDir * mPickingInfo.distance;
1197 }
1198 else
1199 {
1200 return false;
1201 }
1202
1203 const GeometryInstanceData& instance = mpScene->getGeometryInstance(mCurrentEdit.instanceID);
1204 const AnimationController* pAnimationController = mpScene->getAnimationController();
1205 const float4x4& invTransposeInstanceTransform = pAnimationController->getInvTransposeGlobalMatrices()[instance.globalMatrixID];
1206 localPos = transformPoint(transpose(invTransposeInstanceTransform), iSectPosition);
1207 return true;
1208}
1209
1210void SDFEditor::execute(RenderContext* pRenderContext, const RenderData& renderData)
1211{

Callers

nothing calls this directly

Calls 5

transformPointFunction · 0.85
transposeFunction · 0.85
normalizeFunction · 0.50
getPositionMethod · 0.45
getDataMethod · 0.45

Tested by

no test coverage detected