Browse Source

REVIEWED: `UpdateCameraPro()` to use `Vector3`

pull/2957/head
Ray 1 year ago
parent
commit
8ca3212701
2 changed files with 30 additions and 17 deletions
  1. +13
    -9
      examples/core/core_3d_camera_first_person.c
  2. +17
    -8
      src/rcamera.h

+ 13
- 9
examples/core/core_3d_camera_first_person.c View File

@ -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)
*/
//----------------------------------------------------------------------------------

+ 17
- 8
src/rcamera.h View File

@ -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, kt">float moveForward, float moveRightLeft, float moveUpDown, float moveToTarget, float yaw, float pitch, float roll)
void UpdateCameraPro(Camera *camera, n">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, rotationlass="p">.lass="n">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

Loading…
Cancel
Save