Skip to content

Commit d36e3e0

Browse files
committed
interactivity: added support for TransformPoint and InverseTransformPointer for main camera
1 parent b5336bf commit d36e3e0

File tree

4 files changed

+76
-22
lines changed

4 files changed

+76
-22
lines changed

Editor/Scripts/Interactivity/VisualScriptingExport/UnitExporters/Helpers/TransformHelpersVS.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,52 @@
11
using Unity.VisualScripting;
2+
using UnityEngine;
23
using UnityGLTF.Interactivity.Export;
4+
using UnityGLTF.Interactivity.Schema;
35

46
namespace UnityGLTF.Interactivity.VisualScripting.Export
57
{
68
public class TransformHelpersVS : TransformHelpers
79
{
10+
public static void GetWorldPointFromLocalPoint(INodeExporter exporter, ValueInput target,
11+
out ValueInRef localPoint,
12+
out ValueOutRef worldPoint)
13+
{
14+
if (UnitsHelper.IsMainCameraInInput(target))
15+
{
16+
var worldMatrix = exporter.CreateNode<Pointer_GetNode>();
17+
worldMatrix.FirstValueOut().ExpectedType(ExpectedType.Float4x4);
18+
PointersHelper.AddPointerConfig(worldMatrix, ActiveCameraGlobalMatrix, GltfTypes.Float4x4);
19+
20+
GetWorldPointFromLocalPoint(exporter, worldMatrix.FirstValueOut(), out localPoint, out worldPoint);
21+
}
22+
else
23+
{
24+
GetWorldPointFromLocalPoint(exporter, out var targetInput, out localPoint, out worldPoint);
25+
targetInput.MapToInputPort(target);
26+
return;
27+
}
28+
}
29+
30+
public static void GetLocalPointFromWorldPoint(INodeExporter exporter, ValueInput target,
31+
out ValueInRef localPoint,
32+
out ValueOutRef worldPoint)
33+
{
34+
if (UnitsHelper.IsMainCameraInInput(target))
35+
{
36+
var worldMatrix = exporter.CreateNode<Pointer_GetNode>();
37+
worldMatrix.FirstValueOut().ExpectedType(ExpectedType.Float4x4);
38+
PointersHelper.AddPointerConfig(worldMatrix, ActiveCameraGlobalMatrix, GltfTypes.Float4x4);
39+
40+
GetLocalPointFromWorldPoint(exporter, worldMatrix.FirstValueOut(), out localPoint, out worldPoint);
41+
}
42+
else
43+
{
44+
GetLocalPointFromWorldPoint(exporter, out var targetInput, out localPoint, out worldPoint);
45+
targetInput.MapToInputPort(target);
46+
return;
47+
}
48+
}
49+
850
public static void GetLocalScale(UnitExporter unitExporter, ValueInput target,
951
out ValueOutRef scaleOutput)
1052
{

Editor/Scripts/Interactivity/VisualScriptingExport/UnitExporters/Transform/Transform_InverseTransformPointUnitExport.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ public bool InitializeInteractivityNodes(UnitExporter unitExporter)
2222
{
2323
var invokeUnit = unitExporter.unit as InvokeMember;
2424

25-
TransformHelpers.GetLocalPointFromWorldPoint(unitExporter, out var targetRef, out var worldPointSocket, out var localPoint);
26-
27-
targetRef.MapToInputPort(invokeUnit.target);
28-
25+
TransformHelpersVS.GetLocalPointFromWorldPoint(unitExporter, invokeUnit.target, out var worldPointSocket, out var localPoint);
26+
2927
if (invokeUnit.valueInputs.Count > 2)
3028
{
3129
var combine = unitExporter.CreateNode<Math_Combine3Node>();

Editor/Scripts/Interactivity/VisualScriptingExport/UnitExporters/Transform/Transform_TransformPointUnitExport.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@ public bool InitializeInteractivityNodes(UnitExporter unitExporter)
2222
{
2323
var invokeUnit = unitExporter.unit as InvokeMember;
2424

25-
TransformHelpers.GetWorldPointFromLocalPoint(unitExporter, out var targetRef, out var localPointSocket, out var worldPointSocket);
26-
27-
targetRef.MapToInputPort(invokeUnit.target);
28-
25+
TransformHelpersVS.GetWorldPointFromLocalPoint(unitExporter, invokeUnit.target, out var localPointSocket, out var worldPointSocket);
26+
2927
if (invokeUnit.valueInputs.Count > 2)
3028
{
3129
var combine = unitExporter.CreateNode<Math_Combine3Node>();

Runtime/Scripts/Interactivity/Export/Helpers/TransformHelpers.cs

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ public class TransformHelpers
77
{
88
public static string ActiveCameraPositionPointer = "/extensions/KHR_interactivity/activeCamera/position";
99
public static string ActiveCameraRotationPointer = "/extensions/KHR_interactivity/activeCamera/rotation";
10-
10+
public static string ActiveCameraGlobalMatrix = "/extensions/KHR_interactivity/activeCamera/globalMatrix";
11+
public static string ActiveCameraMatrix = "/extensions/KHR_interactivity/activeCamera/matrix";
12+
1113
public static void GetLocalScale(INodeExporter exporter, out ValueInRef target,
1214
out ValueOutRef scaleOutput)
1315
{
@@ -324,22 +326,17 @@ public static void GetWorldPosition(INodeExporter exporter, out ValueInRef targe
324326

325327
worldPosition = convertedOutput;
326328
}
327-
328-
public static void GetWorldPointFromLocalPoint(INodeExporter exporter, out ValueInRef target, out ValueInRef localPoint,
329+
330+
public static void GetWorldPointFromLocalPoint(INodeExporter exporter, ValueOutRef worldMatrix,
331+
out ValueInRef localPoint,
329332
out ValueOutRef worldPoint)
330333
{
331-
var worldMatrix = exporter.CreateNode<Pointer_GetNode>();
332-
worldMatrix.FirstValueOut().ExpectedType(ExpectedType.Float4x4);
333-
PointersHelper.SetupPointerTemplateAndTargetInput(worldMatrix, PointersHelper.IdPointerNodeIndex,
334-
"/nodes/{" + PointersHelper.IdPointerNodeIndex + "}/globalMatrix", GltfTypes.Float4x4);
335-
target = worldMatrix.ValueIn(PointersHelper.IdPointerNodeIndex);
336-
337334
var trs = exporter.CreateNode<Math_MatComposeNode>();
338335
if (exporter.Context.addUnityGltfSpaceConversion)
339336
{
340-
SpaceConversionHelpers.AddSpaceConversion(exporter, out var unvconvertedLocalPoint,
337+
SpaceConversionHelpers.AddSpaceConversion(exporter, out var unconvertedLocalPoint,
341338
out var localPointConverted);
342-
localPoint = unvconvertedLocalPoint;
339+
localPoint = unconvertedLocalPoint;
343340
trs.ValueIn(Math_MatComposeNode.IdInputTranslation).ConnectToSource(localPointConverted);
344341
}
345342
else
@@ -349,7 +346,7 @@ public static void GetWorldPointFromLocalPoint(INodeExporter exporter, out Value
349346
trs.ValueIn(Math_MatComposeNode.IdInputScale).SetValue(Vector3.one);
350347

351348
var matrixMultiply = exporter.CreateNode<Math_MatMulNode>();
352-
matrixMultiply.ValueIn(Math_MatMulNode.IdValueA).ConnectToSource(worldMatrix.FirstValueOut());
349+
matrixMultiply.ValueIn(Math_MatMulNode.IdValueA).ConnectToSource(worldMatrix);
353350
matrixMultiply.ValueIn(Math_MatMulNode.IdValueB).ConnectToSource(trs.FirstValueOut());
354351

355352
var decompose = exporter.CreateNode<Math_MatDecomposeNode>();
@@ -367,8 +364,21 @@ public static void GetWorldPointFromLocalPoint(INodeExporter exporter, out Value
367364

368365
worldPoint = convertedOutput;
369366
}
367+
368+
public static void GetWorldPointFromLocalPoint(INodeExporter exporter, out ValueInRef target, out ValueInRef localPoint,
369+
out ValueOutRef worldPoint)
370+
{
371+
var worldMatrix = exporter.CreateNode<Pointer_GetNode>();
372+
worldMatrix.FirstValueOut().ExpectedType(ExpectedType.Float4x4);
373+
PointersHelper.SetupPointerTemplateAndTargetInput(worldMatrix, PointersHelper.IdPointerNodeIndex,
374+
"/nodes/{" + PointersHelper.IdPointerNodeIndex + "}/globalMatrix", GltfTypes.Float4x4);
375+
target = worldMatrix.ValueIn(PointersHelper.IdPointerNodeIndex);
376+
377+
GetWorldPointFromLocalPoint(exporter, worldMatrix.FirstValueOut(), out localPoint, out worldPoint);
378+
}
370379

371-
public static void GetLocalPointFromWorldPoint(INodeExporter exporter, out ValueInRef target, out ValueInRef worldPoint,
380+
public static void GetLocalPointFromWorldPoint(INodeExporter exporter, out ValueInRef target,
381+
out ValueInRef worldPoint,
372382
out ValueOutRef localPoint)
373383
{
374384
var worldMatrix = exporter.CreateNode<Pointer_GetNode>();
@@ -377,8 +387,14 @@ public static void GetLocalPointFromWorldPoint(INodeExporter exporter, out Value
377387
"/nodes/{" + PointersHelper.IdPointerNodeIndex + "}/globalMatrix", GltfTypes.Float4x4);
378388
target = worldMatrix.ValueIn(PointersHelper.IdPointerNodeIndex);
379389

390+
GetLocalPointFromWorldPoint(exporter, worldMatrix.FirstValueOut(), out worldPoint, out localPoint);
391+
}
392+
393+
public static void GetLocalPointFromWorldPoint(INodeExporter exporter, ValueOutRef worldMatrix, out ValueInRef worldPoint,
394+
out ValueOutRef localPoint)
395+
{
380396
var inverseMatrix = exporter.CreateNode<Math_InverseNode>();
381-
inverseMatrix.ValueIn(Math_InverseNode.IdValueA).ConnectToSource(worldMatrix.FirstValueOut());
397+
inverseMatrix.ValueIn(Math_InverseNode.IdValueA).ConnectToSource(worldMatrix);
382398

383399
var trs = exporter.CreateNode<Math_MatComposeNode>();
384400
if (exporter.Context.addUnityGltfSpaceConversion)

0 commit comments

Comments
 (0)