現在地 >> メニュー >> 基本編19
INDEX:基本編18 << 基本編19 >> 基本編20


トリミング


トリミングとは、NURBS曲面に対し、「穴をあける」などの「切り取る領域を設定する事」である。

使い方


「gluBeginSurface()関数」と「gluEndSurface()関数」の間に
  1. NURBS曲面を描画
  2. NURBS曲面の輪郭を指定
  3. 穴を開けたい輪郭を指定
すればよい。


輪郭の設定方法


輪郭の設定は「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頂点分記述する。)

NURBS曲面の三角形の穴をあける


[例]

//制御点
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::まとめコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます