gpt4 book ai didi

c++ - 源引擎-加速公式

转载 作者:行者123 更新时间:2023-12-05 05:46:59 25 4
gpt4 key购买 nike

我正在浏览 player movement code对于source engine当我偶然发现以下功能时:

void CGameMovement::Accelerate( Vector& wishdir, float wishspeed, float accel )
{
int i;
float addspeed, accelspeed, currentspeed;

// This gets overridden because some games (CSPort) want to allow dead (observer) players
// to be able to move around.
if ( !CanAccelerate() )
return;

// See if we are changing direction a bit
currentspeed = mv->m_vecVelocity.Dot(wishdir);

// Reduce wishspeed by the amount of veer.
addspeed = wishspeed - currentspeed;

// If not going to add any speed, done.
if (addspeed <= 0)
return;

// Determine amount of accleration.
accelspeed = accel * gpGlobals->frametime * wishspeed * player->m_surfaceFriction;

// Cap at addspeed
if (accelspeed > addspeed)
accelspeed = addspeed;

// Adjust velocity.
for (i=0 ; i<3 ; i++)
{
mv->m_vecVelocity[i] += accelspeed * wishdir[i];
}
}

虽然我理解利用 wishdir 和 wishspeed 来计算速度增量的概念,但我不明白为什么他们在计算加速度:

accelspeed = accel * gpGlobals->frametime * wishspeed * player->m_surfaceFriction;

我认为它以某种方式补偿了由于摩擦引起的速度降低 that was calculated earlier ,但是将这两个变量与 accel * gpGlobals->frametime 相乘似乎没有物理意义。

有人能解释这个计算背后的想法,以及为什么这个额外的 wishspeed * player->m_surfaceFriction 因素应用于 accelspeed 吗?

最佳答案

我的解读

我认为作者让 wishspeed 只是作为 accel 的缩放器,所以 currentspeed 的速度达到了 wishspeedwishspeed 的大小呈线性相关,从而确保 currentspeed 达到 wishspeed 所需的时间对于不同的 大致相同wishspeed 如果其他参数保持不变。

上面的原因是因为这可能会产生作者想要的角色运动的某种紧迫和放松的效果,即当我们希望角色的速度大(小)时,角色的加速度也大(小),无论短跑或慢跑,变速在大致相同的时间内完成。

player->m_surfaceFriction 更明显,作者只是想要一种简单的(线性)方式让表面摩擦值影响玩家的加速度。

一些建议

根据我自己的经验,当试图理解游戏开发领域内与数学相关的机制时,尤其是物理或着色器,我们应该更多地关注作者试图创造的最终效果或用户体验,而不是公式的数学严谨性。

我们不应该用这样的问题来困住自己:这个公式是真的吗?还是这个公式有任何物理意义?

好吧,如果你看一下物理模拟引擎的任何源代码,你会发现它们中的大部分(如果不是全部)都没有使用现实生活中的公式,而是依靠一堆数学技巧来创建最终效果模仿我们对现实生活物理学的期望。

例如,PBD 或 XPBD 是布料或软体模拟中使用最广泛的算法之一,顾名思义,它是基于位置的动态算法,这意味着它们明确地修改了粒子的位置,而不是像现实中那样以隐式方式预期生命(力影响速度然后影响位置),为什么我们使用这样的算法?因为它创造的视觉效果更符合我们的预期。

关于c++ - 源引擎-加速公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71100809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com