标签: nurbs

OpenGL NURBS表面

我正在学习OpenGL,我希望在中间获得一个略微驼峰的表面.我目前正在使用此代码,我不知道如何调整ctrl点以使其成为我想要的方式.它目前喜欢

在此输入图像描述

我想这样:

在此输入图像描述

我不完全确定我应该使用什么控制点,我对它是如何工作感到困惑.

#include <stdlib.h>
#include <GLUT/glut.h>

GLfloat ctrlpoints[4][4][3] = {
   {{-1.5, -1.5, 4.0}, {-0.5, -1.5, 2.0}, 
    {0.5, -1.5, -1.0}, {1.5, -1.5, 2.0}}, 
   {{-1.5, -0.5, 1.0}, {-0.5, -0.5, 3.0}, 
    {0.5, -0.5, 0.0}, {1.5, -0.5, -1.0}}, 
   {{-1.5, 0.5, 4.0}, {-0.5, 0.5, 0.0}, 
    {0.5, 0.5, 3.0}, {1.5, 0.5, 4.0}}, 
   {{-1.5, 1.5, -2.0}, {-0.5, 1.5, -2.0}, 
    {0.5, 1.5, 0.0}, {1.5, 1.5, -1.0}}
};

void display(void)
{
   int i, j;

   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glColor3f(1.0, 1.0, 1.0);
   glPushMatrix ();
   glRotatef(85.0, 1.0, 1.0, 1.0);
   for (j …
Run Code Online (Sandbox Code Playgroud)

c opengl bezier nurbs

9
推荐指数
1
解决办法
8736
查看次数

GLU NURBS错误地渲染

编辑:这是一个库bug.我把它报告给HOpenGL邮件列表.

我使用9点矩形方法将圆/椭圆表示为NURBS.

要点是p1, p2, ..., p9,p9 = p1.它们如图所示:

y2 | p2 p3 p4
y1 | p1    p5
y0 | p8 p7 p6
-------------
   | x0 x1 x2

x1 = (x0 + x2) / 2
y1 = (y0 + y2) / 2
Run Code Online (Sandbox Code Playgroud)

p1 = (x0, y1), p2 = (x0, y2)等等.

重量是:

  • 1中间点(p1,p3,p5,p7)
  • sqrt(0.5)角点(p2,p4,p6,p8)

我使用两种方法将权重应用为齐次坐标:

  • 对 - (x,y)重量w变成了Vertex4 (w*x) (w*y) 0 w
  • 错了 - …

opengl haskell nurbs glu

7
推荐指数
1
解决办法
1093
查看次数

使用 python 中的 nurbs / geomdl 查找 3D b 样条曲线上点的曲率中心

我再次陷入困境,所以请耐心等待。

我有一个 B 样条线(从 Solidworks 导入),可以使用 python 中的 geomdl 进行分析。
从 geomdl 中,我可以提取样条曲线上任何给定点的一阶和二阶导数以及切线、法线和副法线向量。

从那里我可以根据一阶和二阶导数计算该点的曲率。

但是我无法确定曲线转向的方向。

我想找到位于 bspline 上当前感兴趣点的曲率中心的点。

我“认为”切向量和法向量都位于感兴趣的密切平面上。然后叉积将给出密切平面的法线。但是我无法完成这项工作。

至少我需要知道曲线向哪个方向弯曲。即顺时针或逆时针。

但如果我有一个位于曲率中心的点,我几乎就会知道关于该点的一切。

它是否正确?

重申一下问题:

给定一个点、该点处曲线的导数以及切线、法线和双法线向量,如何找到曲率中心?

python nurbs bspline

5
推荐指数
1
解决办法
765
查看次数

绘制NURBS曲线时的结点含义?

gluNurbsCurve用来画一些控制点的曲线。我已经按照红皮书中的描述进行了基本设置,可以正常工作,并且我正在尝试对其进行扩展。
该示例如下所示:

float knots[8] = {0,0,0,0,1,1,1,1};
float pnts[4][3] = { {...},{...},{...},{...} };
GLUnurbsObj *m = gluNewNurbsRenderer();
gluBeginCurve(n);
gluNurbsCurve(n, 8, knots, 3, pnts, 4, GL_MAP1_VERTEX_3)
gluEndCurve(n);
Run Code Online (Sandbox Code Playgroud)

我想知道的一件事是结数据的含义。它如何影响结果?我在那里还能尝试其他什么选择?
由于某种原因,我找不到任何可以正确解释此问题的教程。

opengl 3d graphics nurbs glu

4
推荐指数
1
解决办法
4011
查看次数

NURBS和opengl 4.2核心怎么样?

RedBook中的NURBS章节已被弃用,包括实用程序库:"尽管其中一些功能是GLU库的一部分,但它依赖于已从核心OpenGL库中删除的功能."

这是否意味着OpenGL 4.2实际上缺少用于操纵NURBS曲线和曲面的C++工具包?有一些商业第三方工具包,但它们不是跨平台(主要是windows)

...?

c++ opengl nurbs opengl-4

3
推荐指数
1
解决办法
1952
查看次数

如何从 Three.js 中的 3D 点创建 3D 表面?

我正在制作一个项目,用点和线(弯曲或不弯曲)制作简单的 3d 模型。对于第一个版本,我使用 SVG 元素进行简单渲染、平滑曲线和鼠标事件。

现在我正在尝试使用Three.js渲染器而不是 SVG。我必须创建 3d 管来替换曲线,但我不知道如何基于多个 xyz 坐标创建 3d 曲面

这是一个由 4 个点和 4 条线(3 条直线和 1 条曲线)组成的模型示例:

surface-3d-sample1

我们可以想象曲线被挤压成更多的点,像这样:

在此处输入图片说明

然后我想创建一个表面(或平面),就像蓝色形状一样:

在此处输入图片说明

我受到了这个话题的启发:在three.js中将贝塞尔曲线转换为平面道路

var material = new THREE.MeshBasicMaterial({ color: 0xc0c0c0 });
var path = new THREE.CatmullRomCurve3([
    new THREE.Vector3(dots[0].x, dots[0].y, -dots[0].z),
    new THREE.Vector3(dots[1].x, dots[1].y, -dots[1].z),
    new THREE.Vector3(dots[2].x, dots[2].y, -dots[2].z),
    new THREE.Vector3(dots[3].x, dots[3].y, -dots[3].z),
    new THREE.Vector3(dots[0].x, dots[0].y, -dots[0].z)
]);

var pts = [],
    a ;
for (var i = 0 ; i < 3 ; i++) …
Run Code Online (Sandbox Code Playgroud)

javascript bezier surface nurbs three.js

2
推荐指数
1
解决办法
1985
查看次数

如何在Three.js中从3D点创建3D立方贝塞尔曲线三角形?

按照这个主题,我尝试生成一个3D弯曲三角形作为NURBS曲面,但是我不知道如何设置3D点来实现。

这是当前的实现:

var edges = this.getEdges(), // An edge is a line following 4 dots as a bezier curve.
    dots = self.getDotsFromEdges(edges), // Get all dots in order for building the surface.

    ctrlPoints = [ // Is generated only once before, but copy-pasted here for this sample code.
        [
            new THREE.Vector4(0, 0, 0, 1),
            new THREE.Vector4(0, 0, 0, 1),
            new THREE.Vector4(0, 0, 0, 1),
            new THREE.Vector4(0, 0, 0, 1)
        ],
        [
            new THREE.Vector4(0, 0, 0, 1),
            new THREE.Vector4(0, …
Run Code Online (Sandbox Code Playgroud)

javascript 3d nurbs three.js cubic-bezier

2
推荐指数
1
解决办法
528
查看次数

OpenGL图形管道中的NURBS

我很好奇NURBS是如何在GPU/OpenGL图形管道中渲染的.我知道在OpenGL和GLUT中有各种调用,可以使用glMap和glMapGrid从编码角度轻松渲染NURBS对象,但我没有得到的是OpenGL完成此过程的过程.NURBS背后的想法是使用曲线来定义曲面,而图形管道似乎围绕三角形栅格化和三角形网格构建,而NURBS基于Bezier曲线,它们是弯曲的.

那么,从(高级)管道角度来看,NURBS实际上是如何实现的呢?

opengl graphics pipeline render nurbs

0
推荐指数
1
解决办法
665
查看次数