2012-11-26 25 views
4

我正在使用OpenGL創建一個nurbs表面(gluNurbSurface(...)),我想知道如何將控制點(黑點)的正常值作爲紅點到達表面市場。有了這些信息,我將能夠計算它們之間的距離。如何使用Nurbs與OpenGL瞭解具體的價值位置?

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.而在這一刻,我試圖將NURBS的價值觀引入與第一個答案通過genpfault提出的功能的載體,但我不知道在哪一部分我必須添加它們。

回答

2

設置GLU_NURBS_NORMAL_DATA通過gluNurbsCallback()回調。一個GLU_NURBS_VERTEX_DATA回調也是有用的。

*userData(通過gluNurbsCallbackData())在某種動態數組數據結構來保存點/法線。如果您使用的是C++,我建議您使用std::vectorEigen::Vector3f

+0

嗨,謝謝你的答案我只想補充我正在使用C. – Ivan