为什么这个DirectX 10" D3DXVec3Lerp"函数返回无效数字?

时间:2017-11-25 00:54:00

标签: c++ directx-10 lerp

我遇到以下代码时出现问题:

//Make life easier by assigning the last two relevant messages to variables
Update pos0 = m_Network->positionUpdates[m_Network->positionUpdates.size() - 1];
Update pos1 = m_Network->positionUpdates[m_Network->positionUpdates.size() - 2];

//Calculate velocities for X and Z from last two messages
velX = (pos0.posX - pos1.posX) / (pos0.timeStamp - pos1.timeStamp);
velZ = (pos0.posZ - pos1.posZ) / (pos0.timeStamp - pos1.timeStamp);

//Calculate the time for when we are trying to predict
predictionTime = totalTime - pos0.timeStamp;

//Linear prediction model to calculate where we want the car to be
D3DXVECTOR3 newPos = D3DXVECTOR3((pos0.posX + velX * predictionTime), 2.0f, (pos0.posZ + velZ * predictionTime));
//Interpolate to the new position
D3DXVec3Lerp(&position, &position, &newPos, timeSinceLastFrame);

//Set the model to where the car is
m_Model->SetPosition(position.x, position.y, position.z);

如您所见,我们的想法是接收从其他客户端收到的消息,并找到对象的速度以计算其位置。

我知道那个部分有效,因为当我简单地将汽车的位置更改为等式的输出时,汽车就会到达它意图去的地方(以非常紧张的方式)。

然而,当我尝试从当前位置到新位置时,汽车甚至不会出现在屏幕上。看看实际上从Ve3Lerp功能返回的是什么,我得到的只是" -1 INDEF"。

任何想法可能会出现什么?

1 个答案:

答案 0 :(得分:0)

卫生署!我想通了。

在第二个客户的汽车开始移动之前,它位于0.0f,0.0f,0.0f。因此,前几个位置更新即将发布,导致此代码尝试除以0以获得velX和velY。

当然,因为我们总是只是在不同的位置之间进行抨击,所以即使在获得适当的值来计算之后,这也会搞砸每个未来的位置。

我这样做了 -

if ((isnan(newPos.x) == false) && (isnan(newPos.z) == false)) {
    D3DXVec3Lerp(&position, &position, &newPos, predictionTime);
    graphicsAngle = pos0.angle;
}