расположение сфер вдоль кривой Безье - PullRequest
1 голос
/ 30 июня 2009

Я пробую пару уроков из http://nehe.gamedev.net,, чтобы научиться программированию в openGL. Я бы хотел расположить сферы вдоль кривой Безье так, чтобы они выглядели как нити жемчуга. как я могу расположить такие сферы вдоль кривой. Я рисую кривую, используя алгоритм де Кастельжау, и, следовательно, могу получить точки XYZ на кривой.

1 Ответ

1 голос
/ 30 июня 2009

Если ваши сферы достаточно малы относительно общей длины кривой Безье, вы можете просто расположить их с равными интервалами, чтобы получить вид, похожий на жемчужную нить. (Если сферы относительно велики, вам придется больше беспокоиться о перекрытии сфер - задача не из легких и, вероятно, не очень полезна для изучения 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 в качестве приблизительной оценки. Если вы сделаете это, не забудьте обработать конечные точки специально, используя только следующие или предыдущие точки (в зависимости от того, что у вас есть).

...