From 1fdff45898bbac854d613f21fb3c39a11d67c7f1 Mon Sep 17 00:00:00 2001 From: Kozmeker Date: Mon, 25 Nov 2024 03:57:34 +0100 Subject: [PATCH] added Placeholder gizmo for nonmeshed Translokator Instances --- Mafia2Libs/Forms/MapEditor.cs | 49 ++++++-- Mafia2Libs/MafiaToolkit.csproj | 6 + Mafia2Libs/Rendering/Core/InstanceGizmo.cs | 114 ++++++++++++++++++ .../Rendering/Graphics/GraphicsClass.cs | 56 +++++++++ .../Graphics/RenderTypes/RenderModel.cs | 11 +- Mafia2Libs/Resources/Translokator.m2t | Bin 0 -> 1463 bytes Mafia2Libs/Resources/Translokator_Texture.dds | Bin 0 -> 699192 bytes 7 files changed, 223 insertions(+), 13 deletions(-) create mode 100644 Mafia2Libs/Rendering/Core/InstanceGizmo.cs create mode 100644 Mafia2Libs/Resources/Translokator.m2t create mode 100644 Mafia2Libs/Resources/Translokator_Texture.dds diff --git a/Mafia2Libs/Forms/MapEditor.cs b/Mafia2Libs/Forms/MapEditor.cs index 5aa7e2a4..922d95c4 100644 --- a/Mafia2Libs/Forms/MapEditor.cs +++ b/Mafia2Libs/Forms/MapEditor.cs @@ -1104,11 +1104,15 @@ private void BuildRenderObjects() if (groupRef != null && hasMesh) { - for (int i = 0; i < groupRef.Children.Count; i++) + for (int i = 0; i < groupRef.Children.Count; i++)//i dont think this for cycle is needed really if done right { InstanceTranslokatorPart(assets, groupRef.Children[i], Matrix4x4.Identity, instance); } } + else + { + Graphics.InstanceGizmo.InstanceTranslokator(instance); + } TreeNode instanceNode = new TreeNode(obj.Name + " " + x); instanceNode.Tag = instance; @@ -1431,6 +1435,10 @@ private void ApplyEntryChanges(object sender, EventArgs e) Graphics.UpdateInstanceBuffers(modelsToUpdate); } } + else + { + Graphics.InstanceGizmo.UpdateInstanceBuffer(instance, Graphics.GetId3D11Device()); + } } } } @@ -1598,7 +1606,7 @@ private void Pick(int sx, int sy) { dSceneTree.SelectedNode = nodes[0]; - if (dSceneTree.SelectedNode.Tag is FrameObjectBase obj)//dostat se na instance, ne na ref frame, od toho je jump, když na nějakej instance šáhnu, abych v tree viděl jakej to přesně je + if (dSceneTree.SelectedNode.Tag is FrameObjectBase obj) { int Parent1Index = obj.ParentIndex1.Index; int Parent2Index = obj.ParentIndex2.Index; @@ -1838,6 +1846,10 @@ private void OnPropertyValueChanged(object s, PropertyValueChangedEventArgs e) Graphics.UpdateInstanceBuffers(modelsToUpdate); } } + else + { + Graphics.InstanceGizmo.UpdateInstanceBuffer(instance, Graphics.GetId3D11Device()); + } } pGrid.Refresh(); @@ -2671,13 +2683,17 @@ private void TranslokatorNewInstance(TreeNode parentObj, Instance old) Object parent = parentObj.Tag as Object; FrameObjectBase frameref = SceneData.FrameResource.GetObjectByHash(parent.Name.Hash); - if (frameref != null && frameref.HasMeshObject())//todo nonframerefs solution once they are managed + if (frameref != null && frameref.HasMeshObject()) { for (int i = 0; i < frameref.Children.Count; i++) { InstanceTranslokatorPart(Graphics.Assets, frameref.Children[i], Matrix4x4.Identity, newInstance,true); } } + else + { + Graphics.InstanceGizmo.InstanceTranslokator(newInstance,Graphics.GetId3D11Device()); + } dSceneTree.AddToTree(newInstanceNode,parentObj); } @@ -2685,10 +2701,6 @@ private void TranslokatorNewInstance(TreeNode parentObj, Instance old) private void UpdateInstanceVisualisation(TreeNode instanceNode, Object trObject, bool visibility) { FrameObjectBase groupRef = SceneData.FrameResource.GetObjectByHash(trObject.Name.Hash); - if (groupRef == null)//todo: once placeholder is implemented, reword this to work with it - { - return; - } Instance instance = instanceNode.Tag as Instance; if (visibility) @@ -2700,10 +2712,21 @@ private void UpdateInstanceVisualisation(TreeNode instanceNode, Object trObject, InstanceTranslokatorPart(Graphics.Assets, groupRef.Children[i], Matrix4x4.Identity, instance,true); } } + else + { + Graphics.InstanceGizmo.InstanceTranslokator(instance,Graphics.GetId3D11Device()); + } } else { - Graphics.DeleteInstance(groupRef,instance.RefID); + if (groupRef != null && groupRef.HasMeshObject()) + { + Graphics.DeleteInstance(groupRef,instance.RefID); + } + else + { + Graphics.DeleteInstance(instance.RefID); + } } } @@ -2757,12 +2780,14 @@ private void DeleteTRInstance(TreeNode instanceNode) Instance instance = instanceNode.Tag as Instance; FrameObjectBase groupRef = SceneData.FrameResource.GetObjectByHash((instanceNode.Parent.Tag as Object).Name.Hash); dSceneTree.RemoveNode(instanceNode); - if (groupRef == null)//todo: once placeholder is implemented, reword this to work with it + if (groupRef != null) { - return; + Graphics.DeleteInstance(groupRef, instance.RefID); + } + else + { + Graphics.DeleteInstance(instance.RefID); } - - Graphics.DeleteInstance(groupRef, instance.RefID); } private void DeleteTRObject(TreeNode objectNode) diff --git a/Mafia2Libs/MafiaToolkit.csproj b/Mafia2Libs/MafiaToolkit.csproj index df960204..61cca918 100644 --- a/Mafia2Libs/MafiaToolkit.csproj +++ b/Mafia2Libs/MafiaToolkit.csproj @@ -85,6 +85,12 @@ + + Always + + + Always + diff --git a/Mafia2Libs/Rendering/Core/InstanceGizmo.cs b/Mafia2Libs/Rendering/Core/InstanceGizmo.cs new file mode 100644 index 00000000..24ee8317 --- /dev/null +++ b/Mafia2Libs/Rendering/Core/InstanceGizmo.cs @@ -0,0 +1,114 @@ +using Rendering.Graphics; +using System; +using System.Numerics; +using System.Runtime.CompilerServices; +using ResourceTypes.Translokator; +using Utils.Logging; +using Utils.VorticeUtils; +using Vortice.Direct3D; +using Vortice.Direct3D11; +using Vortice.Mathematics; + +namespace Rendering.Core +{ + public class InstanceGizmo + { + + // Variable for rendering + public RenderModel InstanceModel; + + public InstanceGizmo(RenderModel InModel) + { + InstanceModel = InModel; + } + + public void InitBuffers(ID3D11Device d3d, ID3D11DeviceContext d3dContext) + { + InstanceModel.InitBuffers(d3d, d3dContext);//texture should be loaded either differently or rendersingleton should precache it + InstanceModel.AOTexture = LoadTexture(d3d, d3dContext); + } + + public ID3D11ShaderResourceView LoadTexture(ID3D11Device d3d, ID3D11DeviceContext d3dContext) + { + try + { + ID3D11Resource ddsResource; + ID3D11ShaderResourceView _temp; + DDSTextureLoader.DDS_ALPHA_MODE mode; + DDSTextureLoader.CreateDDSTextureFromFile(d3d, d3dContext, "Resources/Translokator_Texture.dds", out ddsResource, out _temp, 4096, out mode); + return _temp; + } + catch + { + Log.WriteLine(string.Format("Failed to load file: {0}", "Resources/Translokator_Texture.dds"), LoggingTypes.FATAL, LogCategoryTypes.IO); + return null; + } + } + + public void UpdateInstanceBuffer(Instance instance, ID3D11Device d3d) + { + Matrix4x4 newtransform = MatrixUtils.SetMatrix(instance.Quaternion, new Vector3(0.015f,0.015f,0.015f), instance.Position); + + if (!InstanceModel.InstanceTransforms.ContainsKey(instance.RefID)) + { + InstanceModel.InstanceTransforms.Add(instance.RefID, Matrix4x4.Transpose(newtransform)); + } + else + { + InstanceModel.InstanceTransforms[instance.RefID] = Matrix4x4.Transpose(newtransform); + } + + InstanceModel.ReloadInstanceBuffer(d3d); + } + + public void UpdateBuffers(ID3D11Device d3d, ID3D11DeviceContext d3dContext) + { + InstanceModel.UpdateBuffers(d3d, d3dContext); + } + + public void Render(ID3D11Device d3d, ID3D11DeviceContext d3dContext, Camera camera)//render only instances + { + if (InstanceModel.InstanceTransforms.Count > 0) + { + VertexBufferView VertexBufferView = new VertexBufferView(InstanceModel.GetVB(), Unsafe.SizeOf(), 0);//polish so getib/vb doesnt have to be used + d3dContext.IASetVertexBuffers(0, VertexBufferView); + d3dContext.IASetIndexBuffer(InstanceModel.GetIB(), Vortice.DXGI.Format.R32_UInt, 0); + d3dContext.IASetPrimitiveTopology(PrimitiveTopology.TriangleList); + d3dContext.PSSetShaderResource(2, InstanceModel.AOTexture); + + InstanceModel.RenderInstances(d3dContext, camera, d3d); + } + } + + public void InstanceTranslokator(Instance instance,ID3D11Device device = null) + { + Matrix4x4 newtransform = new Matrix4x4(); + + newtransform = MatrixUtils.SetMatrix(instance.Quaternion, new Vector3(0.015f,0.015f,0.015f), instance.Position);//fbx to m2t enlarged the mesh so, beware gltf + + if (!InstanceModel.InstanceTransforms.ContainsKey(instance.RefID)) + { + InstanceModel.InstanceTransforms.Add(instance.RefID, Matrix4x4.Transpose(newtransform)); + if (device!=null) + { + InstanceModel.ReloadInstanceBuffer(device); + } + } + } + + public void Select(int InstanceId) + { + InstanceModel.SelectInstance(InstanceId); + } + + public void Unselect() + { + InstanceModel.UnselectInstance(); + } + + public void Shutdown() + { + InstanceModel.Shutdown(); + } + } +} diff --git a/Mafia2Libs/Rendering/Graphics/GraphicsClass.cs b/Mafia2Libs/Rendering/Graphics/GraphicsClass.cs index e00a75bf..88fd653c 100644 --- a/Mafia2Libs/Rendering/Graphics/GraphicsClass.cs +++ b/Mafia2Libs/Rendering/Graphics/GraphicsClass.cs @@ -46,6 +46,7 @@ public class GraphicsClass private RenderModel sky; private RenderModel clouds; private GizmoTool TranslationGizmo; + public InstanceGizmo InstanceGizmo; private DirectX11Class D3D; @@ -119,6 +120,13 @@ public bool PreInit(IntPtr WindowHandle) clouds.ConvertMTKToRenderModel(structure); clouds.InitBuffers(D3D.Device, D3D.DeviceContext); clouds.DoRender = false; + + RenderModel instancePlaceholder = new RenderModel(); + structure = new M2TStructure(); + structure.ReadFromM2T("Resources/Translokator.m2t"); + instancePlaceholder.ConvertMTKToRenderModel(structure); + instancePlaceholder.InitBuffers(D3D.Device,D3D.DeviceContext); + InstanceGizmo = new InstanceGizmo(instancePlaceholder); } selectionBox.SetColour(System.Drawing.Color.Red); @@ -140,6 +148,14 @@ public bool InitScene(int width, int height) sky.InitBuffers(D3D.Device, D3D.DeviceContext); sky.DoRender = WorldSettings.RenderSky; clouds.InitBuffers(D3D.Device, D3D.DeviceContext); + InstanceGizmo.InitBuffers(D3D.Device, D3D.DeviceContext); + var task = InstanceGizmo.InstanceModel.GetBVHBuildingTask(); // Maybe this function should be added to the IRenderer class instead? probably + + if (task != null) + { + BVHBuildingTasks.Add(task); + } + Input = new InputClass(); Input.Init(); return true; @@ -283,6 +299,31 @@ public PickOutParams Pick(int sx, int sy, int Width, int Height) index++; } + + foreach (var transform in InstanceGizmo.InstanceModel.InstanceTransforms) + { + var transposed = Matrix4x4.Transpose(transform.Value); + + Matrix4x4 tvWM = Matrix4x4.Identity; + Matrix4x4.Invert(transposed, out tvWM); + var localInstanceRay = new Ray( + Vector3Utils.TransformCoordinate(ray.Position, tvWM), + Vector3.TransformNormal(ray.Direction, tvWM) + ); + + if (localInstanceRay.Intersects(InstanceGizmo.InstanceModel.BoundingBox) == 0.0f) continue; + + var bvhInstanceIntersect = InstanceGizmo.InstanceModel.BVH.Intersect(localInstanceRay); + + if (bvhInstanceIntersect.distance < lowest) + { + lowest = bvhInstanceIntersect.distance; + lowestRefID = -2; + lowestInstanceID = transform.Key; + WorldPosIntersect = bvhInstanceIntersect.pos; + } + } + PickOutParams OutputParams = new PickOutParams(); OutputParams.LowestRefID = lowestRefID; @@ -398,6 +439,9 @@ public bool Render() sky.DoRender = WorldSettings.RenderSky; sky.UpdateBuffers(D3D.Device, D3D.DeviceContext); sky.Render(D3D.Device, D3D.DeviceContext, Camera); + InstanceGizmo.UpdateBuffers(D3D.Device, D3D.DeviceContext); + InstanceGizmo.Render(D3D.Device, D3D.DeviceContext, Camera); + D3D.EndScene(); return true; @@ -462,6 +506,7 @@ public void SelectEntry(int id) } selectedInstances.Clear(); } + InstanceGizmo.Unselect(); TranslationGizmo.OnSelectEntry(NewObject.Transform, true); NewObject.Select(); @@ -489,6 +534,7 @@ public void SelectInstance(int instanceId) } selectedInstances.Clear(); } + InstanceGizmo.Unselect(); selectedInstances = new Dictionary(); @@ -507,6 +553,11 @@ public void SelectInstance(int instanceId) RenderModel model = Assets[selectedInstances.First().Key] as RenderModel; TranslationGizmo.OnSelectEntry(Matrix4x4.Transpose(model.InstanceTransforms[selectedInstances.First().Value]) , true); } + else + { + InstanceGizmo.Select(instanceId); + TranslationGizmo.OnSelectEntry(Matrix4x4.Transpose(InstanceGizmo.InstanceModel.InstanceTransforms[instanceId]) , true); + } } public IRenderer GetAsset(int RefID) @@ -610,6 +661,7 @@ public void Shutdown() D3D?.Shutdown(); D3D = null; selectedInstances = null; + InstanceGizmo.Shutdown(); } @@ -668,5 +720,9 @@ public void DeleteInstance(FrameObjectBase frame,int InstanceRefID) } } } + public void DeleteInstance(int InstanceRefID) + { + InstanceGizmo.InstanceModel.RemoveInstance(InstanceRefID,D3D.Device); + } } } \ No newline at end of file diff --git a/Mafia2Libs/Rendering/Graphics/RenderTypes/RenderModel.cs b/Mafia2Libs/Rendering/Graphics/RenderTypes/RenderModel.cs index 3b6cee69..181bbf4a 100644 --- a/Mafia2Libs/Rendering/Graphics/RenderTypes/RenderModel.cs +++ b/Mafia2Libs/Rendering/Graphics/RenderTypes/RenderModel.cs @@ -407,7 +407,7 @@ public override void Render(ID3D11Device device, ID3D11DeviceContext deviceConte private float colorTransitionTime = 0.0f; // timer for distinguishing translokators - private void RenderInstances(ID3D11DeviceContext deviceContext, Camera camera, ID3D11Device device) + public void RenderInstances(ID3D11DeviceContext deviceContext, Camera camera, ID3D11Device device) { deviceContext.VSSetShaderResource(0, instanceBufferView); @@ -544,5 +544,14 @@ public void RemoveInstance(int instanceRefId,ID3D11Device d3d) ReloadInstanceBuffer(d3d); } } + + public ID3D11Buffer GetVB() + { + return vertexBuffer; + } + public ID3D11Buffer GetIB() + { + return indexBuffer; + } } } diff --git a/Mafia2Libs/Resources/Translokator.m2t b/Mafia2Libs/Resources/Translokator.m2t new file mode 100644 index 0000000000000000000000000000000000000000..83b51c1d209a4ca5a86d9d92d094b5f04cb2c030 GIT binary patch literal 1463 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 H*G~L@