61 lines
2.4 KiB
C#
61 lines
2.4 KiB
C#
using Map3DRendering.Common;
|
|
using OpenTK.Graphics.OpenGL4;
|
|
using OpenTK.Mathematics;
|
|
|
|
namespace Map3DRendering {
|
|
public class AxesGizmo {
|
|
private Shader axesShader;
|
|
private int vao;
|
|
|
|
public AxesGizmo() {
|
|
// Initialisation du shader
|
|
axesShader = new Shader("Shaders/Gizmo/axes.vert", "Shaders/Gizmo/axes.frag");
|
|
|
|
// Configuration des données des axes (positions et couleurs)
|
|
float[] axesVertices = {
|
|
// Axe X, rouge
|
|
0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
|
|
1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
|
|
// Axe Y, vert
|
|
0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
|
|
0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,
|
|
// Axe Z, bleu
|
|
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f,
|
|
0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f
|
|
};
|
|
|
|
vao = GL.GenVertexArray();
|
|
int vbo = GL.GenBuffer();
|
|
GL.BindVertexArray(vao);
|
|
GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
|
|
GL.BufferData(BufferTarget.ArrayBuffer, axesVertices.Length * sizeof(float), axesVertices, BufferUsageHint.StaticDraw);
|
|
|
|
// Position attribute
|
|
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 6 * sizeof(float), 0);
|
|
GL.EnableVertexAttribArray(0);
|
|
// Color attribute
|
|
GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, 6 * sizeof(float), 3 * sizeof(float));
|
|
GL.EnableVertexAttribArray(1);
|
|
}
|
|
|
|
public void Render(int windowWidth, int windowHeight, Camera camera) {
|
|
int gizmoSize = 200; // Taille du gizmo en pixels
|
|
GL.Viewport(windowWidth - (gizmoSize + 50), windowHeight - (gizmoSize + 50), gizmoSize, gizmoSize);
|
|
|
|
Matrix4 gizmoProjection = Matrix4.CreateOrthographicOffCenter(-1f, 1f, -1f, 1f, 0, 1);
|
|
|
|
Matrix4 cameraRotation = camera.GetViewMatrix();
|
|
cameraRotation.Row3 = Vector4.UnitW; // Réinitialise la translation
|
|
|
|
axesShader.Use();
|
|
axesShader.SetMatrix4("view", cameraRotation);
|
|
axesShader.SetMatrix4("projection", gizmoProjection);
|
|
|
|
GL.BindVertexArray(vao);
|
|
GL.DrawArrays(PrimitiveType.Lines, 0, 6); // 6 points pour les 3 lignes des axes
|
|
|
|
GL.Viewport(0, 0, windowWidth, windowHeight); // Rétablissement du viewport principal
|
|
}
|
|
|
|
}
|
|
}
|