GLUNURBSPROPERTY(3G)

名前
gluNurbsProperty - NURBS の属性を設定する

書式
void gluNurbsProperty( GLUnurbs* nurb,
	GLenum property,
	GLfloat value )

引き数

nurb
    NURBS オブジェクト(gluNewNurbsRenderer を使って作る)を指定する。

property
    設定対象の属性を指定する。 指定できる値は GLU_SAMPLING_TOLERANCE, GLU_DISPLAY_MODE, GLU_CULLING, GLU_AUTO_LOAD_MATRIX, GLU_PARAMETRIC_TOLERANCE, GLU_SAMPLING_METHOD, GLU_U_STEP, GLU_V_STEP, GLU_NURBS_MODE である。

value
    指定した属性の値を指定する。 値には数値または GLU_OUTLINE_POLYGON, GLU_FILL, GLU_OUTLINE_PATCH, GL_TRUE, GL_FALSE, GLU_PATH_LENGTH, GLU_PARAMETRIC_ERROR, GLU_DOMAIN_DISTANCE, GLU_NURBS_RENDERER, GLU_NURBS_TESSELLATOR のいずれかを指定できる。

説明
gluNurbsProperty は、NURBS オブジェクトに格納されている 属性の制御に使われる。 これらの属性は NURBS 曲線のレンダリングのしかたに影響する。 property に指定できる値を以下に示す:

GLU_NURBS_MODE
    value には GLU_NURBS_RENDERER または GLU_NURBS_TESSELLATOR を設定しなければならない。 GLU_NURBS_RENDERER を設定したときは、NURBS オブジェクトは テセレーション処理で OpenGL のプリミティブにされ、レンダリングの ためにパイプラインに送られる。 GLU_NURBS_TESSELLATOR を設定したときは、NURBS オブジェクトは テセレーション処理で OpenGL のプリミティブにされるが、頂点・法線・ 色・テクスチャはコールバックインタフェース経由で返される (gluNurbsCallback を参照)。 これを用いると、ユーザは後で処理するためのテセレーション処理の結果を キャッシュしておくことができる。 初期値は GLU_NURBS_RENDERER である。

GLU_SAMPLING_METHOD
    NURBS 曲面のテセレーション処理のしかたを指定する。 value には
     GLU_PATH_LENGTH, GLU_PARAMETRIC_ERROR, GLU_DOMAIN_DISTANCE, GLU_OBJECT_PATH_LENGTH, GLU_OBJECT_PARAMETRIC_ERROR のいずれかを設定できる。 GLU_PATH_LENGTH を設定したときは、曲面は テセレーション処理で得たポリゴンの稜線の最大長(単位はピクセル)が GLU_SAMPLING_TOLERANCE で指定した値より大きくならないように レンダリングされる。

    GLU_PARAMETRIC_ERROR を指定すると、テセレーション処理で得た ポリゴンと元の曲面の最大距離(単位はピクセル)が GLU_PARAMETRIC_TOLERANCE で指定した値となるように曲面が レンダリングされる。

    GLU_DOMAIN_DISTANCE を使うと、ユーザはパラメータ座標系において u, v 方向で取られる単位長あたりのサンプル点の数を指定できる。

    GLU_OBJECT_PATH_LENGTH は GLU_PATH_LENGTH に似ているが、 ビューに依存しない点が異なる。つまり、テセレーション処理で得たポリゴンの 稜線の最大長(オブジェクト空間内での長さ)が GLU_SAMPLING_TOLERANCE で指定した値を超えないようにレンダリングされる。

    GLU_OBJECT_PARAMETRIC_ERROR は GLU_PARAMETRIC_ERROR に 似ているが、ビューに依存しない点が異なる。 つまり、GLU_PARAMETRIC_TOLERANCE で指定した値がポリゴンと元の 曲面の最大距離(オブジェクト空間内)となるように曲面がレンダリングされる。

    GLU_SAMPLING_METHOD の初期値は GLU_PATH_LENGTH である。

GLU_SAMPLING_TOLERANCE
    サンプリングの方法が GLU_PATH_LENGTH や GLU_OBJECT_PATH_LENGTH に設定されているときに使われる最大長を ピクセル単位またはオブジェクト空間における長さの単位で指定する。 曲線や曲面をレンダリングする際は NURBS 処理は安全側に寄った処理をする ので、実際の長さはいくらか短くなることがある。 初期値は 50.0 ピクセルである。

GLU_PARAMETRIC_TOLERANCE
    サンプリングの方法が GLU_PARAMETRIC_ERROR または GLU_OBJECT_PARAMETRIC_ERROR であるときに使われる 最大距離をピクセル単位またはオブジェクト空間における長さの単位で指定する。 初期値は 0.5 である。

GLU_U_STEP
    パラメータ座標において u 軸沿いに取る、単位長あたりの サンプル点の個数を指定する。 GLU_SAMPLING_METHOD が GLU_DOMAIN_DISTANCE に設定されている時は、この指定が必要である。 初期値は 100 である。

GLU_V_STEP
    パラメータ座標において v 軸沿いに取る、単位長あたりの サンプル点の個数を指定する。 GLU_SAMPLING_METHOD が GLU_DOMAIN_DISTANCE に設定されている時は、この指定が必要である。 初期値は 100 である。

GLU_DISPLAY_MODE
    value には GLU_OUTLINE_POLYGON, GLU_FILL, GLU_OUTLINE_PATCH のいずれかを指定できる。 GLU_NURBS_MODE に GLU_NURBS_RENDERER が設定されている 時には、value は NURBS 曲面のレンダリングの仕方を定義する。 value に GLU_FILL が設定されている時には、曲面は ポリゴンの集合としてレンダリングされる。 value に GLU_OUTLINE_POLYGON が設定されている時には、 NURBS ライブラリはテセレーション処理で得たポリゴンの外側の形状だけを 描画する。 value に GLU_OUTLINE_PATCH が設定されているときは、 パッチの外側の形状とユーザが定義したトリム曲線だけが描画される。

    GLU_NURBS_MODE に GLU_NURBS_TESSELLATOR を設定した時は、 value は NURBS 曲面のテセレーション処理の仕方を定義する。 GLU_DISPLAY_MODE に GLU_FILL または GLU_OUTLINE_POLYGON が設定されている場合、NURBS 曲面は OpenGL の三角形プリミティブにテセレーション処理される。この結果は コールバック関数を通して受け取ることができる。 GLU_DISPLAY_MODE に GLU_OUTLINE_PATCH が設定されている 場合、パッチの外側の形状とトリム曲線だけが生成される。 この結果は、線分の並びとして、コールバック関数を通して受け取ることがで きる。

    初期値は GLU_FILL である。

GLU_CULLING
    lie outside the current viewport. The initial value is GL_FALSE. value は真偽値である。 GL_TRUE が設定されている時には、NURBS 曲線の制御点が現在の ビューポートの外側にあれば曲線をテセレーションの前に破棄することを 指示する。 初期値は GL_FALSE である。

GLU_AUTO_LOAD_MATRIX
    value は真偽値である。 GL_TRUE に設定されている時は、NURBS の処理コードは射影行列、 モデルビュー行列、ビューポートを GL サーバからダウンロードし、 レンダリングするそれぞれの NURBS 曲線についてサンプリング行列と カリング行列を算出する。 サンプリング行列とカリング行列は、NURBS 曲面のテセレーションが線分と ポリゴンのどちらになるのかを調べるため、および NURBS 曲面がビューポートの外にある際にカリング処理するために必要である。

    このモードが GL_FALSE に設定されている時は、 NURBS のレンダラがサンプリング行列とカリング行列を作るために使う 射影行列、モデルビュー行列、ビューポートは、プログラムが与える 必要がある。 ロード処理は gluLoadSamplingMatrices 関数を使って 行うことができる。 このモードの初期値は GL_TRUE である。 GL_TRUE から GL_FALSE に変更しても、 gluLoadSamplingMatrices が呼ばれるまでは サンプリング行列もカリング行列も影響を受けない。

注意
GLU_AUTO_LOAD_MATRIX が真の場合、NURBS の処理が ディスプレイリストに組み込まれている時にはサンプリングやカリングが 正しく行われないことがある。

GLU のバージョン 1.1 以降でなければ、 property に GLU_PARAMETRIC_TOLERANCE, GLU_SAMPLING_METHOD, GLU_U_STEP, GLU_V_STEP を指定したり、value に GLU_PATH_LENGTH, GLU_PARAMETRIC_ERROR, GLU_DOMAIN_DISTANCE を指定することはできない。 これらは GLU 1.0 では正しい引き数ではない。

gluGetString を使うと GLU のバージョンを調べることができる。

GLU_NURBS_MODE を使えるのは、GLU のバージョン 1.3 以降だけである。

GLU_SAMPLING_METHOD 属性に GLU_OBJECT_PATH_LENGTH および GLU_OBJECT_PARAMETRIC_ERROR を指定できるのは、GLU のバージョン 1.3 以降だけである。

関連項目
gluGetNurbsProperty, gluLoadSamplingMatrices, gluNewNurbsRenderer, gluGetString, gluNurbsCallback