私は、基本的にbスプライン曲線を描くための練習であるOpenGLプロジェクトに取り組んできました。私のプログラムはエラーを返しませんが、曲線は表示されません。
'coords'という名前の長さ13のコントロールポイントの配列(コントロールポイント自体はすべて画面に表示されます)が与えられた場合、これは私のコードです。
glBegin(GL_LINE_STRIP);
float x=0;
float y=0;
float z=0;
for (double u = 3; u <= 14; u+=0.1){
for (int i = 1; i <=13; i++){
x += NofU(u,i)*coords[i].x;
y += NofU(u,i)*coords[i].y;
z += NofU(u,i)*coords[i].z;
}//for
}//for
glVertex3f(x, y, z);
glEnd();
ここで、「NofU」はブレンディング関数を表します。
double NofU(double u, int i){
if (u < i)
return 0;
else if (u < i+1)
return (1/6)*pow(u,3);
else if (u < i+2)
return (1/6)*((-3)*pow(u,3)+3*pow(u,2)+3*u+1);
else if (u < i+3)
return (1/6)*(3*pow(u,3)-6*pow(u,2)+4);
else if (u < i+4)
return (1/6)*pow((1-u),3);
else
return 0;
}//NofU
printステートメントを実行しようとすると、座標値がめちゃくちゃ大きいか小さいか、または0になってしまいます。