我想在OpenGL中创建一个NurbsSurface。我使用40x48的控制点大小的网格。除此之外,我还创建索引以确定顶点的顺序。了解NurbsSurface
这样,我创建了三角形的面。 只是为了避免误解。我有 float[] vertices=x1,y1,z1,x2,y2,z2,x3,y3,z3.......
和 float[] indices= 1,6,2,7,3,8....
现在我不想绘制三角形。我想插入曲面点。我想过nurbs或B样条。
线索是: 为了确定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但是(可能我已经被这个迷住了)我无法将解决方案转移到我的案例中。你能帮我吗?
好吧,我相信我混了顶点和控制点。将我的三角形发送到图形管道后,如何使用glNurbssurface?只需遵循nurbs命令并将所有控制点都设为浮点型?除此之外,我还找到了几何着色器代码http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.9155&rep=rep1&type=pdf,我可以使用它吗?由于我已经理解,在图形管道中,几何着色器位于顶点着色器的后面 – TimDor
如在选项1中所述,您可以使用gluNurbSurface功能。他们还展示了如何从控制点计算顶点位置。一旦你有顶点位置填充他们在VBO,并使用GL_TRIANGLE做正常绘图。 –
是的,你也可以使用几何着色器。但请记住,几何着色器对性能非常不利,因为输入组装阶段必须在几何着色器之前和之后运行。几何着色器实际上是在镶嵌着色器之后出现的,但如果不使用它们,那么是几何着色器在顶点着色器之后。 –