projection to png saving
This commit is contained in:
parent
aefc76c178
commit
6bd4c62bd4
3 changed files with 112 additions and 34 deletions
|
|
@ -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"]
|
||||
|
|
|
|||
45
src/Main.cs
45
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<LineEdit>("%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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue