A tool for evaluating multiple NURBS curve/surface points using the GPU.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Dtouch aa3a870bb2 env debug & warmup 2 months ago
.vscode env debug & warmup 2 months ago
include env debug & warmup 2 months ago
src env debug & warmup 2 months ago
tests env debug & warmup 2 months ago
.gitignore env debug & warmup 2 months ago
CMakeLists.txt env debug & warmup 2 months ago
LICENSE Initial commit 2 years ago
readme.md env debug & warmup 2 months ago

readme.md

NurbsPerformer

A tool for performing NURBS curve/surface modeling operations in parallel using the GPU.

Dependencies

  • MSVC
  • CUDA 11.8.0

Usage

直接运行

根据CMake构建项目,运行main文件即可生成可执行文件

作为依赖使用

  1. CMakeLists.txt中注释以下代码,不再生成可执行文件
add_executable(NurbsPerformer ${PROJECT_SOURCES})
  1. CMakeLists.txt中取消注释以下代码,表示需要生成静态库。构建项目。
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
add_library(NurbsPerformer ${PROJECT_SOURCES})
  1. 原项目连接到生成的静态库目录。如果是由CMake构建,可以用 target_link_libraries 指向依赖(.lib),用 target_include_directories 指向头文件目录。
  2. 使用.cu文件调用NurbsEvaluator

Nurbs曲线

在构造函数中传入控制点向量和knots向量:

NurbsCurve::Curve nurbsCurveEvaluator(
        {
            {-1, 0,   0},
            {0,  1,   6},
            {1,  0,   4},
            {2,  0.5, 3},
            {3,  3,   1},
            {4,  -5,  0}
        },
        {0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1}
);  // 6点控制,knots长度为9,degree为2的NURBS

设置是否需要输出GPU并行计算花费的时间(默认否):

nurbsCurveEvaluator.setRecordTime(true);

开始计算

nurbsCurveEvaluator.calculate(5);  // 在参数域采样5个点

Nurbs曲面

曲面在构造函数中需要传入三层vector嵌套表示的二维点阵、u方向的knots向量、v方向的knots向量

NurbsSurface::Surface nurbsSurfaceEvaluator(
        {
            {{-1,   0,   0},   {0,   1, 6},  {1,  0,   4},   {2,  0.5,  3},    {3,    3,   1},   {4,  -5,    0}},
            {{-2,   1,   1.2}, {1,   2, 3},  {2,  2,   3},   {-1, -0.3, 2},    {-1,   2,   0},   {7,  -8,    2}},
            {{-3.4, 2,   3},   {2,   3, 0},  {4,  3,   7},   {-2, 0,    -0.2}, {1,    1.7, 5},   {9,  -10.3, 6}},
            {{-1.5, 3.2, 1},   {2.6, 7, -2}, {5,  0.8, 4.2}, {-4, 1,    4},    {2.1,  4,   -2},  {11, -6,    4}},
            {{-0.2, 2,   0},   {5,   3, 2},  {5,  1.5, 1.4}, {-3, 2,    5},    {0.8,  1.3, 0},   {15, -2,    0.9}},
            {{3,    1.4, -1},  {6,   2, 4},  {-1, 0,   -2},  {0,  2.8,  2},    {-0.5, 2,   1.2}, {7,  -3,    -2}}
        },
        {0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1},
        {0, 0, 0, 0.2, 0.7, 0.8, 1, 1, 1}
);
nurbsSurfaceEvaluator.setRecordTime(true);
nurbsSurfaceEvaluator.calculate(3, 4);  // 计算时需要传入u、v两个方向的采样数目

Primary Reference