Files
lity3d/Engine/Rendering/camera_controller.h
T

45 lines
1.4 KiB
C

#pragma once
// ============================================================================
// camera_controller.h - 增强相机控制器(飞行 / 步行模式)
// ============================================================================
#include "camera.h"
#include "../ASM/math_c_fallback.h"
typedef enum {
CAMERA_MODE_FLY,
CAMERA_MODE_WALK,
} CameraMode;
typedef struct {
Camera* camera;
CameraMode mode;
float move_speed;
float mouse_sensitivity;
float height_offset; // 步行模式眼睛离地面高度
float pitch_min;
float pitch_max;
float yaw;
float pitch;
float (*ground_height_fn)(float x, float z, void* user);
void* ground_user;
} CameraController;
CameraController camera_controller_create(Camera* camera);
// 更新 yaw/pitch,鼠标输入以 delta 像素为单位
void camera_controller_look(CameraController* ctrl, float delta_x, float delta_y);
// 移动:dir 为本地空间方向 (x=右, y=上, z=前)
void camera_controller_move(CameraController* ctrl, Vec3 dir, float dt);
// 设置地形高度采样回调
void camera_controller_set_ground_callback(CameraController* ctrl, float (*get_height)(float x, float z, void* user), void* user);
// 切换模式
void camera_controller_set_mode(CameraController* ctrl, CameraMode mode);
// 每帧应用约束(如步行贴地)
void camera_controller_update(CameraController* ctrl, float dt);