mirror of
https://github.com/UOH-CS-Level5/551455-graphics-programming-2526-the-repo-Zyb3rWolfi.git
synced 2025-11-29 00:43:08 +00:00
Added some basic camera stuff
This commit is contained in:
parent
9bdb641096
commit
87804fc932
@ -21,10 +21,28 @@ namespace TheLabs
|
|||||||
// - Resources that only need to be created once
|
// - Resources that only need to be created once
|
||||||
private Mesh _cubeMesh;
|
private Mesh _cubeMesh;
|
||||||
private Texture _cubeTexture;
|
private Texture _cubeTexture;
|
||||||
|
private Texture _cubeTexture2;
|
||||||
private float _rotation;
|
private float _rotation;
|
||||||
|
|
||||||
// -- Scene Objects
|
// -- Scene Objects
|
||||||
private RenderObject _cubeObject;
|
private RenderObject _cubeObject;
|
||||||
|
private RenderObject _cubeObject2;
|
||||||
|
|
||||||
|
private Vector3 _cameraPosition = new Vector3(0.0f, 0.0f, -3.0f);
|
||||||
|
private Vector3 _cameraFront = new Vector3(0.0f, 0.0f, -1.0f);
|
||||||
|
|
||||||
|
private Vector3 _cameraUp = Vector3.UnitY;
|
||||||
|
|
||||||
|
private float _yaw = -90.0f;
|
||||||
|
private float _pitch = 0.0f;
|
||||||
|
|
||||||
|
private float _cameraSpeed = 2.5f;
|
||||||
|
private float _rotationSpeed = 50.0f;
|
||||||
|
|
||||||
|
private float _mouseSensitivity = 0.1f;
|
||||||
|
|
||||||
|
// This prevents a large camera jump when the window first gets focus
|
||||||
|
private bool _firstMove = true;
|
||||||
|
|
||||||
public MyExampleWindow(GameWindowSettings gameWindowSettings, NativeWindowSettings nativeWindowSettings)
|
public MyExampleWindow(GameWindowSettings gameWindowSettings, NativeWindowSettings nativeWindowSettings)
|
||||||
: base(gameWindowSettings, nativeWindowSettings)
|
: base(gameWindowSettings, nativeWindowSettings)
|
||||||
@ -42,12 +60,17 @@ namespace TheLabs
|
|||||||
// Set The background color to a nice blue.
|
// Set The background color to a nice blue.
|
||||||
GL.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
GL.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
||||||
GL.Enable(EnableCap.DepthTest);
|
GL.Enable(EnableCap.DepthTest);
|
||||||
|
CursorState = CursorState.Grabbed;
|
||||||
_shader = new Shader("Shaders/shader.vert", "Shaders/shader.frag");
|
_shader = new Shader("Shaders/shader.vert", "Shaders/shader.frag");
|
||||||
_cubeMesh = ShapeFactory.CreateTexturedCube();
|
_cubeMesh = ShapeFactory.CreateTexturedCube();
|
||||||
_cubeTexture = new Texture("Textures/placeholder.png");
|
_cubeTexture = new Texture("Textures/stone.jpg");
|
||||||
|
_cubeTexture2 = new Texture("Textures/placeholder.png");
|
||||||
_cubeObject = new RenderObject(_cubeMesh, _shader, _cubeTexture);
|
_cubeObject = new RenderObject(_cubeMesh, _shader, _cubeTexture);
|
||||||
_cubeObject.Position = new Vector3(0.0f, 0.0f, -1.0f);
|
_cubeObject2 = new RenderObject(_cubeMesh, _shader, _cubeTexture2);
|
||||||
|
_cubeObject.Position = new Vector3(-1.5f, 0.0f, 0.0f);
|
||||||
|
_cubeObject2.Position = new Vector3(1.5f, 0.0f, 0.0f);
|
||||||
_cubeObject.Scale = new Vector3(0.5f, 0.5f, 0.5f);
|
_cubeObject.Scale = new Vector3(0.5f, 0.5f, 0.5f);
|
||||||
|
_cubeObject2.Scale = new Vector3(0.5f, 0.5f, 0.5f);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -60,9 +83,10 @@ namespace TheLabs
|
|||||||
// 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);
|
||||||
_cubeObject.Rotation = Quaternion.FromEulerAngles(_rotation * 0.5f, _rotation, 0); //
|
_cubeObject.Rotation = Quaternion.FromEulerAngles(_rotation * 0.5f, _rotation, 0); //
|
||||||
|
_cubeObject2.Rotation = Quaternion.FromEulerAngles(-_rotation * 0.5f, -_rotation, 0);
|
||||||
|
|
||||||
// --- Set up Camera ---
|
// --- Set up Camera ---
|
||||||
Matrix4 view = Matrix4.CreateTranslation(0.0f, 0.0f, -3.0f);
|
Matrix4 view = Matrix4.LookAt(_cameraPosition, _cameraPosition + _cameraFront, _cameraUp);
|
||||||
float aspectRatio = (float)Size.X / Size.Y;
|
float aspectRatio = (float)Size.X / Size.Y;
|
||||||
|
|
||||||
// 2. Add a safety check for divide-by-zero
|
// 2. Add a safety check for divide-by-zero
|
||||||
@ -78,6 +102,7 @@ namespace TheLabs
|
|||||||
);
|
);
|
||||||
|
|
||||||
_cubeObject.Draw(view, projection);
|
_cubeObject.Draw(view, projection);
|
||||||
|
_cubeObject2.Draw(view, projection);
|
||||||
|
|
||||||
SwapBuffers();
|
SwapBuffers();
|
||||||
}
|
}
|
||||||
@ -85,7 +110,7 @@ namespace TheLabs
|
|||||||
protected override void OnUpdateFrame(FrameEventArgs e)
|
protected override void OnUpdateFrame(FrameEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnUpdateFrame(e);
|
base.OnUpdateFrame(e);
|
||||||
_rotation += (float)e.Time ;
|
_rotation += (float)e.Time;
|
||||||
var input = KeyboardState;
|
var input = KeyboardState;
|
||||||
|
|
||||||
if (input.IsKeyDown(Keys.Escape))
|
if (input.IsKeyDown(Keys.Escape))
|
||||||
@ -93,8 +118,63 @@ namespace TheLabs
|
|||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IsFocused)
|
||||||
|
{
|
||||||
|
_firstMove = true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var mouuse = MouseState;
|
||||||
|
|
||||||
|
if (_firstMove)
|
||||||
|
{
|
||||||
|
mouuse = MouseState;
|
||||||
|
_firstMove = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Get the mouse's movement delta
|
||||||
|
float deltaX = mouuse.Delta.X;
|
||||||
|
float deltaY = mouuse.Delta.Y;
|
||||||
|
|
||||||
|
// Apply sensitivity
|
||||||
|
_yaw += deltaX * _mouseSensitivity;
|
||||||
|
_pitch -= deltaY * _mouseSensitivity; // Y-axis is inverted
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// --- Rotation (Arrow Keys) ---
|
||||||
|
if (input.IsKeyDown(Keys.Left))
|
||||||
|
{
|
||||||
|
_yaw -= _rotationSpeed * (float)e.Time;
|
||||||
|
}
|
||||||
|
if (input.IsKeyDown(Keys.Right))
|
||||||
|
{
|
||||||
|
_yaw += _rotationSpeed * (float)e.Time;
|
||||||
|
}
|
||||||
|
if (input.IsKeyDown(Keys.Up))
|
||||||
|
{
|
||||||
|
_pitch += _rotationSpeed * (float)e.Time;
|
||||||
|
}
|
||||||
|
if (input.IsKeyDown(Keys.Down))
|
||||||
|
{
|
||||||
|
_pitch -= _rotationSpeed * (float)e.Time;
|
||||||
|
}
|
||||||
|
_pitch = MathHelper.Clamp(_pitch, -89.0f, 89.0f);
|
||||||
|
Vector3 front;
|
||||||
|
front.X = MathF.Cos(MathHelper.DegreesToRadians(_yaw)) * MathF.Cos(MathHelper.DegreesToRadians(_pitch));
|
||||||
|
front.Y = MathF.Sin(MathHelper.DegreesToRadians(_pitch));
|
||||||
|
front.Z = MathF.Sin(MathHelper.DegreesToRadians(_yaw)) * MathF.Cos(MathHelper.DegreesToRadians(_pitch));
|
||||||
|
_cameraFront = Vector3.Normalize(front);
|
||||||
|
var _cameraRight = Vector3.Normalize(Vector3.Cross(_cameraFront, _cameraUp));
|
||||||
|
if (input.IsKeyDown(Keys.W)) _cameraPosition += _cameraFront * _cameraSpeed * (float)e.Time;
|
||||||
|
if (input.IsKeyDown(Keys.S)) _cameraPosition -= _cameraFront * _cameraSpeed * (float)e.Time;
|
||||||
|
if (input.IsKeyDown(Keys.A)) _cameraPosition -= _cameraRight * _cameraSpeed * (float)e.Time;
|
||||||
|
if (input.IsKeyDown(Keys.D)) _cameraPosition += _cameraRight * _cameraSpeed * (float)e.Time;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected override void OnResize(ResizeEventArgs e)
|
protected override void OnResize(ResizeEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnResize(e);
|
base.OnResize(e);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user