summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/core/core_3d_camera_first_person.c22
-rw-r--r--src/rcamera.h25
2 files changed, 30 insertions, 17 deletions
diff --git a/examples/core/core_3d_camera_first_person.c b/examples/core/core_3d_camera_first_person.c
index de0a43c3..6a2a115a 100644
--- a/examples/core/core_3d_camera_first_person.c
+++ b/examples/core/core_3d_camera_first_person.c
@@ -123,15 +123,19 @@ int main(void)
// This new camera function allows custom movement/rotation values to be directly provided
// as input parameters, with this approach, rcamera module is internally independent of raylib inputs
UpdateCameraPro(&camera,
- (IsKeyDown(KEY_W) || IsKeyDown(KEY_UP))*0.1f - // Move forward-backward
- (IsKeyDown(KEY_S) || IsKeyDown(KEY_DOWN))*0.1f,
- (IsKeyDown(KEY_D) || IsKeyDown(KEY_RIGHT))*0.1f - // Move right-left
- (IsKeyDown(KEY_A) || IsKeyDown(KEY_LEFT))*0.1f,
- 0.0f, // Move up-down
- GetMouseWheelMove()*2.0f, // Move to target (zoom)
- GetMouseDelta().x*0.05f, // Rotation: yaw
- GetMouseDelta().y*0.05f, // Rotation: pitch
- 0.0f); // Rotation: roll
+ (Vector3){
+ (IsKeyDown(KEY_W) || IsKeyDown(KEY_UP))*0.1f - // Move forward-backward
+ (IsKeyDown(KEY_S) || IsKeyDown(KEY_DOWN))*0.1f,
+ (IsKeyDown(KEY_D) || IsKeyDown(KEY_RIGHT))*0.1f - // Move right-left
+ (IsKeyDown(KEY_A) || IsKeyDown(KEY_LEFT))*0.1f,
+ 0.0f // Move up-down
+ },
+ (Vector3){
+ GetMouseDelta().x*0.05f, // Rotation: yaw
+ GetMouseDelta().y*0.05f, // Rotation: pitch
+ 0.0f // Rotation: roll
+ },
+ GetMouseWheelMove()*2.0f); // Move to target (zoom)
*/
//----------------------------------------------------------------------------------
diff --git a/src/rcamera.h b/src/rcamera.h
index 17223758..8b37ff7b 100644
--- a/src/rcamera.h
+++ b/src/rcamera.h
@@ -471,25 +471,34 @@ void UpdateCamera(Camera *camera, int mode)
#endif // !CAMERA_STANDALONE
// Update camera movement, movement/rotation values should be provided by user
-void UpdateCameraPro(Camera *camera, float moveForward, float moveRightLeft, float moveUpDown, float moveToTarget, float yaw, float pitch, float roll)
+void UpdateCameraPro(Camera *camera, Vector3 movement, Vector3 rotation, float zoom)
{
+ // Required values
+ // movement.x - Move forward/backward
+ // movement.y - Move right/left
+ // movement.z - Move up/down
+ // rotation.x - yaw
+ // rotation.y - pitch
+ // rotation.z - roll
+ // zoom - Move towards target
+
bool lockView = true;
bool rotateAroundTarget = false;
bool rotateUp = false;
bool moveInWorldPlane = true;
// Camera rotation
- CameraPitch(camera, -pitch*DEG2RAD, lockView, rotateAroundTarget, rotateUp);
- CameraYaw(camera, -yaw*DEG2RAD, rotateAroundTarget);
- CameraRoll(camera, roll*DEG2RAD);
+ CameraPitch(camera, -rotation.y*DEG2RAD, lockView, rotateAroundTarget, rotateUp);
+ CameraYaw(camera, -rotation.x*DEG2RAD, rotateAroundTarget);
+ CameraRoll(camera, rotation.z*DEG2RAD);
// Camera movement
- CameraMoveForward(camera, moveForward, moveInWorldPlane);
- CameraMoveRight(camera, moveRightLeft, moveInWorldPlane);
- CameraMoveUp(camera, moveUpDown);
+ CameraMoveForward(camera, movement.x, moveInWorldPlane);
+ CameraMoveRight(camera, movement.y, moveInWorldPlane);
+ CameraMoveUp(camera, movement.z);
// Zoom target distance
- CameraMoveToTarget(camera, moveToTarget);
+ CameraMoveToTarget(camera, zoom);
}
#endif // CAMERA_IMPLEMENTATION