4

我正在使用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。此时,我正尝试使用genpfault在第一个答案中提出的函数将 nurbs 的值引入向量中,但我不知道必须在哪一部分添加它们。

4

1 回答 1

2

通过设置GLU_NURBS_NORMAL_DATA回调gluNurbsCallback()GLU_NURBS_VERTEX_DATA回调也很有用。

指向某种动态数组数据结构*userData(通过)来保存点/法线。gluNurbsCallbackData()如果您使用的是 C++,我会推荐 a std::vectorof Eigen::Vector3fs。

于 2012-11-26T20:57:24.773 回答