最終更新: mikk_ni3_92 2008年11月06日(木) 10:19:09履歴
現在地 >> メニュー >> 基本編19
INDEX:基本編18 << 基本編19 >> 基本編20
輪郭の設定は「gluBeginTrim()」、「gluEndTrim()」、「gluPwlCurve()」を使う
[例]
■void gluPwlCurve(GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);
トリミング閉曲線を設定する。
―第1引数―
対象のnurbsオブジェクトを指定。
―第2引数―
輪郭線の頂点の数
―第3引数―
輪郭線のデータ元
―第4引数―
1頂点が何要素かを指定。
―第5引数―
「GLU_MAP1_TRIM_2」か「GLU_MAP1_TRIM_3」を設定する。
※メモ:輪郭線の頂点数
輪郭線の頂点数は、スタート位置と終了位置が同じなのだが、
データとしては、用意する必要がある。(例の場合、実際は4頂点だが、データは5頂点分記述する。)
[例]
サンプル >> 基本編19::まとめコード
INDEX:基本編18 << 基本編19 >> 基本編20
輪郭の設定は「gluBeginTrim()」、「gluEndTrim()」、「gluPwlCurve()」を使う
[例]
//輪郭線の各頂点 float OutContour[5][2]= { {0,0},{1,0},{1,1},{0,1},{0,0}//(u,v) }; ... ... //nurbsオブジェクト GLUnurbsObj *theNurb; ... ... //NURBS曲面の輪郭を設定 gluBeginTrim (theNurb); gluPwlCurve (theNurb, 5, &OutContour[0][0], 2, GLU_MAP1_TRIM_2); gluEndTrim (theNurb); ... ...
■void gluPwlCurve(GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);
トリミング閉曲線を設定する。
―第1引数―
対象のnurbsオブジェクトを指定。
―第2引数―
輪郭線の頂点の数
―第3引数―
輪郭線のデータ元
―第4引数―
1頂点が何要素かを指定。
―第5引数―
「GLU_MAP1_TRIM_2」か「GLU_MAP1_TRIM_3」を設定する。
※メモ:輪郭線の頂点数
輪郭線の頂点数は、スタート位置と終了位置が同じなのだが、
データとしては、用意する必要がある。(例の場合、実際は4頂点だが、データは5頂点分記述する。)
[例]
//制御点 float CtlPoint[16][3]={... ...}; //外周の輪郭(u,v)座標で5点(反時計まわり) float OutContour[5][2]={... ...}; //穴を開けたい輪郭を指定(時計まわり) float InContour[4][2]={... ...}; ... ... gluBeginSurface(theNurb); gluNurbsSurface(theNurb, 8, uknot,8, vknot,3,3*4,&CtlPoint[0][0], 4, 4,GL_MAP2_VERTEX_3);//曲面描画 gluBeginTrim (theNurb); //外周輪郭 gluPwlCurve (theNurb, 5, &OutContour[0][0], 2, GLU_MAP1_TRIM_2); gluEndTrim (theNurb); gluBeginTrim (theNurb); //内周輪郭(ここが穴となる) gluPwlCurve (theNurb, 4, &InContour[0][0], 2, GLU_MAP1_TRIM_2); gluEndTrim (theNurb); gluEndSurface(theNurb);
サンプル >> 基本編19::まとめコード