我正在使用OpenGL创建一个nurbs曲面(gluNurbSurface(…)),我想知道如何将控制点(黑点)的正常值作为红点到达表面市场.有了这些信息,我就可以计算它们之间的距离.
添加
为了获得另一个答案或改进受试者,我想编写部分代码,希望能得到更多帮助:
在这部分中,您可以观察我如何初始化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提出的函数,但我不知道在哪个部分我必须添加它们.
最佳答案 通过
gluNurbsCallback()
设置GLU_NURBS_NORMAL_DATA回调.GLU_NURBS_VERTEX_DATA回调也很有用.
Point * userData(通过gluNurbsCallbackData()
)在某种动态数组数据结构中保存点/法线.如果你使用C我会推荐一个标量为Eigen :: Vector3fs的矢量.