initial commit
This commit is contained in:
commit
0c5085a7fa
48 changed files with 2883 additions and 0 deletions
64
Projector.cs
Normal file
64
Projector.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
using Godot;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public static class Projector
|
||||
{
|
||||
public static int[,] Points = new int[1024,512];
|
||||
private static bool _gathered = false;
|
||||
public static void GatherPoints(PlanetHelper helper, int resolutionH = 2048, bool regather = false)
|
||||
{
|
||||
if (!regather && _gathered)
|
||||
return;
|
||||
Points = new int[resolutionH,resolutionH / 2];
|
||||
string filename = $"user://points-{resolutionH}-{resolutionH / 2}.dat";
|
||||
if (FileAccess.FileExists(filename))
|
||||
{
|
||||
var readfile = FileAccess.Open(filename, FileAccess.ModeFlags.Read);
|
||||
for (int x = 0; x < Points.GetLength(0); x++)
|
||||
{
|
||||
for (int y = 0; y < Points.GetLength(1); y++)
|
||||
{
|
||||
Points[x, y] = (int)readfile.Get32();
|
||||
}
|
||||
}
|
||||
readfile.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
Parallel.ForEach(Enumerable.Range(0, Points.GetLength(0)), x =>
|
||||
{
|
||||
for (int y = 0; y < Points.GetLength(1); y++)
|
||||
{
|
||||
float yaw = (float)x / Points.GetLength(0) * 360f;
|
||||
float pitch = (float)y / Points.GetLength(1) * 180f;
|
||||
Vector3 point = Vector3.Up;
|
||||
point = point.Rotated(Vector3.Forward, Mathf.DegToRad(pitch));
|
||||
point = point.Rotated(Vector3.Up, Mathf.DegToRad(yaw));
|
||||
int index = helper.Octree.SearchNearest(point)?.Id ?? -1;
|
||||
Points[x,y] = index;
|
||||
}
|
||||
});
|
||||
var file = FileAccess.Open(filename, FileAccess.ModeFlags.Write);
|
||||
for (int x = 0; x < Points.GetLength(0); x++)
|
||||
for (int y = 0; y < Points.GetLength(1); y++)
|
||||
file.Store32((uint)Points[x,y]);
|
||||
_gathered = true;
|
||||
file.Close();
|
||||
}
|
||||
|
||||
public static ImageTexture Render(PlanetHelper helper)
|
||||
{
|
||||
var image = Image.CreateEmpty(Points.GetLength(0) + 1, Points.GetLength(1) + 1, false, Image.Format.Rgb8);;
|
||||
|
||||
for (int x = 0; x < Points.GetLength(0); x++)
|
||||
{
|
||||
for (int y = 0; y < Points.GetLength(1); y++)
|
||||
{
|
||||
image.SetPixel(x,y, helper.Mdt.GetVertexColor(Points[x,y]));
|
||||
}
|
||||
}
|
||||
return ImageTexture.CreateFromImage(image);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue