# rbr_chase_cam_plugin **Repository Path**: ztmz/rbr_chase_cam_plugin ## Basic Information - **Project Name**: rbr_chase_cam_plugin - **Description**: RBR 追尾视角插件 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-19 - **Last Updated**: 2024-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # chase-cam #### 介绍 RBR 追尾视角插件 #### 软件架构 定义全局参数: - 更新帧率 fps_overall: int - 检测帧率 fps_detection: int - 平滑程度 smoothness_factor: float (0-1) - 预设镜头位置 cam_pos: D3DXVECTOR3 - 预设镜头朝向 cam_orientation: D3DXVECTOR3 - 预设镜头其他参数 cam_pov1, cam_pov2: D3DXVECTOR3; cam_fov, cam_near: float > 此处的`帧率`并非指游戏内的渲染帧率,而是追尾视角插件的逻辑更新帧率 方案A: 1. 锁定游戏镜头类型为`0x03`(自定义镜头) 2. 锁定更新率为`fps_overall`帧/秒。其中每`fps_detection`帧(每`fps_detection/fps_overall`秒)检测一次车头朝向,随后的`fps_detection`帧时间内将当前镜头平滑到与预设镜头位置连线的`smoothness_factor`处;同样将预设镜头朝向也平滑到`smoothness_factor`的位置 3. 此方案可能存在问题是平滑动画算法,linear?ease-in/out?需要在每两个`fps_detection`帧时间之间(上一个`fps_detection`帧时间结束,和下一个`fps_detection`帧时间开始)保持相同的镜头速度,如何保证呢?例如当前镜头速度为`v`,那么在`fps_detection`帧时间内,距离固定,时间固定,可以推算出在`fps_detection`中每一帧的具体位置偏移`d_i`和镜头速度`v_i`(简单的物理学) ![示意图](https://gitee.com/ztmz/docs/raw/master/rbr_chase_cam_plugin/ztmz_rbr_chase_cam_plugin.png) ![Smooth](https://gitee.com/ztmz/docs/raw/master/rbr_chase_cam_plugin/ztmz_rbr_chase_cam_plugin_smooth.png) 大概就能实现了? 但这似乎没有考虑车辆惯性而只是做了镜头平滑,那么如何加入惯性呢? 将上述**方案A**流程中的预设镜头替换为`目标镜头`,在车辆产生惯性时,相对于预设镜头来修改目标镜头的位置,例如: 1. 车辆直线加速时,目标镜头向后(远离车辆)移动 2. 车辆刹车时,目标镜头向前移动(靠近车辆) 3. 车辆右转时,目标镜头位置向左偏移 4. 车辆左转时,目标镜头位置向右偏移 但实际效果还得实现之后慢慢调,或许惯性的部分不需要考虑太多,因为之前的**方案A**镜头平滑已经能够在固定时间(固定帧率)内感知到速度的变化(加速度 m/s /s) ----- 12/21/2024 可以修改的镜头位置并不是镜头在世界中的位置,而是镜头相对于车辆的位置,因此**方案A**需要做出修改 - 根据车辆的朝向 x/w, y/w, z/w的变化程度,来修改镜头的x 和y,然后根据车辆受到的加速度来调整z ----- 12/22/2024 无法更改 tgt_x,y,z, 仅仅修改 pos_x,pos_z 即可实现,直接改内存中的 camPos即可,调用 set_camera_target 成功,但没有效果 更改z的时候给与加速度较小的权重,仅仅有点点加速的突变和减速的突变即可;主要使用速度作为镜头的偏移位置,平滑也是往 速度偏移位置进行平滑?或许不需要平滑? 更改x的时候注意计算旋转角度,目前旋转角好像计算错了,导致总是向右偏移