我正在嘗試使對象動起來,我們假設它是一輛汽車。我想從點計算沿路徑的旋轉
X1,Y1去,Z1
點X2,Y2,Z2。它移動到這些點,但它似乎是漂移,而不是指向運動的方向。所以我的問題是:我怎麼才能解決這個問題在我的updateframe()事件?你能指點我一些好資源的方向嗎?
謝謝。
我正在嘗試使對象動起來,我們假設它是一輛汽車。我想從點計算沿路徑的旋轉
X1,Y1去,Z1
點X2,Y2,Z2。它移動到這些點,但它似乎是漂移,而不是指向運動的方向。所以我的問題是:我怎麼才能解決這個問題在我的updateframe()事件?你能指點我一些好資源的方向嗎?
謝謝。
首先,你如何表現道路?
我最近完成了這件事情,我用Catmull-Rom樣條的道路。要定位一個物體並使其跟隨樣條路徑,您需要插入沿着樣條線行走的當前位置,然後沿着Frenet座標系或Frenet Frame定位該特定位置。
基本上對於每個點你需要3個向量:切線,正常和Binormal。切線將成爲您希望物體(汽車)指向的實際方向。
我選擇Catmull-Rom是因爲它們很容易扣除任何點的切線 - 只需將其他兩個近點之間的(矢量)差異與當前點之間的差異。 (假設你在t,挑t-epsilon和t + epsilon - epsilon是一個足夠小的常量)。
對於其他2個向量,就可以使用this iterative method - 這是你開始有一端一組已知的載體,和你的工作基礎上,前一個每個updateframe())的新集。
您需要確定汽車的初始方向以及汽車在目的地的最終方向,然後在它們之間進行插值以確定當前時間步之間的方向。
This本文描述了進行插值後的數學運算,以及一些可能對您有用的旋轉物體的其他事情。一般來說gamasutra.com是這類事情的絕佳資源。
我認爲插值是給你漂移,你看到。 你需要模擬轉向的工作方式..你的更新功能應該1)將汽車總是朝着它指向的方向移動,2)將汽車轉向當前目標..一個不應該影響另一個,這樣轉彎將發生並比到達更快完成。
一般地說,汽車所指向的方向是沿其速度矢量,這是其位置向量的一階導數。
x = r.sin(2πt/n)
:
例如,如果汽車在一個圓圈圍繞原點每隔Ñ秒然後轉到(半徑的- [R)汽車的位置的X分量由下式給出
及其速度矢量的X分量將是:
vx = dx/dt = r.(2π/n)cos(2πt/n)
做T他對所有的x,y和z組件進行歸一化,對得到的向量進行歸一化,並且你有你的方向。
始終將汽車指向目的地點既簡單又便宜,但如果汽車沿着彎曲的路線行駛,則不會起作用。在這種情況下,您需要將車沿着切線指向其當前位置(請參閱上面的其他答案)。
從一個位置到另一個位置給予一個物體一個速度,一個速度是一個矢量,並且對該矢量進行歸一化將爲您提供可以插入到「看」矩陣中的運動的方向矢量,用這個矢量來獲得邊和嘿presto你有一個完整的矩陣來控制運動物體的方向。