aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorraysan5 <raysan5@gmail.com>2016-03-05 15:40:08 +0100
committerraysan5 <raysan5@gmail.com>2016-03-05 15:40:08 +0100
commit5ea18b9426823e92f1fc16e686702f2caadf83c9 (patch)
treec668cd3dd6b4d80c6f521ab3b080ebf27216e81d /src
parentd8bd8634ab7d5179cb1481206176af1f8e592e75 (diff)
downloadraylib-5ea18b9426823e92f1fc16e686702f2caadf83c9.tar.gz
raylib-5ea18b9426823e92f1fc16e686702f2caadf83c9.zip
Support 2d camera system -IN PROGRESS-
Diffstat (limited to 'src')
-rw-r--r--src/core.c21
-rw-r--r--src/raylib.h11
2 files changed, 29 insertions, 3 deletions
diff --git a/src/core.c b/src/core.c
index a8cc593a..870ca3b4 100644
--- a/src/core.c
+++ b/src/core.c
@@ -560,8 +560,25 @@ void BeginDrawing(void)
// NOTE: Not required with OpenGL 3.3+
}
-// Setup drawing canvas with extended parameters
-void BeginDrawingEx(int blendMode, Shader shader, Matrix transform)
+// Setup drawing canvas with 2d camera
+void BeginDrawingEx(Camera2D camera)
+{
+ BeginDrawing();
+
+ // TODO: Consider origin offset on position, rotation, scaling
+
+ Matrix matRotation = MatrixRotate((Vector3){ 0.0f, 0.0f, 1.0f }, camera.rotation*DEG2RAD);
+ Matrix matScale = MatrixScale(camera.zoom, camera.zoom, 1.0f);
+ Matrix matTranslation = MatrixTranslate(camera.position.x, camera.position.y, 0.0f);
+ Matrix matOrigin = MatrixTranslate(-camera.origin.x, -camera.origin.y, 0.0f);
+
+ Matrix matTransform = MatrixMultiply(MatrixMultiply(matScale, matRotation), matTranslation);
+
+ rlMultMatrixf(MatrixToFloat(matTransform));
+}
+
+// Setup drawing canvas with pro parameters
+void BeginDrawingPro(int blendMode, Shader shader, Matrix transform)
{
BeginDrawing();
diff --git a/src/raylib.h b/src/raylib.h
index b6cf98fe..7173a556 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -315,6 +315,14 @@ typedef struct Camera {
float fovy; // Field-Of-View apperture in Y (degrees)
} Camera;
+// Camera2D type, defines a 2d camera
+typedef struct Camera2D {
+ Vector2 position; // Camera position
+ Vector2 origin; // Camera origin (for rotation and zoom)
+ float rotation; // Camera rotation in degrees
+ float zoom; // Camera zoom (scaling), should be 1.0f by default
+} Camera2D;
+
// Bounding box type
typedef struct BoundingBox {
Vector3 min;
@@ -528,7 +536,8 @@ int GetScreenHeight(void); // Get current scree
void ClearBackground(Color color); // Sets Background Color
void BeginDrawing(void); // Setup drawing canvas to start drawing
-void BeginDrawingEx(int blendMode, Shader shader, Matrix transform); // Setup drawing canvas with extended parameters
+void BeginDrawingEx(Camera2D camera); // Setup drawing canvas with 2d camera
+void BeginDrawingPro(int blendMode, Shader shader, Matrix transform); // Setup drawing canvas with pro parameters
void EndDrawing(void); // End canvas drawing and Swap Buffers (Double Buffering)
void Begin3dMode(Camera camera); // Initializes 3D mode for drawing (Camera setup)