我正在尝试来自http://nehe.gamedev.net的几个教程,为了学习openGL编程,我想沿着Bezier曲线定位球体,使它们看起来像一串珍珠。如何沿着曲线定位这样的球体。我使用de Casteljau算法绘制曲线,因此可以得到曲线上的XYZ点。
答案 0 :(得分:1)
如果您的球体相对于贝塞尔曲线的整体长度足够小,您可以按照均匀的间隔定位球体,以获得类似于一串珍珠的外观。 (如果球体相对较大,那么你将不得不开始担心球体重叠 - 这不是一个简单的问题,对于学习OpenGL可能不是很有启发性。)
贝塞尔曲线的参数值t
从0
到1
不等。要评估10个位置(末端和8个内点)的贝塞尔曲线,您可以执行以下操作:
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)
的{{1}}。只需选择t
即可获得满意的结果。如果您想尝试自动选择radius
,只需使用从点radius
到点i
和i-1
的最小距离的一半作为粗略估算。如果你这样做,请记住特别使用下一个或前一个点(无论你有哪个)来处理终点。