Games104作业

百度网盘

希望可以给大家一个参考
https://pan.baidu.com/s/1G4UrNZrtZZaoimJC6D1Xxw
8nzm

作业2

自定义的LUT图

在这里插入图片描述

在Unity中使用后期渲染。

然后使用RenderDoc工具截取LUT图
在这里插入图片描述

将图片路径替换成自己的LUT
在这里插入图片描述

Shader代码
在这里插入图片描述

实现效果
在这里插入图片描述
在这里插入图片描述

整体实现偏向蔚蓝的风格。

自定义外扩线PASS(原创shader算法)
在这里插入图片描述

新建立一个PASS,根据像素的深度来进行外扩线的绘制。
这个PASS有两个input_attachment_binding ,一个是颜色缓冲,一个是深度缓冲。

在这里插入图片描述

还要设置视口大小为全屏
在这里插入图片描述

Shader

在计算周色点周围深度梯度变化时, 设UV偏移量为offset,采样uv+offset的深度加上采样uv-offset处的深度,减去两倍当前uv的深度。作为深度梯度变化的大小,梯度变化越大,说明越有可能在边界处,那么就混合设置的外扩线颜色。

顶点着色器

在这里插入图片描述
片元着色器
在这里插入图片描述

效果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

作业3

1.状态机update
1.1代码截图
在这里插入图片描述
在这里插入图片描述

1.2实现思路
在这里插入图片描述

基本按照上图的状态机图实现,不过没有walk_end状态。
当进入一个状态后,满足切换状态的条件后,开始切换状态。
如果有多个切换状态被满足,选择优先级高的。

  1. AnimationPose::blend
    2.1代码截图

在这里插入图片描述

2.2实现思路
首先得到自己和要混合骨骼的权重和就是sum_weight,然后用1减去自己骨骼权重除以sum_weight,就得到要混合的lerp值就是cur_weight。
通过Vector3中的lerp函数和Quaternion中的nlerp函数实现两个骨骼的混合,混合值为cur_weight。然后将自己的权重变为sum_weight。

3 CharacterController::move
3.1代码截图

在这里插入图片描述
在这里插入图片描述

3.2实现思路
人物的水平位移分为三步:
 直接水平位移,如果有碰撞到物体,位移到碰撞物体处,并进行下一步。
 设置一个最大跳跃台阶值,如同碰撞点的相对高度小于这个值,将人物抬升到碰撞点的高度继续位移。
 进行以上两步的水平位移小于期望的水平位移值,那么就进行沿着碰撞物移动。首先得到碰撞点的法线,然后叉乘Z轴方向,得到沿着物体移动的方向,再根据人物移动方向点成沿着物体的方向,得到是沿着物体移动的正方向还是反方向。沿着这个方向移动继续移动,直到移动的总位移达到期望值。

作业4

  1. 新增Struct
    新增一个结构体MyStruct。
    在这里插入图片描述

在这里插入图片描述

value:表示实际值。
min_value:表示最小值。
max_value:表示最大值。

在MotorComponent中新加一个成员

表示自己的跳跃高度,默认值为1.0f,最小跳跃高度 是0.5f,最大跳跃高度是5.0f。

  1. 面板显示
    在editor_ui.cpp中加入如下代码。
    在这里插入图片描述

对于MyStruct的显示,这里使用了ImGui的滑动条,min_value作为滑动条最小值,max_value作为滑动条最大值。

在这里插入图片描述

  1. 跳跃逻辑修改
    将跳跃的高度设置为MyStruct中value的高度。

从而实现跳跃高度的修改。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41041725/article/details/128104049