chunk stuff and camera smoothing

This commit is contained in:
Halbear
2026-02-14 01:21:57 +00:00
parent f617f799c2
commit 70acbd2526
3 changed files with 53 additions and 17 deletions

View File

@@ -20,6 +20,7 @@ namespace VoxelIsometricRenderer
{
public static bool running = true;
public static List<Voxel> Voxels = new List<Voxel>();
public static List<int> ChunksToRender = new List<int>();
public static Thread MainThread;
public static float scale = 2f;
public static int FPS = 0;
@@ -57,12 +58,26 @@ namespace VoxelIsometricRenderer
TextureManager.GenerateVoxelFaces();
PlayerObject.CreatePlayer(new int[] { 0, 0, 0, 0, 0, 0 }, 0, new BlockState(false, BlockType.Ground, false));
Chunk TestChunk = ChunkRegistry.IndexChunk(0, 0, 0);
Chunk TestChunk2 = ChunkRegistry.IndexChunk(0, 1, 0);
//Chunk TestChunk3 = ChunkRegistry.IndexChunk(0, 0, -1);
//Chunk TestChunk4 = ChunkRegistry.IndexChunk(0, 1, -1);
Random rnd = new Random();
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
for (int k = 0; k < 16; k++) {
if(LightSource.IsWithinSphere(3, 4, 7, 4, i, j, k))
{
TestChunk2.CreateBlock(new int[] { 8,8,8,8,8,8 }, 0, new BlockState(false, BlockType.Ground, true), i, j, k);
} else if(i == 4 && k == 4 && j < 6){
TestChunk2.CreateBlock(new int[] { 5,5,5,5,6,6 }, 0, new BlockState(false, BlockType.Ground, true), i, j, k);
}
else TestChunk2.CreateAir(i, j, k);
if (i < 8 && k < 8 && rnd.Next(0,1)==0) TestChunk.CreateBlock(new int[] { rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13) }, 0, new BlockState(false, BlockType.Ground, true), i, j, k);
else TestChunk.CreateAir(i, j, k);
//if (LightSource.IsWithinSphere(7,8,8,8,i,j,k)) TestChunk4.CreateBlock(new int[] { rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13), rnd.Next(0, 13) }, 0, new BlockState(false, BlockType.Ground, true), i, j, k);
//else TestChunk4.CreateAir(i, j, k);
//if (j == 15) TestChunk3.CreateBlock(new int[] {1,1,1,1,2,2 }, 0, new BlockState(false, BlockType.Ground, true), i, j, k);
//else TestChunk3.CreateAir(i, j, k);
}
}
}
@@ -70,9 +85,17 @@ namespace VoxelIsometricRenderer
//LightingManager.Lights.Add(new LightSource(LightShape.Sphere, 15, 15, 15, 7,18,7, new float[] {1.8f,0.0f,0.0f},255));
//LightingManager.Lights.Add(new LightSource(LightShape.Sphere,15,15,15, 3, 8, 15, new float[] {0.0f,1.8f,0.0f},255));
LightingManager.Lights.Add(new LightSource(LightShape.Sphere,12,12,12, 10, 18, 10, new float[] {0.0f,0.0f,1.8f}, 255));
LightingManager.Lights.Add(new LightSource(LightShape.Sphere, 5, 5, 5, 4,18,4, new float[] {0.8f,0.0f,0.0f},255));
LightingManager.Lights.Add(new LightSource(LightShape.Sphere, 7, 7, 7, 4,18,4, new float[] {1.8f,0.0f,0.0f},255));
TestChunk2.GenerateLightMap();
//TestChunk4.GenerateLightMap();
// TestChunk3.GenerateLightMap();
TestChunk.GenerateLightMap();
TestChunk.CalculateCull();
//ChunksToRender.Add(2);
//ChunksToRender.Add(3);
ChunksToRender.Add(0);
ChunksToRender.Add(1);
//TestChunk2.CalculateCull();
MainThread = new Thread(Runtime);
MainThread.SetApartmentState(ApartmentState.STA);
MainThread.Start();
@@ -91,6 +114,7 @@ namespace VoxelIsometricRenderer
Display.Refresh();
if (Process.GetCurrentProcess().TotalProcessorTime.TotalMilliseconds - LightingFrameTime > 16)
{
PlayerObject.UpdateCamera();
LightingFrameTime = Process.GetCurrentProcess().TotalProcessorTime.TotalMilliseconds;
LightingManager.UpdateLighting();
//LightingManager.Lights[0].SetPosition(PlayerObject.GetPos());
@@ -99,7 +123,6 @@ namespace VoxelIsometricRenderer
}
if (Process.GetCurrentProcess().TotalProcessorTime.TotalMilliseconds - _64ms > 64)
{
PlayerObject.UpdateCamera();
_64ms = Process.GetCurrentProcess().TotalProcessorTime.TotalMilliseconds;
int[] Pos = LightingManager.Lights[0].GetPosition();
if (up && Pos[1] < 25)
@@ -115,6 +138,7 @@ namespace VoxelIsometricRenderer
up = true;
}
LightingManager.Lights[0].SetPosition(Pos);
//LightingManager.Lights[1].SetPosition(PlayerObject.GetPos());
}
if (Process.GetCurrentProcess().TotalProcessorTime.TotalMilliseconds - SecondFrameTime > 1000)
{
@@ -132,8 +156,14 @@ namespace VoxelIsometricRenderer
g.PixelOffsetMode = PixelOffsetMode.Half;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
g.ScaleTransform(TextureManager.RenderScale, TextureManager.RenderScale);
ChunkRegistry.RenderChunk(g, 0);
//ChunkRegistry.RenderChunk(g, 1);
ChunksToRender.ForEach(chunk =>
{
ChunkRegistry.RenderChunk(g, chunk);
});
PlayerObject.Draw(g);
int[] Positions = BlockRegistry.GetDrawLocation(LightingManager.Lights[0].GetPosition()[0], LightingManager.Lights[0].GetPosition()[1], LightingManager.Lights[0].GetPosition()[2], PlayerObject.GetCameraPos()[0], PlayerObject.GetCameraPos()[1], PlayerObject.GetCameraPos()[2]);
g.FillEllipse(Brushes.Blue, new Rectangle(Positions[0] + (int)(Terrain4.width / (2 * TextureManager.RenderScale)), Positions[1] + (int)(Terrain4.height / (2 * TextureManager.RenderScale)), TextureManager.VoxelSize/2, TextureManager.VoxelSize/2));
g.ResetTransform();
g.DrawString(String.Format("FPS: {0} Ram Usage: {9}MB Ram Allocated: {8}MB\nSunValue: {1}\nMoonValue:{3}\nLightDirection:{4}\nAmbientColourGrading: R{5} G{6} B{7}\nSunAngles:{2}", FPS, LightingManager.SkyLightMetrics[0], String.Format(" x={0}° y={1}°", LightingManager.sunAngles[0], LightingManager.sunAngles[1]), LightingManager.SkyLightMetrics[2], LightingManager.SunAngle, LightingManager.SkyLightMetrics[3], LightingManager.SkyLightMetrics[4], LightingManager.SkyLightMetrics[5], TotalRamUsage, RamUsage), SystemFonts.DefaultFont, Brushes.Red, new PointF(0, 0));
Frames++;