4

OpenGLを使用してNURBSサーフェス(gluNurbSurface(...))を作成していますが、コントロールポイント(黒い点)の通常の値を赤い点として表面市場に到達させる方法を知りたいです。この情報を使用して、それらの間の距離を計算することができます。

NURBS

追加別の答えを得たり、主題を改善したりするために、コードの一部を書きたいので、もっと助けが得られることを願っています:

このパートでは、私がどのようにnurbsを初期化するかを観察できます。

init_surface();

   theNurb = gluNewNurbsRenderer();
   gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 50.0);
   gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL);
   gluNurbsCallback(theNurb, GLU_ERROR, 
                    (GLvoid (*)()) nurbsError);

次に、それらのパラメータを使用してサーフェスが作成されます。

gluBeginSurface(theNurb);
    gluNurbsSurface(theNurb,
            U+ordenU, knotsU,
            V+ordenV, knotsV,
            V * 3,
            3,
            &ctlpoints[0][0][0],
            ordenU, ordenV,
            GL_MAP2_VERTEX_3);

   gluEndSurface(theNurb);

Cを使用していることを思い出してください。この瞬間、最初の回答でgenpfaultによって提案された関数を使用して、nurbsの値をベクトルに導入しようとしていますが、どの部分にそれらを追加する必要があるかわかりません。

4

1 に答える 1

2

GLU_NURBS_NORMAL_DATAを介してコールバックを設定しますgluNurbsCallback()。コールバックGLU_NURBS_VERTEX_DATAも役立ちます。

ポイント/法線を保持するために、ある種の動的配列データ構造を*userData(経由で)ポイントします。gluNurbsCallbackData()C ++を使用している場合は、のstd::vectorをお勧めしEigen::Vector3fます。

于 2012-11-26T20:57:24.773 に答える