如何使用OpenGL的Nurbs知道特定值的位置?

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的值引入向量,但我不知道在哪个部分添加它们。

1个回答

2
通过gluNurbsCallback()设置GLU_NURBS_NORMAL_DATA回调函数。同时,GLU_NURBS_VERTEX_DATA回调函数也会很有用。
通过gluNurbsCallbackData()将指针*userData指向某种动态数组数据结构以容纳点/法线。如果使用C ++,建议使用std::vectorEigen::Vector3f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接