游戏开发中的插补

简介: 游戏开发中的插补

插补


插值是图形编程中非常基本的操作。熟悉它是很好的,以扩大您作为图形开发人员的视野。


基本思想是要从A过渡到B。A值t表示中间的状态。


例如,如果t为0,则状态为A。如果t为1,则状态为B。介于两者之间的是插值。


在两个实数(浮点数)之间,通常将简单插值描述为:


interpolation = A * (1 - t) + B * t


通常简化为:


interpolation = A + (B - A) * t


这种插值的名称是“线性的”,它以恒定速度将一个值转换为另一个值。因此,当您了解线性插值法时,您会知道他们是在指这个简单的公式。


还有其他类型的插值,此处将不介绍。推荐的后续内容是Bezier页面。


向量插值

向量类型(Vector2和Vector3)也可以插值,它们带有方便的函数来实现 Vector2.linear_interpolate()和Vector3.linear_interpolate()。


对于三次插值,还有Vector2.cubic_interpolate()和Vector3.cubic_interpolate(),它们执行Bezier样式插值。


这是使用插值从A点到B点的简单伪代码:

func _physics_process(delta):
    t += delta * 0.4
    $Sprite.position = $A.position.linear_interpolate($B.position, t)

它将产生以下运动:

20201214171124748.gif



变换插值


也可以插值整个变换(确保它们具有统一的比例尺,或者至少具有相同的非统一比例尺)。为此,可以使用函数Transform.interpolate_with()。


这是将猴子从Position1转换为Position2的示例:


image.png


使用以下伪代码:


var t = 0.0
func _physics_process(delta):
    t += delta
    $Monkey.transform = $Position1.transform.interpolate_with($Position2.transform, t)

再次,它将产生以下运动:

20201214171239592.gif



平滑运动


可以使用插值来平滑移动,旋转等。这是鼠标使用平滑运动跟随圆的示例:


const FOLLOW_SPEED = 4.0
func _physics_process(delta):
    var mouse_pos = get_local_mouse_position()
    $Sprite.position = $Sprite.position.linear_interpolate(mouse_pos, delta * FOLLOW_SPEED)


外观如下:


20201214171332630.gif


这对于使摄像机移动,跟随您的盟友(确保它们保持在一定范围内)以及许多其他常见的游戏模式非常有用。


目录
相关文章
|
4月前
【每日一题Day283】LC822翻转卡片游戏 | 哈希表
【每日一题Day283】LC822翻转卡片游戏 | 哈希表
18 0
|
4月前
|
算法
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
31 0
|
4月前
|
算法 Java
算法编程(十四):颠倒二进制位
算法编程(十四):颠倒二进制位
28 0
|
4月前
|
C语言
C语言第三十四弹--矩形逆置
C语言第三十四弹--矩形逆置
|
4月前
|
C语言
C语言第四十一弹--模拟实现strlen
C语言第四十一弹--模拟实现strlen
|
4月前
|
人工智能 C语言
C语言第十八弹---多个字符从两端移动向中间汇聚
C语言第十八弹---多个字符从两端移动向中间汇聚
|
4月前
|
机器学习/深度学习 C语言
C语言第二十七弹--求n的k次方
C语言第二十七弹--求n的k次方
|
9月前
学C的第二十七天【指针的进阶(三)】-1
复习巩固: 数组名: 数组名是数组首元素的地址, 但是有两个例外:
|
10月前
|
存储 C语言
【C语言—零基础第十一课】旋转大转盘之指针
在生活中我们应该玩过旋转大转盘游戏,指针指到哪个物品我就拿走哪一个物品,这个就是指针。在现实生活中你玩旋转大转盘游戏最后获奖了吗?还有一种就是我们的门牌号我们可以把它想象成为指针,只要我们和其他人说了我们的门牌号他就可以顺着门牌号找到你,而在我们C语言中也有指针。
79 0