James-Yip / FPS-game

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FPS-game

6.19 Update

任务说明

当前重要任务

场景搭建部分

  • 场景搭建及优化

    • PBR渲染,提升场景真实感
  • 粒子系统:怪物消失效果

  • 调整枪位置,固定在屏幕右下方 (可新增一个TransformComponent,来实现物体的平移,旋转)

  • 动画

    • 换弹动画 (向下移出屏幕,再向上移入屏幕至原始位置)
    • 后坐力动画(枪往上移,再向下)

游戏逻辑部分

  • HP,怪物生成及移动

  • 后坐力系统

    • 准心做成正方形的(现在准心会适配窗口的比例,变成长方形的)。
    • 连续开枪时的射速处理。

    http://www.te5.com/pubg/2018/284309.html


之后的重要任务

场景搭建部分

  • 模板测试:加入道具,给道具进行描边。
  • 用实例化渲染处理同时渲染多个相同物体。
  • 织物模拟:在场景中弄个旗子之类的东西。
  • 高级光照:泛光,SSAO
  • GUI 控制不同天气:阴天、傍晚天气,更换天空盒和光照颜色;雾天,更换天空盒,更改光照着色器 https://blog.csdn.net/u010223072/article/details/45022745。
  • 树的绘制:最好能用分形来绘制。
  • 草的绘制:learnopengl -> 高级 OpenGL -> 混合

游戏逻辑部分


已完成知识点

  • Camera Roaming
  • Simple(Blinn-phong) lighting
  • Texture mapping
  • PCSS shadow mapping
  • Model import
  • Sky box
  • Display text
  • Gravity System and Collision Detection
  • Skeletal Animation
  • Partical System

更新备注

6.3

结合HitProcessingSystem产生流血或冒烟效果

触发HitEvent后,在击中处可产生流血或冒烟效果。射击箱子上部可看到明显的效果,其余部位效果不佳,可通过让HitEvent提供射入方向来改善。

6.1

新增子弹碰撞检测 & HitProcessingSystem

  • 鼠标左键点击后,子弹沿当前准星对准方向射出(没有真正生成子弹实体),进行子弹碰撞检测,若子弹与具有 CollisionComponent 的实体碰撞(即相交),会触发 HitEvent
  • 另外,新增 HitProcessingSystem ,用于接收 HitEvent 并 进行子弹射中后的处理(如生成流血,爆炸,弹孔等效果)。 注:HitEvent 中存有被击中的实体对应的指针,以及被击中的位置(世界坐标下)。

5.30

绝对路径

把所有路径改为绝对路径,这样直接用 exe 也能运行. 并且可以用 RenderDoc 工具进行 debug(推荐!)

5.29

新增骨骼动画模型

新建了 BoneObjectComponent 组件,用于加载骨骼动画模型。在 game 中加入骨骼模型,在 rendersystem 中渲染

新增AABB碰撞检测

  • 新增 CollisionComponentCollisionSystem,对需要进行碰撞检测的实体assign一个 CollisionComponent (指明宽度,深度和高度 或者 直接指明body的八个值 x_min, x_max, y_min, y_max, z_min, z_max),即可进行碰撞检测;
  • 按空格键可以实现player的跳跃。

注:由于碰撞检测的需要,Player需要有个向下且较小的Y轴初速度。

5.28

整理 RenderSystem

把各部分渲染的逻辑变成一个个 private 函数,这样在 tick 函数中不会太乱,只需要设置好 shader。

分离 Camera.h 逻辑

删除了 CameraInfoSingletonComponent, CameraMovingSystem, Camera.h,改为用 CameraComponent 保存 camera 的数据,并把 Front, Right 等向量数据保存在 PositionComponent 中。

用 PlayerComponent 代表 player entity

拥有 PlayerComponent 的 entity 就是 player,component 中可以存放 player 游戏中需要的数据。目前只有这个 entity 拥有 CameraComponent,根据这个 entity 的 PositionComponent 位置来更新 camera 的位置。这个 entity 的 model 也会根据视角方向 Front, Right 来进行旋转;通过视角方向计算出 xz 方向的速度,利用 MovementComponent 实现移动。

5.26

物体移动:修改object渲染方式 & MovementSystem

移动时, ObjectComponent 在GPU中的 vertices 数据不实时更新,而是在着色器中通过原始 vertices 数据 + PositionComponent 中的 Position 数据(作为 model 矩阵的位移值)来确定渲染位置。 因此,对于每一个 assign 了 ObjectComponent 的实体,都需要 assign 一个 PositionComponent 来确定其在世界坐标中的位置,否则无法正常将其渲染。

对要移动的实体assign一个MovementComponent(指明速度和加速度),即可实现移动。

粒子系统

  • 新增 ParticleComponent, 提供接口设置粒子个数、喷射位置、喷射方向、粒子颜色等,可模拟不同的粒子效果。
  • RenderSystem 新增 particle 的渲染。

5.18

ObjectComponent, shift 加速

把 Mesh 归入ObjectComponent;修改 RenderSystem,只需渲染 ObjectComponent;把 Model 加入game;把使用 “MeshComponent.h” 的 Headers 改为 "ObjectComponent.h"

修改CubeResource,其init函数以中心位置、长宽高以及贴图对象作为参数,可用于实现地板和墙。

按住左边的 shift 键可以加速移动。

5.16

新的 singleton component 接口

相当于 world 的全局变量,不被某实体所拥有。

template<typename T, typename... Args>
void createSingletonComponent(Args&&... args) {
    this->singletons->assign<T>(args...);
}

template<typename T>
ComponentHandle<T> getSingletonComponent() {
    return this->singletons->get<T>();
}

用法

Game.h 中使用 createSingletonComponent 函数注册对应类型的 singleton component 到 world 实例中。 然后在 system 中调用 world->getSingletonComponent<T>() 获得对应 singleton component 的 handler(可以看成是指针)。

备注

目前只有 MeshComponent 不是 singleton 的,即可以被实体所拥有。可以参考 RenderSystem 中获得和使用非 singleton 组件的例子。以后应该大部分的 component 都不是 singleton 的。

About


Languages

Language:C++ 58.0%Language:C 39.8%Language:Objective-C 1.3%Language:Objective-C++ 0.4%Language:GLSL 0.2%Language:Makefile 0.1%Language:Batchfile 0.1%Language:CMake 0.1%Language:Shell 0.0%