private static unsafe void OnRender(double obj) { Gl.Enable(EnableCap.DepthTest); Gl.Clear((uint)(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit)); Vao.Bind(); Texture.Bind(); Shader.Use(); Shader.SetUniform("uTexture0", 0); //Use elapsed time to convert to radians to allow our cube to rotate over time var difference = (float)(window.Time * 100); var model = Matrix4x4.CreateRotationY(MathHelper.DegreesToRadians(difference)) * Matrix4x4.CreateRotationX(MathHelper.DegreesToRadians(difference)); var view = Matrix4x4.CreateLookAt(CameraPosition, CameraTarget, CameraUp); var projection = Matrix4x4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(45.0f), Width / Height, 0.1f, 100.0f); Shader.SetUniform("uModel", model); Shader.SetUniform("uView", view); Shader.SetUniform("uProjection", projection); //We're drawing with just vertices and no indicies, and it takes 36 verticies to have a six-sided textured cube Gl.DrawArrays(PrimitiveType.Triangles, 0, 36); }
private static unsafe void OnMouseMove(IMouse mouse, Vector2 position) { var lookSensitivity = 0.1f; if (LastMousePosition == default) { LastMousePosition = position; } else { var xOffset = (position.X - LastMousePosition.X) * lookSensitivity; var yOffset = (position.Y - LastMousePosition.Y) * lookSensitivity; LastMousePosition = position; CameraYaw += xOffset; CameraPitch -= yOffset; //We don't want to be able to look behind us by going over our head or under our feet so make sure it stays within these bounds CameraPitch = Math.Clamp(CameraPitch, -89.0f, 89.0f); CameraDirection.X = MathF.Cos(MathHelper.DegreesToRadians(CameraYaw)) * MathF.Cos(MathHelper.DegreesToRadians(CameraPitch)); CameraDirection.Y = MathF.Sin(MathHelper.DegreesToRadians(CameraPitch)); CameraDirection.Z = MathF.Sin(MathHelper.DegreesToRadians(CameraYaw)) * MathF.Cos(MathHelper.DegreesToRadians(CameraPitch)); CameraFront = Vector3.Normalize(CameraDirection); } }