NurbsSurface的理解
Understanding of NurbsSurface
我想在 OpenGL 中创建一个 NurbsSurface。我使用 40x48 大小的控制点网格。此外,我创建索引以确定顶点的顺序。
这样我创建了我的三角形表面。
只是为了避免误会。我有
float[] vertices=x1,y1,z1,x2,y2,z2,x3,y3,z3.......
和
float[] indices= 1,6,2,7,3,8....
现在我不想画三角形了。我想插入表面点。我想到了 nurbs 或 B-Splines。
线索是:
为了确定 Nurbs 算法,我必须逐块插值。在我的理解中,一个补丁被定义为例如点 1,6,2,7 或 2,7,3,8(请打开图片)。
首先我创建了顶点和索引以便使用顶点着色器。
但实际上用老方法画就够了。在这种情况下,我将按如下方式确定顶点和索引:
float[] vertices= v1,v2,v3... with v=x,y,z
和
float[] indices= 1,6,2,7,3,8....
在 OpenGL 中,有一个 Nurbs 函数可以使用。 glNewNurbsRenderer。所以我可以很容易地渲染一个补丁。
不幸的是,我在这一点上失败了,如何将补丁拼接在一起。我找到了一个解释 Teapot example 但是(也许我对此很着迷)我无法将解决方案转移到我的案例中。你能帮忙吗?
您有一组要从中绘制曲面的控制点。
您可以通过两种方式解决此问题
您提供的茶壶示例 link 中对此进行了描述。
从控制点计算顶点,然后向下传递图形
以 GL_TRIANGLE 作为拓扑的管道。请记住图形硬件
需要三角化数据才能绘制。
按照这个 link 显示如何从控制点评估顶点
http://www.glprogramming.com/red/chapter12.html
您可以准备控制点的路径并使用曲面细分着色器
三角化并缝合这些点。
为此你准备了一组控制点作为补丁使用GL_PATCH原语
并将其传递给曲面细分控制着色器。在此您将指定什么
你想要的镶嵌级别。取决于你的补丁将被镶嵌
通过另一个称为原始生成器的固定功能阶段。
然后您生成的顶点将传递给曲面细分评估着色器
您可以在其中进行微调。您可以在此处指定外部或内部镶嵌
将进一步细分您的补丁的级别。
我建议你像控制点一样放置 VBO 和 IBO,并且在绘图时使用 GL_PATCH 原语。按照以下教程了解如何使用曲面细分着色器绘制 nurb 曲面。
注意:我建议的第二种方法有点棘手,您将不得不阅读大量研究论文。
我认为如果您不想使用现代管道,那么我建议您使用选项 1。
我想在 OpenGL 中创建一个 NurbsSurface。我使用 40x48 大小的控制点网格。此外,我创建索引以确定顶点的顺序。
这样我创建了我的三角形表面。
只是为了避免误会。我有
float[] vertices=x1,y1,z1,x2,y2,z2,x3,y3,z3.......
和
float[] indices= 1,6,2,7,3,8....
现在我不想画三角形了。我想插入表面点。我想到了 nurbs 或 B-Splines。
线索是: 为了确定 Nurbs 算法,我必须逐块插值。在我的理解中,一个补丁被定义为例如点 1,6,2,7 或 2,7,3,8(请打开图片)。
首先我创建了顶点和索引以便使用顶点着色器。 但实际上用老方法画就够了。在这种情况下,我将按如下方式确定顶点和索引:
float[] vertices= v1,v2,v3... with v=x,y,z
和
float[] indices= 1,6,2,7,3,8....
在 OpenGL 中,有一个 Nurbs 函数可以使用。 glNewNurbsRenderer。所以我可以很容易地渲染一个补丁。 不幸的是,我在这一点上失败了,如何将补丁拼接在一起。我找到了一个解释 Teapot example 但是(也许我对此很着迷)我无法将解决方案转移到我的案例中。你能帮忙吗?
您有一组要从中绘制曲面的控制点。
您可以通过两种方式解决此问题
您提供的茶壶示例 link 中对此进行了描述。 从控制点计算顶点,然后向下传递图形 以 GL_TRIANGLE 作为拓扑的管道。请记住图形硬件 需要三角化数据才能绘制。 按照这个 link 显示如何从控制点评估顶点 http://www.glprogramming.com/red/chapter12.html
您可以准备控制点的路径并使用曲面细分着色器 三角化并缝合这些点。
为此你准备了一组控制点作为补丁使用GL_PATCH原语 并将其传递给曲面细分控制着色器。在此您将指定什么 你想要的镶嵌级别。取决于你的补丁将被镶嵌 通过另一个称为原始生成器的固定功能阶段。 然后您生成的顶点将传递给曲面细分评估着色器 您可以在其中进行微调。您可以在此处指定外部或内部镶嵌 将进一步细分您的补丁的级别。
我建议你像控制点一样放置 VBO 和 IBO,并且在绘图时使用 GL_PATCH 原语。按照以下教程了解如何使用曲面细分着色器绘制 nurb 曲面。
注意:我建议的第二种方法有点棘手,您将不得不阅读大量研究论文。
我认为如果您不想使用现代管道,那么我建议您使用选项 1。