最終更新: mikk_ni3_92 2008年10月01日(水) 15:25:31履歴
現在地 >> メニュー >> 基本編12 >> OpenGL::曲面 >> 曲面::glMap()関数
関連:曲面::メッシュでの描画、曲面::Nurbsオブジェクト
エバリュエータによって、1頂点何要素使うか、頂点数、計算用パラメータ等を設定する。
― 第1引数:target ―
様々な指定があるが
― 第2、3、6、7引数:u1,u2,v1,v2 ―
パラメータの計算方法。
u1 = 0、u2 = 1とすれば、指定したパラメータがそのまま適用される。
それ以外は、あるパラメータtに対し( t - u1 )/(u2 - u1)がパラメータとして使われる
― 第4、5、8、9引数: ustride、uorder、vstride、vorder―
※v方向のstrideにはu方向の(頂点数*1頂点の要素数)を指定する事になる。
― 第10引数: points―
制御点のデータ元。
有効化はglEnable()
描画は「glEvalCoord2f()」や「glEvalCoord2d()」を使う。
[例]
この他、エバリュエータでは、メッシュを利用した描画方法もある。
サンプルコード >> 曲面::まとめコード1
関連:曲面::メッシュでの描画、曲面::Nurbsオブジェクト
エバリュエータによって、1頂点何要素使うか、頂点数、計算用パラメータ等を設定する。
void glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, //u方向の設定 GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, //v方向の設定 const GLfloat * points);
― 第1引数:target ―
様々な指定があるが
- GL_MAP2_VERTEX_3 (x,y,z)
- GL_MAP2_VERTEX_4 (x,y,z,w)
― 第2、3、6、7引数:u1,u2,v1,v2 ―
パラメータの計算方法。
u1 = 0、u2 = 1とすれば、指定したパラメータがそのまま適用される。
それ以外は、あるパラメータtに対し( t - u1 )/(u2 - u1)がパラメータとして使われる
― 第4、5、8、9引数: ustride、uorder、vstride、vorder―
- stride → 次の頂点まで何要素とばしなのかを指定
- order → 制御点の数
- points → データの格納元を指定
※v方向のstrideにはu方向の(頂点数*1頂点の要素数)を指定する事になる。
― 第10引数: points―
制御点のデータ元。
// 制御点 float CtlPoint[]= { 0.0, 0.0, 0.0, 0.2, 0.3, 0.0, 0.4, 0.3, 0.0, 0.6, 0.0, 0.0, 0.0, 0.2, 0.2, 0.2, 0.5, 0.2, 0.4, 0.5, 0.2, 0.6, 0.2, 0.2, 0.0, 0.2, 0.4, 0.2, 0.5, 0.4, 0.4, 0.5, 0.4, 0.6, 0.2, 0.4, 0.0, 0.0, 0.6, 0.2, 0.3, 0.6, 0.4, 0.3, 0.6, 0.6, 0.0, 0.6, }; ... ... glMap2f(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 3*4, 4,CtlPoint);//エバリュエータの設定 ... ...
有効化はglEnable()
描画は「glEvalCoord2f()」や「glEvalCoord2d()」を使う。
[例]
glEnable(GL_MAP2_VERTEX_3); //有効化(x,y,z)の3次元 ... ... glBegin(GL_QUADS); for(float v = 0; v < 1; v += slice){ for(float u = 0; u < 1; u += slice){ glEvalCoord2f(u,v); glEvalCoord2f(u+slice,v); glEvalCoord2f(u+slice,v+slice); glEvalCoord2f(u,v+slice); } } glEnd();
この他、エバリュエータでは、メッシュを利用した描画方法もある。
サンプルコード >> 曲面::まとめコード1