Fixed some bugs

This commit is contained in:
Zyb3rWolfi 2025-10-07 16:12:24 +01:00
parent 72512fb632
commit 82bc46fbb3
3 changed files with 32 additions and 21 deletions

View File

@ -71,8 +71,8 @@ namespace TheLabs
base.OnRenderFrame(e); base.OnRenderFrame(e);
// Clear the color buffer and the depth buffer // Clear the color buffer and the depth buffer
GL.Clear(ClearBufferMask.DepthBufferBit | ClearBufferMask.ColorBufferBit); GL.Clear(ClearBufferMask.DepthBufferBit | ClearBufferMask.ColorBufferBit);
// Create the model, view, and projection matrices // Create the model, view, and projection matrices
Matrix4 model = Matrix4.CreateRotationY(_rotation) * Matrix4.CreateRotationX(_rotation * 0.5f);
Matrix4 view = Matrix4.CreateTranslation(0.0f, 0.0f, -3.0f); Matrix4 view = Matrix4.CreateTranslation(0.0f, 0.0f, -3.0f);
Matrix4 projection = Matrix4.CreatePerspectiveFieldOfView( Matrix4 projection = Matrix4.CreatePerspectiveFieldOfView(
MathHelper.DegreesToRadians(45f), MathHelper.DegreesToRadians(45f),
@ -82,14 +82,10 @@ namespace TheLabs
); );
// Draw the cube // Draw the cube
for (int i = 0; i < 3; i++) //_cube = new Cube();
{ //_cube.Draw(_shader, view, projection, _rotation);
_cube = new Cube(); //_circle.Draw(_shader, view, projection, model);
_cube.Position = new Vector3(0.5f, 0.5f * i * 0.5f, 0.0f); //_cylinder.Draw(_shader, model, view, projection);
_cube.Draw(_shader, view, projection, _rotation);
}
//_circle.Draw(_shader, model);
//_cylinder.Draw(_shader, model);
SwapBuffers(); SwapBuffers();
GL.GetError(); GL.GetError();
} }

View File

@ -9,22 +9,19 @@ public class Circle
// Vertex Array Object, Vertex Buffer Object, Element Buffer Object // Vertex Array Object, Vertex Buffer Object, Element Buffer Object
private int _vao; private int _vao;
private int _vbo; private int _vbo;
private int _ebo;
private int _vertexCount;
private readonly float[] _vertices = private readonly float[] _vertices =
{ {
}; };
private int _maxVert = 100;
public Circle(float z = 0f, int segments = 100, Vector4? color = null) public Circle(float z = 0f, int segments = 100, Vector4? color = null)
{ {
Vector4 col = color ?? new Vector4(0f, 0f, 1f, 1f); Vector4 col = color ?? new Vector4(0f, 0f, 1f, 1f);
for (int i = 0; i <= segments; i++) for (int i = 0; i <= segments; i++)
{ {
float angle = i * 2.0f * MathF.PI / _maxVert; float angle = i * 2.0f * MathF.PI / segments;
float x = 0.5f * MathF.Cos(angle); float x = 0.5f * MathF.Cos(angle);
float y = 0.5f * MathF.Sin(angle); float y = 0.5f * MathF.Sin(angle);
@ -71,9 +68,19 @@ public class Circle
{ {
return _vertices; return _vertices;
} }
public void Draw(Shader shader, Matrix4 matrix4) public void Draw(Shader shader, Matrix4 view, Matrix4 projection, Matrix4 model)
{ {
shader.SetMatrix4("model", matrix4); //shader.SetMatrix4("model", matrix4);
int modelLoc = GL.GetUniformLocation(shader.Handle, "model");
int viewLoc = GL.GetUniformLocation(shader.Handle, "view");
int projLoc = GL.GetUniformLocation(shader.Handle, "projection");
// Send the matrices to the shader
GL.UniformMatrix4(modelLoc, false, ref model);
GL.UniformMatrix4(viewLoc, false, ref view);
GL.UniformMatrix4(projLoc, false, ref projection);
shader.Use();
GL.BindVertexArray(_vao); GL.BindVertexArray(_vao);
GL.DrawArrays(PrimitiveType.TriangleFan, 0, _vertices.Length / 7); GL.DrawArrays(PrimitiveType.TriangleFan, 0, _vertices.Length / 7);
@ -82,7 +89,6 @@ public class Circle
public void Dispose() public void Dispose()
{ {
GL.DeleteBuffer(_vbo); GL.DeleteBuffer(_vbo);
GL.DeleteBuffer(_ebo);
GL.DeleteVertexArray(_vao); GL.DeleteVertexArray(_vao);
} }
} }

View File

@ -31,7 +31,7 @@ public class Cylinder
_vertexCount = _indices.Length; _vertexCount = _indices.Length;
_topCircle = new Circle(0.5f, 100, new Vector4(1f, 1f, 0f, 1f)); _topCircle = new Circle(0.5f, 100, new Vector4(1f, 1f, 0f, 1f));
_bottomCircle = new Circle(-0.5f, 100, new Vector4(1f, 0f, 0f, 1f)); _bottomCircle = new Circle(-0.5f, 100, new Vector4(1f, 0f, 0f, 1f));
GenerateCylinder(101); GenerateCylinder(100);
} }
@ -105,14 +105,23 @@ public class Cylinder
GL.BindVertexArray(0); GL.BindVertexArray(0);
} }
public void Draw(Shader shader, Matrix4 matrix4) public void Draw(Shader shader, Matrix4 model, Matrix4 view, Matrix4 projection)
{ {
shader.SetMatrix4("model", matrix4); shader.SetMatrix4("model", model);
// Set the matrices in the shader
int modelLoc = GL.GetUniformLocation(shader.Handle, "model");
int viewLoc = GL.GetUniformLocation(shader.Handle, "view");
int projLoc = GL.GetUniformLocation(shader.Handle, "projection");
// Send the matrices to the shader
GL.UniformMatrix4(modelLoc, false, ref model);
GL.UniformMatrix4(viewLoc, false, ref view);
GL.UniformMatrix4(projLoc, false, ref projection);
GL.BindVertexArray(_vao); GL.BindVertexArray(_vao);
GL.DrawElements(PrimitiveType.Triangles, _indices.Length, DrawElementsType.UnsignedInt, 0); GL.DrawElements(PrimitiveType.Triangles, _indices.Length, DrawElementsType.UnsignedInt, 0);
_topCircle.Draw(shader, matrix4); _topCircle.Draw(shader, view, projection, model);
_bottomCircle.Draw(shader, matrix4); _bottomCircle.Draw(shader, view, projection, model);
} }
public void Dispose() public void Dispose()