slight code improvements. Still didn't fix cube sphere shading
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Gitea Actions Demo / Scan the project (push) Successful in 22s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Gitea Actions Demo / Scan the project (push) Successful in 22s
				
			This commit is contained in:
		@ -32,7 +32,7 @@ public static class Program
 | 
				
			|||||||
	private static Camera _cam;
 | 
						private static Camera _cam;
 | 
				
			||||||
	private static Vector2 _lastMousePosition;
 | 
						private static Vector2 _lastMousePosition;
 | 
				
			||||||
	private static uint _vao, _vbo;
 | 
						private static uint _vao, _vbo;
 | 
				
			||||||
	private static IcoSphere sphere;
 | 
						private static Sphere sphere;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static void Main(string[] args)
 | 
						public static void Main(string[] args)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -140,7 +140,7 @@ public static class Program
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Sphere
 | 
							// Sphere
 | 
				
			||||||
		sphere = new IcoSphere(10);
 | 
							sphere = new Sphere(10);
 | 
				
			||||||
		sphere.CreateSphere();
 | 
							sphere.CreateSphere();
 | 
				
			||||||
		_sphereShader =
 | 
							_sphereShader =
 | 
				
			||||||
			new Nebulix.Rendering.Shader(_gl, "./Shaders/Sphere/sphere.vert", "./Shaders/Sphere/sphere.frag");
 | 
								new Nebulix.Rendering.Shader(_gl, "./Shaders/Sphere/sphere.vert", "./Shaders/Sphere/sphere.frag");
 | 
				
			||||||
 | 
				
			|||||||
@ -6,9 +6,11 @@ using Silk.NET.OpenGL;
 | 
				
			|||||||
namespace Engine_silk.NET
 | 
					namespace Engine_silk.NET
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// also maybe make an ISphere and call this class "CubeSphere"?
 | 
						// also maybe make an ISphere and call this class "CubeSphere"?
 | 
				
			||||||
 | 
						// Also look into this way of generating a cube sphere: http://www.songho.ca/opengl/gl_sphere.html
 | 
				
			||||||
	public class Sphere
 | 
						public class Sphere
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		private readonly Mesh mesh = new();
 | 
							private readonly Mesh[] mesh = new Mesh[6];
 | 
				
			||||||
 | 
							private readonly Face[] faces = new Face[6];
 | 
				
			||||||
		private readonly uint resolution;
 | 
							private readonly uint resolution;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		public Sphere(uint resolution)
 | 
							public Sphere(uint resolution)
 | 
				
			||||||
@ -21,7 +23,6 @@ namespace Engine_silk.NET
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		public void CreateSphere()
 | 
							public void CreateSphere()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// TODO: merge the individual meshes to one mesh
 | 
					 | 
				
			||||||
			Vector3[] directions =
 | 
								Vector3[] directions =
 | 
				
			||||||
			[
 | 
								[
 | 
				
			||||||
				Vector3.UnitZ, -Vector3.UnitZ, 
 | 
									Vector3.UnitZ, -Vector3.UnitZ, 
 | 
				
			||||||
@ -29,25 +30,15 @@ namespace Engine_silk.NET
 | 
				
			|||||||
				Vector3.UnitX, -Vector3.UnitX
 | 
									Vector3.UnitX, -Vector3.UnitX
 | 
				
			||||||
			];
 | 
								];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			List<Vector3> vertices = new();
 | 
					 | 
				
			||||||
			List<uint> indices = new();
 | 
					 | 
				
			||||||
			for (int i = 0; i < directions.Length; i++)
 | 
								for (int i = 0; i < directions.Length; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Mesh m = new();
 | 
									if (mesh[i] is null) // linting not working here. mesh[i] can actually be null
 | 
				
			||||||
				Face f = new(directions[i], m, resolution);
 | 
					 | 
				
			||||||
				f.GenerateMesh();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				vertices.AddRange(m.Vertices);
 | 
					 | 
				
			||||||
				for (int j = 0; j < m.Indices.Length; j++)
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					indices.Add(m.Indices[j] + (uint)(m.Vertices.Length * i));
 | 
										mesh[i] = new Mesh();
 | 
				
			||||||
 | 
										faces[i] = new Face(directions[i], mesh[i], resolution);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									faces[i].GenerateMesh();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			// TODO get rid of overlapping vertices maybe
 | 
					 | 
				
			||||||
			mesh.Clear();
 | 
					 | 
				
			||||||
			mesh.Vertices = vertices.ToArray();
 | 
					 | 
				
			||||||
			mesh.Indices = indices.ToArray();
 | 
					 | 
				
			||||||
			mesh.CalculateNormals();
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
@ -55,11 +46,14 @@ namespace Engine_silk.NET
 | 
				
			|||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
		public void RenderSphere(GL gl) // Will not be needed  
 | 
							public void RenderSphere(GL gl) // Will not be needed  
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			mesh.Render(gl);
 | 
								for (int i = 0; i < mesh.Length; i++)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									faces[i].Mesh.Render(gl);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	internal record struct Face
 | 
						internal readonly record struct Face
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		public Mesh Mesh => _mesh;
 | 
							public Mesh Mesh => _mesh;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user