了解NurbsSurface

问题描述 投票:4回答:1

我想在OpenGL中创建一个NurbsSurface。我使用一个控制点大小为40x48的网格。此外,我创建索引以确定顶点的顺序。

enter image description here

通过这种方式,我创建了三角形表面。只是为了避免误解。我有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的解释但是(也许我已经对此感到痴迷)我无法将解决方案转移到我的案例中。你能帮我吗?

algorithm opengl surface nurbs
1个回答
3
投票

您有一组要从中绘制曲面的控制点。

有两种方法可以解决这个问题

  1. 您提供的茶壶示例链接中对此进行了描述。计算来自控制点的顶点,然后使用GL_TRIANGLE作为拓扑,然后向下传递图形管道。请记住图形硬件需要三角化数据才能绘制。请点击此链接,该链接显示如何评估控制点http://www.glprogramming.com/red/chapter12.html的顶点
  2. 您可以准备控制点的路径,并使用曲面细分着色器对这些点进行三角测量和缝合。 为此,您准备一组控制点作为补丁使用GL_PATCH原语并将其传递给曲面细分控制着色器。在此,您将指定所需的曲面细分级别。根据您的补丁将被另一个固定功能阶段(称为原始生成器)细分。然后,您生成的顶点将传递到曲面细分评估着色器,您可以在其中进行微调。在这里,您可以指定外部或内部曲面细分级别,这将进一步细分您的补丁。 我建议你将你的VBO和IBO与控制点放在一起,并在绘图时使用GL_PATCH原语。请按照以下教程了解如何使用曲面细分着色器绘制nurb曲面。

注意:我建议的第二种方法有点棘手,你必须阅读很多研究论文。

我想如果你不想使用现代管道,那么我建议选择1。

© www.soinside.com 2019 - 2024. All rights reserved.