游戏开发中的插补

简介: 游戏开发中的插补

插补


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


基本思想是要从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


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


目录
相关文章
|
7月前
|
算法
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
【每日一题Day297】LC2682找出转圈游戏输家 | 模拟+哈希表
74 0
|
7月前
|
算法
算法编程(二):加一
算法编程(二):加一
62 0
|
7月前
|
算法 Java
算法编程(十四):颠倒二进制位
算法编程(十四):颠倒二进制位
59 0
|
算法 搜索推荐 程序员
C语言第十四练——请输入一个数的逆序数
C语言第十四练——请输入一个数的逆序数
126 0
|
7月前
|
存储 算法
头歌:第1关:有序单链表的插入操作
头歌:第1关:有序单链表的插入操作
307 0
|
6月前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
60 0
|
7月前
【错题集-编程题】孩子们的游戏(圆圈中最后剩下的数)(约瑟夫环)
【错题集-编程题】孩子们的游戏(圆圈中最后剩下的数)(约瑟夫环)
|
7月前
|
存储 算法 程序员
【数据结构-栈 二】【单调栈】每日温度、接雨水
【数据结构-栈 二】【单调栈】每日温度、接雨水
94 0
|
人工智能 C语言
C语言第十八弹---多个字符从两端移动向中间汇聚
C语言第十八弹---多个字符从两端移动向中间汇聚
|
Go C语言 Cloud Native
【刷题日记】762. 二进制表示中质数个计算置位
本次刷题日记的第 25 篇,力扣题为:762. 二进制表示中质数个计算置位 ,简单