久々の更新。技術系覚え書き。といっても後15分で家を出なきゃならんので適当に書きます。

OpenGLでペジェ曲線を書く時にNurbs関数を使いますが、これの使用方法がネットなどにもあまり乗っていなくて学習に困った。色々と調べて実験を繰り返した結果、やっと仕組みがわかってきた。


ポリゴンは次回に書くとして、今回はラインのみ。

まずセットアップで、NurbsObj = gluNewNurbsRenderer();
としてobjを作る。ここにデータが格納される模様。

プロパティを設定するとして

gluNurbsProperty(NurbsObj, ...., 2); 最後の数字は滑らかさを指定。数値が小さい方が滑らからしい。

とりあえずここまではよいとして次


gluNurbsCurve(NurbsObj, POINT_NUMBER, knotVector, 3, CtlPoint_val,4, GL_MAP1_VERTEX_3);
ここでNurbsObjは前述の通り
次のargは制限点の数
次は点のKnot情報。これが厄介。最初は意味が分からんかったけど、制限点の数によって内容がかわる。ここが重要
つまり、

制御点が1個の場合で、制御点の座標が(x,y,z)の三次元の場合は

knotVector[] = {0,0,0,0,1,1,1,1};
となる。ここで、最初の4つの0は、三次元の座標の場合はこれで固定。

問題は、その後の4つの1。
これは百聞は一見にしかずで、制御点を増やした時の変化を見てみよう

制御点2つ
knotVector[] = {0,0,0,0,1,2,2,2,2};

制御点3つ
knotVector[] = {0,0,0,0,1,2,3,3,3,3}

制御点4つ
knotVector[] = {0,0,0,0,1,2,3,4,4,4,4};

となります。
つまり

制御点n個(n>0)に対して
knotVector[] = {0,0,0,0,1,2,3........,n-2, n-1, n, n, n, n}; (最後に4つのn)
になる。

で、これを状況に応じて自動で設定するには、もちforループを使えばok

for(i=0; i<4;i++) // {0,0,0,0} ここで最初の4つの0を書く。
knotVector[i] = 0;
for(i=0;i<3+POINT_NUMBER;i++){ // {0,0,0,0,1,2...,n,n,n,n,n...,n} のこりを書く。
if(i>=POINT_NUMBER)
knotVector[i+4] = POINT_NUMBER;

else {
knotVector[i+4]= i+1;

}
}


わかりにくいけども
最初に4つ0を格納し、次に5番目の領域から数列を格納し、n番目に到達した時に、場合わけでnを4回格納。以上。

そして、制御点の座標は

float CtlPoint_val[POINT_NUMBER*3]; // Pointひとつにつき、三つの座標という意味で乗算。


for(i=0; i
CtlPoint_val[i] = rand();//x
CtlPoint_val[i+1] = rand();//y
CtlPoint_val[i+2] = rand();//z
}

こんな感じで格納すれば良か。
#include
srand((unsigned)time(NULL))忘れないでね。

これで、リアルタイムで制御点がかわっても、その都度計算し直してくれるよ。
GL_LINE_SMOOTHとか使わないといまいちかな。やっぱり。

あとこれ、どのくらい重たいのかなぁ。まだ実験していないけど。

ということで。ではでは。








夏休みまで残る所一日となった。金曜日は電子音楽スタジオの掃除と最後の楽曲分析の授業がある。

ところで、今日の楽曲分析の授業では、この前のコンサートで演奏された自分の作品を、皆の前でプレゼンしてくれないかと先生から頼まれた。もともと金曜日にしてほしいと頼まれていたのだが、予定の変更で急遽今日やることになった。全く準備していない所からの説明はやはりしどろもどろになり、何を話せばいいやらと大変とまどった。
ただ先生や、学生からも色々な意見をもらうことができたし、何より興味をもって自分の作品に耳をかたむけてくれる事は喜びでもあった。

今日は其の後、所謂卒業式みたいなものがあり、生徒が一人一人壇上で卒業証書をうけとっていた。
永遠とどんちゃんやっているので、ずっと外で待っていた。やっと授与式が終わり、ワイン等が振る舞われたが、今日はとても疲れたので日本人学生に一通り挨拶して帰って来た。




学年を締めくくるコンサートが学校で行われており、学生内から選ばれた演奏家がソロやコンチェルトを行う。そこに作曲科のコンサートもあり、バーゼル市のアンサンブルによって演奏された。
自分も弦楽五重奏+パーカッション+ビデオの曲を作曲し演奏されたが、最後ぎりぎりまで色々な不安要素があった。
自分の勘違いで三回あるリハのうち、中一回に参加する事ができなかった。初回のリハには顔を出していたので、彼らだけでも十分リハはできたのだが、三回目のリハで変更点等を随分追加した。
コンサート前のG.Pでも演奏者が譜面を間違えたり、タイミングを4小節ずらしたりと散々だったので、結構不安だった。
だが、やはりさすがプロと言うべきか、本番の演奏は今迄のリハのものとは比べ物にならないほどの出来であった。音の繊細さや、クレッシェンド、デクレッシェンドの精度はさることながら、全体的なダイナミクスが何割も増した。そして何より、決定的なミスがなかった。

唯一の不満は、バーゼルの大ホールにプロジェクターや大型スクリーンが用意されておらず、質の低いプロジェクタと小さいスクリーンで映像を映すハメになってしまったこと。
もし国立音楽大学のような設備でやったら、もっともっと違う印象をお客さんに与える事ができただろう。

いずれにせよ、個人的には満足いく出来映えで、他の作曲家の曲とは、良くも悪くも違った雰囲気が認められ、お客さんの反応もよかったと思う。