1
我在嘗試幾個來自http://nehe.gamedev.net的教程,爲了學習openGL編程,我想沿着貝塞爾曲線定位球體,使它們看起來像一串珍珠。我怎樣才能將這樣的球體定位在曲線上。我使用de Casteljau算法繪製曲線,因此可以得到曲線上的XYZ點。沿貝塞爾曲線的位置球體
我在嘗試幾個來自http://nehe.gamedev.net的教程,爲了學習openGL編程,我想沿着貝塞爾曲線定位球體,使它們看起來像一串珍珠。我怎樣才能將這樣的球體定位在曲線上。我使用de Casteljau算法繪製曲線,因此可以得到曲線上的XYZ點。沿貝塞爾曲線的位置球體
如果您的球體相對於貝塞爾曲線的整體長度足夠小,您可以將球體以均勻的間隔定位以獲得類似於一串珍珠的外觀。 (如果球體比較大,那麼你就不得不開始擔心球體重疊 - 這不是一個簡單的問題,並且可能對於學習OpenGL並不是很有指導意義。)
貝塞爾曲線的參數值t
從0
至1
。爲了評估在10個地點(兩端和八個內部點)的貝塞爾曲線,你可以做這樣的事情:
for(int i = 0; i <= 9; ++i)
{
double t = i/9.0;
double x, y;
EvalBezier(t, x, y);
DrawSphere(x, y, radius);
}
凡EvalBezier(t, x, y)
填補(x,y)
對於給定t
。只需選擇radius
即可獲得令人滿意的結果。如果您想嘗試自動選擇radius
,則只需使用距離點i
至點i-1
和i+1
的最小距離的一半作爲粗略估計值。如果你這樣做,請記住專門處理終點,只使用下一個或前一個點(無論你有哪些點)。