diff --git a/scenes/MainScene.tscn b/scenes/MainScene.tscn index ab28fa0..5f75d4a 100644 --- a/scenes/MainScene.tscn +++ b/scenes/MainScene.tscn @@ -2,6 +2,7 @@ [ext_resource type="Script" uid="uid://bhpic251bgvgk" path="res://src/Main.cs" id="1_611at"] [ext_resource type="ArrayMesh" uid="uid://65modei4jwaj" path="res://assets/PlanetBase.obj" id="2_k24pf"] +[ext_resource type="Gradient" uid="uid://b5l44rktieewe" path="res://resources/planet_gradient.tres" id="2_ygjfp"] [ext_resource type="Material" uid="uid://c55st036tapeo" path="res://shaders/planet.tres" id="3_ygjfp"] [ext_resource type="Material" uid="uid://k3teblrpopsb" path="res://shaders/map.tres" id="4_1wiy7"] @@ -35,6 +36,7 @@ _cameraNode = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaW _meshInstance = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo/Icosphere") World = NodePath("TabContainer/Planet/SubViewportContainer/SubViewport/ZaWarudo") _textureRect = NodePath("TabContainer/Projection") +_gradient = ExtResource("2_ygjfp") [node name="TabContainer" type="TabContainer" parent="." unique_id=1586027287] layout_mode = 1 @@ -98,124 +100,146 @@ theme_override_constants/margin_top = 12 theme_override_constants/margin_right = 12 theme_override_constants/margin_bottom = 12 -[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer" unique_id=654818970] +[node name="VBoxContainer2" type="VBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer" unique_id=1788559732] layout_mode = 2 -[node name="HBoxContainer3" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1125245293] +[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2" unique_id=654818970] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="HBoxContainer3" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1125245293] layout_mode = 2 -[node name="Reset" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer3" unique_id=662365522] +[node name="Reset" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3" unique_id=662365522] layout_mode = 2 size_flags_horizontal = 3 text = "Reset" -[node name="Advance" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer3" unique_id=1446263017] +[node name="Advance" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3" unique_id=1446263017] layout_mode = 2 size_flags_horizontal = 3 text = "Advance Once" -[node name="AutoRun" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer3" unique_id=58920233] +[node name="AutoRun" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3" unique_id=58920233] layout_mode = 2 size_flags_horizontal = 3 text = "Auto Run " -[node name="HBoxContainer4" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1084572184] +[node name="HBoxContainer4" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1084572184] layout_mode = 2 -[node name="Label" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer4" unique_id=1959611598] +[node name="Label" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer4" unique_id=1959611598] layout_mode = 2 text = "Projection Resolution:" -[node name="Resolution" type="LineEdit" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer4" unique_id=1285940001] +[node name="Resolution" type="LineEdit" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer4" unique_id=1285940001] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 text = "512" max_length = 5 -[node name="HSeparator" type="HSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1862016318] +[node name="HSeparator" type="HSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1862016318] layout_mode = 2 -[node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=186838891] +[node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=186838891] layout_mode = 2 text = "- Point -" -[node name="HBoxContainer2" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1345806516] +[node name="HBoxContainer2" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1345806516] layout_mode = 2 -[node name="Margin" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1465747985] +[node name="Margin" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=1465747985] layout_mode = 2 -[node name="Label" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1300757041] +[node name="Label" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=1300757041] layout_mode = 2 theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) text = "Point ID: " -[node name="PointId" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1976947082] +[node name="PointId" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=1976947082] unique_name_in_owner = true layout_mode = 2 text = "-1" -[node name="VSeparator1" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=746067660] +[node name="VSeparator1" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=746067660] layout_mode = 2 -[node name="Label1" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=1690535936] +[node name="Label1" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=1690535936] layout_mode = 2 theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) text = "Height:" -[node name="PointHeight" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=2115494397] +[node name="PointHeight" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer2" unique_id=2115494397] unique_name_in_owner = true layout_mode = 2 text = "-1" -[node name="Label3" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=1412781677] +[node name="Label3" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=1412781677] layout_mode = 2 text = " - Plate -" -[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer" unique_id=471041646] +[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer" unique_id=471041646] layout_mode = 2 -[node name="Margin" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1514412102] +[node name="Margin" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=1514412102] layout_mode = 2 -[node name="Label1" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1070896445] +[node name="Label1" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=1070896445] layout_mode = 2 theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) text = "Plate ID:" -[node name="PlateId" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=37820014] +[node name="PlateId" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=37820014] unique_name_in_owner = true layout_mode = 2 text = "-1" -[node name="VSeparator1" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1699626450] +[node name="VSeparator1" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=1699626450] layout_mode = 2 -[node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=288487629] +[node name="Label2" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=288487629] layout_mode = 2 theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) text = "Is Landform:" -[node name="IsLandform" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=2089133484] +[node name="IsLandform" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=2089133484] unique_name_in_owner = true layout_mode = 2 text = "unknown" -[node name="VSeparator2" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=75061841] +[node name="VSeparator2" type="VSeparator" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=75061841] layout_mode = 2 -[node name="Label3" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1444405231] +[node name="Label3" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=1444405231] layout_mode = 2 theme_override_colors/font_color = Color(0.4922884, 0.49228835, 0.49228835, 1) text = "Area:" -[node name="Area" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=849006497] +[node name="Area" type="Label" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer" unique_id=849006497] unique_name_in_owner = true layout_mode = 2 text = "0%" +[node name="HBoxContainer5" type="HBoxContainer" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2" unique_id=2066226936] +layout_mode = 2 + +[node name="SaveValue" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/HBoxContainer5" unique_id=1765975441] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Save Value Image" + +[node name="SaveColor" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/HBoxContainer5" unique_id=203135614] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Save Color Image" + +[node name="Open Folder" type="Button" parent="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/HBoxContainer5" unique_id=217700409] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Open Folder" + [node name="Projection" type="TextureRect" parent="TabContainer" unique_id=155743781] visible = false material = ExtResource("4_1wiy7") @@ -225,7 +249,10 @@ stretch_mode = 5 metadata/_tab_index = 1 [connection signal="tab_changed" from="TabContainer" to="." method="Tab"] -[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer3/Reset" to="." method="MakeGo"] -[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer3/Advance" to="." method="Advance"] -[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer3/AutoRun" to="." method="AutoRun"] -[connection signal="text_changed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer4/Resolution" to="." method="ResolutionChange"] +[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3/Reset" to="." method="MakeGo"] +[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3/Advance" to="." method="Advance"] +[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer3/AutoRun" to="." method="AutoRun"] +[connection signal="text_changed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/VBoxContainer/HBoxContainer4/Resolution" to="." method="ResolutionChange"] +[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/HBoxContainer5/SaveValue" to="." method="SaveImageValue"] +[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/HBoxContainer5/SaveColor" to="." method="SaveImageColor"] +[connection signal="pressed" from="TabContainer/Planet/PanelContainer/MarginContainer/VBoxContainer2/HBoxContainer5/Open Folder" to="." method="OpenFolder"] diff --git a/src/Main.cs b/src/Main.cs index 9e5db82..114961a 100644 --- a/src/Main.cs +++ b/src/Main.cs @@ -2,6 +2,7 @@ using Godot; using System; using System.Globalization; +using System.IO; using System.Linq; using Godot.Collections; @@ -21,6 +22,8 @@ public partial class Main : Control [Export] private MeshInstance3D _meshInstance; [Export] private Node3D World; [Export] private TextureRect _textureRect; + + [Export] private Gradient _gradient; private PlanetHelper.VertexData? _vertex = null; private PlanetHelper.PlateData? _plate = null; @@ -31,6 +34,7 @@ public partial class Main : Control { _planetHelper = new PlanetHelper(_meshInstance, _textureRect); UpdateStats(); + Projector.GatherPoints(_planetHelper, int.Parse(GetNode("%Resolution").Text)); } private const float RayLength = 1000.0f; @@ -147,6 +151,47 @@ public partial class Main : Control _planetHelper.AutoRun = true; } + public void SaveImageValue() + { + Image img = Projector.RenderImage(_planetHelper); + DirectoryInfo d = new DirectoryInfo(ProjectSettings.GlobalizePath("user://")); + FileInfo[] files = d.GetFiles("Projection-*.png"); + int max = 0; + foreach (FileInfo file in files) + { + int number = int.Parse(file.Name.Split('-')[1]); + max = Math.Max(max, number); + } + max += 1; + img.SavePng(ProjectSettings.GlobalizePath($"user://ProjectionValue-{max}-{Projector.Points.GetLength(0)}.png")); + } + public void SaveImageColor() + { + Image img = Projector.RenderImage(_planetHelper); + Vector2 size = img.GetSize(); + for (int x = 0; x < size.X; x++) + { + for (int y = 0; y < size.Y; y++) + { + img.SetPixel(x,y, _gradient.Sample(img.GetPixel(x,y).R)); + } + } + DirectoryInfo d = new DirectoryInfo(ProjectSettings.GlobalizePath("user://")); + FileInfo[] files = d.GetFiles("ProjectionColor-*.png"); + int max = 0; + foreach (FileInfo file in files) + { + int number = int.Parse(file.Name.Split('-')[1]); + max = Math.Max(max, number); + } + max += 1; + img.SavePng(ProjectSettings.GlobalizePath($"user://Projection-{max}-{Projector.Points.GetLength(0)}.png")); + } + + public void OpenFolder() + { + OS.ShellShowInFileManager(ProjectSettings.GlobalizePath("user://")); + } public void ResolutionChange(String change) { change = new string(change.Where(c => char.IsDigit(c)).ToArray()); diff --git a/src/Projector.cs b/src/Projector.cs index e839498..4705505 100644 --- a/src/Projector.cs +++ b/src/Projector.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; public static class Projector { - public static int[,] Points = new int[1024,512]; + public static int[,] Points = new int[512,256]; public static void GatherPoints(PlanetHelper helper, int resolutionH = 2048) { Points = new int[resolutionH,resolutionH / 2]; @@ -45,6 +45,11 @@ public static class Projector } public static ImageTexture Render(PlanetHelper helper) + { + return ImageTexture.CreateFromImage(RenderImage(helper)); + } + + public static Image RenderImage(PlanetHelper helper) { var image = Image.CreateEmpty(Points.GetLength(0), Points.GetLength(1), false, Image.Format.Rgb8);; @@ -55,6 +60,7 @@ public static class Projector image.SetPixel(x,y, helper.Mdt.GetVertexColor(Points[x,y])); } } - return ImageTexture.CreateFromImage(image); + + return image; } }