another try at fixing the mesh class (maybe mesh class is not the problem after all?)
All checks were successful
Gitea Actions Demo / Scan the project (push) Successful in 20s
All checks were successful
Gitea Actions Demo / Scan the project (push) Successful in 20s
This commit is contained in:
parent
049d8cff7e
commit
cc3493627d
|
@ -28,6 +28,7 @@ namespace Nebulix
|
|||
result[resultIdx] = array[i].X;
|
||||
result[resultIdx + 1] = array[i].Y;
|
||||
result[resultIdx + 2] = array[i].Z;
|
||||
resultIdx += 3;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
@ -46,12 +46,16 @@ namespace Nebulix.Rendering
|
|||
|
||||
// getting called by "Engine" which currently is in another assembly, meaning I probably need to make this public
|
||||
// needs to be change for the real engine
|
||||
/// <summary>
|
||||
/// Binds the necessary buffers and draws the mesh. Does not use any Shaders
|
||||
/// </summary>
|
||||
/// <param name="gl"></param>
|
||||
public void Render(GL gl)
|
||||
{
|
||||
if (regenerate) Generate(gl);
|
||||
|
||||
gl.BindVertexArray(vao);
|
||||
gl.DrawElements(PrimitiveType.Triangles, (uint)vertices.Length * 3, DrawElementsType.UnsignedInt, 0);
|
||||
gl.DrawElements(PrimitiveType.Triangles, (uint)indices.Length, DrawElementsType.UnsignedInt, 0);
|
||||
}
|
||||
|
||||
private unsafe void Generate(GL gl)
|
||||
|
@ -60,13 +64,13 @@ namespace Nebulix.Rendering
|
|||
|
||||
if(vao == 0)
|
||||
vao = gl.CreateVertexArray();
|
||||
gl.BindVertexArray(vao);
|
||||
|
||||
if(vbo == 0)
|
||||
vbo = gl.GenBuffer();
|
||||
if(ebo == 0)
|
||||
ebo = gl.GenBuffer();
|
||||
|
||||
gl.BindVertexArray(vao);
|
||||
|
||||
List<float> meshData = new(vertices.Length * 3 + normals.Length * 3);
|
||||
meshData.AddRange(vertices.ExtractComponents());
|
||||
//meshData.AddRange(normals.ExtractComponents());
|
||||
|
@ -77,7 +81,7 @@ namespace Nebulix.Rendering
|
|||
ReadOnlySpan<nuint> indicesData = new(indices);
|
||||
gl.BindBuffer(BufferTargetARB.ElementArrayBuffer, ebo);
|
||||
gl.BufferData(BufferTargetARB.ElementArrayBuffer, (nuint)(indicesData.Length * sizeof(nuint)), indicesData, BufferUsageARB.StaticDraw);
|
||||
|
||||
|
||||
// vertices
|
||||
gl.EnableVertexAttribArray(0);
|
||||
gl.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), null);
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
namespace Engine_silk.NET;
|
||||
using Nebulix;
|
||||
|
||||
namespace Engine_silk.NET;
|
||||
|
||||
using Engine_silk.NET.Textures;
|
||||
using Nebulix.InputSystem;
|
||||
|
@ -28,9 +30,9 @@ public static class Program
|
|||
private static Texture2D _texture;
|
||||
private static Camera _cam;
|
||||
private static Vector2 _lastMousePosition;
|
||||
private static uint _vao, _vbo, _ebo;
|
||||
private static uint _vao, _vbo;
|
||||
private static Sphere sphere;
|
||||
|
||||
private static Mesh testMesh;
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
|
@ -54,7 +56,7 @@ public static class Program
|
|||
_gl = _window.CreateOpenGL();
|
||||
_gl.ClearColor(Color.CornflowerBlue);
|
||||
_gl.Enable(EnableCap.DepthTest);
|
||||
//_gl.PolygonMode(GLEnum.FrontAndBack, GLEnum.Fill);
|
||||
// _gl.PolygonMode(GLEnum.FrontAndBack, GLEnum.Fill);
|
||||
|
||||
_cam = new Camera(new(0.0f, 0.0f, 3.0f));
|
||||
IInputContext input = _window.CreateInput();
|
||||
|
@ -118,37 +120,13 @@ public static class Program
|
|||
-0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
|
||||
-0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
|
||||
ReadOnlySpan<float> verticesData = new(vertices);
|
||||
//uint[] indices =
|
||||
//{
|
||||
// 0u, 1u, 3u,
|
||||
// 1u, 2u, 3u,
|
||||
|
||||
// 4u, 5u, 7u,
|
||||
// 5u, 6u, 7u,
|
||||
|
||||
// 3u, 2u, 7u,
|
||||
// 7u, 2u, 6u,
|
||||
|
||||
// 0u, 4u, 5u,
|
||||
// 0u, 5u, 1u,
|
||||
|
||||
// 0u, 3u, 7u,
|
||||
// 0u, 7u, 4u,
|
||||
|
||||
// 1u, 6u, 5u,
|
||||
// 1u, 2u, 6u
|
||||
//};
|
||||
|
||||
_vbo = _gl.GenBuffer();
|
||||
_gl.BindBuffer(BufferTargetARB.ArrayBuffer, _vbo);
|
||||
_gl.BufferData(BufferTargetARB.ArrayBuffer, (nuint)(verticesData.Length * sizeof(float)), verticesData, BufferUsageARB.StaticDraw);
|
||||
|
||||
//_ebo = _gl.GenBuffer();
|
||||
//_gl.BindBuffer(BufferTargetARB.ElementArrayBuffer, _ebo);
|
||||
//fixed (uint* buffer = indices)
|
||||
// _gl.BufferData(BufferTargetARB.ElementArrayBuffer, (nuint)(indices.Length * sizeof(uint)), buffer, BufferUsageARB.StaticDraw);
|
||||
|
||||
|
||||
_shader = new Nebulix.Rendering.Shader(_gl, "shader.vert", "shader.frag");
|
||||
|
||||
_gl.EnableVertexAttribArray(0);
|
||||
|
@ -166,6 +144,24 @@ public static class Program
|
|||
sphere.CreateSphere();
|
||||
_sphereShader =
|
||||
new Nebulix.Rendering.Shader(_gl, "./Shaders/Sphere/sphere.vert", "./Shaders/Sphere/sphere.frag");
|
||||
|
||||
testMesh = new Mesh
|
||||
{
|
||||
Vertices =
|
||||
[
|
||||
new Vector3D<float>(0.5f, 0.5f, 0.0f),
|
||||
new Vector3D<float>(0.5f, -0.5f, 0.0f),
|
||||
new Vector3D<float>(-0.5f, -0.5f, 0.0f),
|
||||
new Vector3D<float>(-0.5f, 0.5f, 0.5f)
|
||||
],
|
||||
Indices =
|
||||
[
|
||||
0u, 1u, 3u,
|
||||
1u, 2u, 3u
|
||||
]
|
||||
};
|
||||
testMesh.CalculateNormals();
|
||||
|
||||
}
|
||||
|
||||
private static void OnUpdate(double deltaTime)
|
||||
|
@ -203,24 +199,26 @@ public static class Program
|
|||
var viewMatrix = _cam.ViewMatrix;
|
||||
var projectionMatrix = Matrix4X4.CreatePerspectiveFieldOfView(Maths.Convert.ToRadians(_cam.Fov), Width / (float)Height, 0.1f, 100.0f);
|
||||
|
||||
// _shader.Use();
|
||||
// _shader.SetMatrix("modelMatrix", modelMatrix);
|
||||
// _shader.SetMatrix("projectionMatrix", projectionMatrix);
|
||||
// _shader.SetMatrix("viewMatrix", viewMatrix);
|
||||
//
|
||||
// _shader.SetInt("tex", 0);
|
||||
// _texture.Bind();
|
||||
//
|
||||
_shader.Use();
|
||||
_shader.SetMatrix("modelMatrix", modelMatrix);
|
||||
_shader.SetMatrix("projectionMatrix", projectionMatrix);
|
||||
_shader.SetMatrix("viewMatrix", viewMatrix);
|
||||
|
||||
_shader.SetInt("tex", 0);
|
||||
_texture.Bind();
|
||||
|
||||
// _gl.BindVertexArray(_vao);
|
||||
// _gl.DrawArrays(PrimitiveType.Triangles, 0, 36);
|
||||
|
||||
// Sphere
|
||||
// modelMatrix = Matrix4x4.CreateTranslation(1, 0, 1);
|
||||
modelMatrix = Matrix4x4.CreateTranslation(0, 0, 0);
|
||||
_sphereShader.Use();
|
||||
_sphereShader.SetMatrix("modelMatrix", modelMatrix);
|
||||
_sphereShader.SetMatrix("projectionMatrix", projectionMatrix);
|
||||
_sphereShader.SetMatrix("viewMatrix", viewMatrix);
|
||||
sphere.RenderSphere(_gl);
|
||||
|
||||
// sphere.RenderSphere(_gl);
|
||||
testMesh.Render(_gl);
|
||||
|
||||
// var f = new Face(-Vector3D<float>.UnitX, 10);
|
||||
// f.GetMesh().Render(_gl);
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#version 330 core
|
||||
|
||||
layout (location = 0) in vec3 aPosition;
|
||||
layout (location = 1) in vec3 normalVector;
|
||||
//layout (location = 1) in vec3 normalVector;
|
||||
|
||||
|
||||
uniform mat4 modelMatrix;
|
||||
uniform mat4 viewMatrix;
|
||||
|
@ -13,7 +14,6 @@ out vec3 FragPos;
|
|||
void main()
|
||||
{
|
||||
vec4 pos = vec4(aPosition, 1.0);
|
||||
|
||||
// TODO: calculate the inverse of the model matrix beforehand since "inverse()" is very costly to calculate for every vertex
|
||||
// Normal = mat3(transpose(inverse(modelMatrix))) * normalVector;
|
||||
FragPos = vec3(modelMatrix * pos);
|
||||
|
|
Loading…
Reference in New Issue
Block a user