2009-06-30 62 views
1

我在尝试几个来自http://nehe.gamedev.net的教程,为了学习openGL编程,我想沿着贝塞尔曲线定位球体,使它们看起来像一串珍珠。我怎样才能将这样的球体定位在曲线上。我使用de Casteljau算法绘制曲线,因此可以得到曲线上的XYZ点。沿贝塞尔曲线的位置球体

回答

1

如果您的球体相对于贝塞尔曲线的整体长度足够小,您可以将球体以均匀的间隔定位以获得类似于一串珍珠的外观。 (如果球体比较大,那么你就不得不开始担心球体重叠 - 这不是一个简单的问题,并且可能对于学习OpenGL并不是很有指导意义。)

贝塞尔曲线的参数值t01。为了评估在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-1i+1的最小距离的一半作为粗略估计值。如果你这样做,请记住专门处理终点,只使用下一个或前一个点(无论你有哪些点)。