Compare commits
	
		
			3 Commits 
		
	
	
		
			e736268cc1
			...
			aa3a870bb2
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						aa3a870bb2 | 10 months ago | 
| 
							
							
								
								 | 
						654d4847e2 | 10 months ago | 
| 
							
							
								
								 | 
						93a129fd93 | 10 months ago | 
				 21 changed files with 1731 additions and 1085 deletions
			
			
		@ -0,0 +1,3 @@ | 
				
			|||
{ | 
				
			|||
  "cmake.generator": "Ninja" | 
				
			|||
} | 
				
			|||
@ -1,47 +1,38 @@ | 
				
			|||
cmake_minimum_required(VERSION 3.21) | 
				
			|||
project(NurbsPerformer LANGUAGES CXX CUDA) | 
				
			|||
 | 
				
			|||
set(CMAKE_CUDA_STANDARD 14) | 
				
			|||
set(CMAKE_CUDA_STANDARD 17) | 
				
			|||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | 
				
			|||
 | 
				
			|||
set(PROJECT_SOURCES | 
				
			|||
        tests/main.cpp | 
				
			|||
        src/utils.cpp                       include/utils.h | 
				
			|||
        src/device/aabb.cu                  include/device/aabb.cuh | 
				
			|||
        src/device/vec.cu                   include/device/vec.cuh | 
				
			|||
        src/device/device_utils.cu          include/device/device_utils.cuh | 
				
			|||
        src/device/Nurbs/nurbs_common.cu    include/device/Nurbs/nurbs_common.cuh | 
				
			|||
        src/device/Nurbs/nurbs_surface.cu   include/device/Nurbs/nurbs_surface.cuh | 
				
			|||
        src/device/Nurbs/nurbs_curve.cu     include/device/Nurbs/nurbs_curve.cuh | 
				
			|||
        src/device/Nurbs/bvh.cu             include/device/Nurbs/bvh.cuh | 
				
			|||
        src/device/Nurbs/loop_detection.cu include/device/Nurbs/loop_detection.cuh src/device/srf_mesh.cu include/device/srf_mesh.cuh) | 
				
			|||
# set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=\"/Zc:__cplusplus\"") | 
				
			|||
 | 
				
			|||
add_executable(NurbsPerformer ${PROJECT_SOURCES}) | 
				
			|||
file(GLOB_RECURSE SOURCES "src/*.cpp" "src/*.cu") | 
				
			|||
file(GLOB_RECURSE HEADERS "include/*.h" "include/*.hpp" "include/*.cuh") | 
				
			|||
 | 
				
			|||
#add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>") | 
				
			|||
#add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>") | 
				
			|||
message(STATUS "Sources: ${SOURCES}") | 
				
			|||
message(STATUS "Headers: ${HEADERS}") | 
				
			|||
 | 
				
			|||
# 指定静态库位置 | 
				
			|||
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) | 
				
			|||
#生成静态库 | 
				
			|||
#add_library(NurbsPerformer ${PROJECT_SOURCES}) | 
				
			|||
# add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>") | 
				
			|||
# add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>") | 
				
			|||
 | 
				
			|||
####### exe or lib ####### | 
				
			|||
 | 
				
			|||
# 引用系统环境变量CUDA_PATH | 
				
			|||
# linux | 
				
			|||
#include_directories("/usr/local/device-11.8/targets/x86_64-linux/include") | 
				
			|||
# windows | 
				
			|||
include_directories("$ENV{CUDA_PATH}/include") | 
				
			|||
include_directories("E:/CLib/glm") | 
				
			|||
include_directories(include) | 
				
			|||
include_directories("E:/CLib/tinynurbs/include") | 
				
			|||
add_executable(NurbsPerformer tests/main.cpp ${SOURCES} ${HEADERS}) | 
				
			|||
 | 
				
			|||
#MESSAGE("CUDA PATH::: $ENV{CUDA_PATH}") | 
				
			|||
#MESSAGE("CUDA PATH::: $ENV{LD_LIBRARY_PATH}") | 
				
			|||
#MESSAGE("CUDA PATH::: $ENV{CPATH}") | 
				
			|||
# 指定静态库位置 | 
				
			|||
# set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) | 
				
			|||
# #生成静态库 | 
				
			|||
# add_library(NurbsPerformer ${SOURCES} ${HEADERS}) | 
				
			|||
 | 
				
			|||
set_target_properties(NurbsPerformer PROPERTIES | 
				
			|||
        CUDA_SEPARABLE_COMPILATION ON) | 
				
			|||
include_directories(include "$ENV{CUDA_PATH}/include" "E:/CLib/glm" "E:/CLib/tinynurbs/include") | 
				
			|||
 | 
				
			|||
set_target_properties(NurbsPerformer PROPERTIES CUDA_SEPARABLE_COMPILATION ON) | 
				
			|||
 | 
				
			|||
# find_package(CUDA REQUIRED) | 
				
			|||
# target_link_libraries(NurbsPerformer ${CUDA_LIBRARIES}) | 
				
			|||
 | 
				
			|||
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES) | 
				
			|||
    set(CMAKE_CUDA_ARCHITECTURES 70 75 80) | 
				
			|||
endif(NOT DEFINED CMAKE_CUDA_ARCHITECTURES) | 
				
			|||
set(CMAKE_CUDA_ARCHITECTURES 70 75 80) | 
				
			|||
endif(NOT DEFINED CMAKE_CUDA_ARCHITECTURES) | 
				
			|||
 | 
				
			|||
target_link_libraries(NurbsPerformer ${CUDA_LIBRARIES}) | 
				
			|||
@ -0,0 +1,8 @@ | 
				
			|||
#pragma once | 
				
			|||
 | 
				
			|||
#include <cuda_runtime.h> | 
				
			|||
#include <device_types.h> | 
				
			|||
 | 
				
			|||
__global__ void g_dummyKernel(); | 
				
			|||
 | 
				
			|||
void gpuWarmUp(); | 
				
			|||
								
									
										File diff suppressed because it is too large
									
								
							
						
					@ -0,0 +1,12 @@ | 
				
			|||
#pragma once | 
				
			|||
 | 
				
			|||
#include "device/warmup.cuh" | 
				
			|||
 | 
				
			|||
__global__ void g_dummyKernel() { | 
				
			|||
  int idx = blockIdx.x * blockDim.x + threadIdx.x; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
void gpuWarmUp() { | 
				
			|||
  g_dummyKernel<<<1, 1>>>(); | 
				
			|||
  cudaDeviceSynchronize(); | 
				
			|||
} | 
				
			|||
@ -1,97 +1,316 @@ | 
				
			|||
#include <cstdio> | 
				
			|||
#include "device/Nurbs/loop_detection.cuh" | 
				
			|||
#include "device/Nurbs/nurbs_curve.cuh" | 
				
			|||
#include "device/Nurbs/nurbs_surface.cuh" | 
				
			|||
#include "device/Nurbs/loop_detection.cuh" | 
				
			|||
#include "device/warmup.cuh" | 
				
			|||
#include <cstdio> | 
				
			|||
#include <iostream> | 
				
			|||
 | 
				
			|||
int main() { | 
				
			|||
//    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
//                                                          {{-1,   0,   0, 0.3},   {0,   1, 6, 0.8},  {1,  0,   4, 0.5},   {2,  0.5,  3, 0.8},    {3,    3,   1, 0.6},   {4,  -5,    0, 0.7}},
 | 
				
			|||
//                                                          {{-2,   1,   1.2, 0.2}, {1,   2, 3, 0.3},  {2,  2,   3, 0.6},   {-1, -0.3, 2, 0.4},    {-1,   2,   0, 0.9},   {7,  -8,    2, 0.3}},
 | 
				
			|||
//                                                          {{-3.4, 2,   3, 0.8},   {2,   3, 0, 0.6},  {4,  3,   7, 0.3},   {-2, 0,    -0.2, 0.4}, {1,    1.7, 5, 0.6},   {9,  -10.3, 6, 0.7}},
 | 
				
			|||
//                                                          {{-1.5, 3.2, 1, 0.5},   {2.6, 7, -2, 0.7}, {5,  0.8, 4.2, 0.8}, {-4, 1,    4, 0.7},    {2.1,  4,   -2, 0.3},  {11, -6,    4, 0.6}},
 | 
				
			|||
//                                                          {{-0.2, 2,   0, 0.7},   {5,   3, 2, 0.4},  {5,  1.5, 1.4, 0.6}, {-3, 2,    5, 0.8},    {0.8,  1.3, 0, 0.5},   {15, -2,    0.9, 0.6}},
 | 
				
			|||
//                                                          {{3,    1.4, -1, 0.4},  {6,   2, 4, 0.6},  {-1, 0,   -2, 0.4},  {0,  2.8,  2, 0.6},    {-0.5, 2,   1.2, 0.9}, {7,  -3,    -2, 0.3}},},
 | 
				
			|||
//                                                  {0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1},
 | 
				
			|||
//                                                  {0, 0, 0, 0.2, 0.7, 0.8, 1, 1, 1});
 | 
				
			|||
//    NurbsSurface::Evaluator nurbsSurfaceEvaluator({
 | 
				
			|||
//                                                          {{-1,   0,   0, 1},   {0,   1, 6, 1},  {1,  0,   4, 1},   {2,  0.5,  3, 1},    {3,    3,   1, 1},   {4,  -5,    0, 1}},
 | 
				
			|||
//                                                          {{-2,   1,   1.2, 1}, {1,   2, 3, 1},  {2,  2,   3, 1},   {-1, -0.3, 2, 1},    {-1,   2,   0, 1},   {7,  -8,    2, 1}},
 | 
				
			|||
//                                                          {{-3.4, 2,   3, 1},   {2,   3, 0, 1},  {4,  3,   7, 1},   {-2, 0,    -0.2, 1}, {1,    1.7, 5, 1},   {9,  -10.3, 6, 1}},
 | 
				
			|||
//                                                          {{-1.5, 3.2, 1, 1},   {2.6, 7, -2, 1}, {5,  0.8, 4.2, 1}, {-4, 1,    4, 1},    {2.1,  4,   -2, 1},  {11, -6,    4, 1}},
 | 
				
			|||
//                                                          {{-0.2, 2,   0, 1},   {5,   3, 2, 1},  {5,  1.5, 1.4, 1}, {-3, 2,    5, 1},    {0.8,  1.3, 0, 1},   {15, -2,    0.9, 1}},
 | 
				
			|||
//                                                          {{3,    1.4, -1, 1},  {6,   2, 4, 1},  {-1, 0,   -2, 1},  {0,  2.8,  2, 1},    {-0.5, 2,   1.2, 1}, {7,  -3,    -2, 1}},},
 | 
				
			|||
//                                                  {0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1},
 | 
				
			|||
//                                                  {0, 0, 0, 0.2, 0.7, 0.8, 1, 1, 1});
 | 
				
			|||
 | 
				
			|||
//    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
//                                                        {{-0.57, -0.48, -0.31, 1}, {-0.17, -0.49, -0.43, 1}, {0.3,  -0.53, -0.27, 1}, {0.66, -0.42, -0.36, 1}},
 | 
				
			|||
//                                                        {{-0.53, -0.15, -0.03, 1}, {-0.21, -0.12, 0.09, 1},  {0.10, -0.18, 0.03, 1},  {0.49, -0.15, -0.03, 1}},
 | 
				
			|||
//                                                        {{-0.61, 0.22,  0.09, 1},  {-0.21, 0.20,  0.09, 1},  {0.13, 0.20,  0.12, 1},  {0.49, 0.19,  -0.03, 1}},
 | 
				
			|||
//                                                        {{-0.52, 0.51,  0.13, 1},  {-0.20, 0.32,  0.36, 1},  {0.18, 0.29,  0.28, 1},  {0.51, 0.53,  0.12, 1}}
 | 
				
			|||
//                                                }, {0, 0, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 1, 1, 1, 1});
 | 
				
			|||
//    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
//                                                        {{2, -2,  -2, 1}, {-2.5, -2.2, -1.5, 3}, {-2, -2,  -0.5, 4}, {-2, -2,  1.5, 2}},
 | 
				
			|||
//                                                        {{2, -1,  -2, 2}, {-2.5, -1.2, -1.5, 1}, {-2, -1,  -0.5, 1}, {-2, -1,  1.5, 1}},
 | 
				
			|||
//                                                        {{3, 1.2, -2, 9}, {-2.5, 1.2,  -1.5, 1}, {-2, 1.5, -0.5, 7}, {-2, 1.5, 1.5, 4}},
 | 
				
			|||
//                                                        {{2, 2,   -2, 1}, {-2.5, 2,    -1.5, 1}, {-2, 2.5, -0.5, 7}, {-2, 2,   1.5, 1}}
 | 
				
			|||
//                                                }, {0, 0, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 1, 1, 1, 1});
 | 
				
			|||
//    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
//                                                               {{-0.5, -0.5, -0.2, 1}, {-0.2, -0.5, -0.1, 1}, {0.2, -0.5, -0.1, 1}, {0.5, -0.5, -0.2, 1}},
 | 
				
			|||
//                                                               {{-0.5, -0.2, -0.1, 1}, {-0.2, -0.2, 0., 1},   {0.2, -0.2, 0., 1},   {0.5, -0.2, -0.1, 1}},
 | 
				
			|||
//                                                               {{-0.5, 0.2, -0.1, 1},  {-0.2, 0.2, 0., 1},    {0.2, 0.2, 0., 1},    {0.5, 0.2, -0.1, 1}},
 | 
				
			|||
//                                                               {{-0.5, 0.5, -0.2, 1},  {-0.2, 0.5, -0.1, 1},  {0.2, 0.5, -0.1, 1},  {0.5, 0.5, -0.2, 1}}
 | 
				
			|||
//                                                       }, {0, 0, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 1, 1, 1, 1});
 | 
				
			|||
    NurbsSurface::Surface nurbsSurfaceEvaluator({ | 
				
			|||
                                                        {{0,   0, 0.2,  1.1}, {0,   0.2, 0.3,  0.9}, {0,   0.4, 0.25, 1.1}, {0,   0.6, 0.12,  0.9}, {0,   0.8, 0.22,  1},   {0,   1, 0.12, 1}}, | 
				
			|||
                                                        {{0.2, 0, 0.22, 1},   {0.2, 0.2, -0.3, 1},   {0.2, 0.4, 0.4,  1},   {0.2, 0.6, -0.1,  1.1}, {0.2, 0.8, -0.1,  1},   {0.2, 1, 0.2,  0.9}}, | 
				
			|||
                                                        {{0.4, 0, 0.18, 0.9}, {0.4, 0.2, -0.3, 1},   {0.4, 0.4, 0.4,  1.1}, {0.4, 0.6, -0.1,  1},   {0.4, 0.8, -0.1,  0.9}, {0.4, 1, 0.23, 1}}, | 
				
			|||
                                                        {{0.6, 0, 0.2,  0.9}, {0.6, 0.2, 0.4,  0.9}, {0.6, 0.4, 0.4,  1},   {0.6, 0.6, 0.4,   0.9}, {0.6, 0.8, 0.4,   1},   {0.6, 1, 0.2,  1}}, | 
				
			|||
                                                        {{0.8, 0, 0.19, 1.1}, {0.8, 0.2, -0.4, 1},   {0.8, 0.4, 0.4,  1.1}, {0.8, 0.6, -0.27, 1},   {0.8, 0.8, -0.27, 1},   {0.8, 1, 0.2,  0.9}}, | 
				
			|||
                                                        {{1,   0, 0.2,  1.1}, {1,   0.2, 0.12, 1},   {1,   0.4, 0.22, 1},   {1,   0.6, 0.32,  1},   {1,   0.8, 0.22,  1.2}, {1,   1, 0.12, 1.1}} | 
				
			|||
                                                }, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}); | 
				
			|||
    nurbsSurfaceEvaluator.setRecordTime(true); | 
				
			|||
 | 
				
			|||
//    nurbsSurfaceEvaluator.buildGaussMap(6); // 构建曲面的Gauss map
 | 
				
			|||
//    nurbsSurfaceEvaluator.gauss_map.printQuadTree(); // 打印整棵Gauss map树
 | 
				
			|||
//    auto overlappedLeafNodes = NurbsSurface::getOverlappedLeafNodes(nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
//                                                                    nurbsSurfaceEvaluator.gauss_map);
 | 
				
			|||
//    printf("overlapped leafNodes cnt: %llu\n", overlappedLeafNodes.size());
 | 
				
			|||
 | 
				
			|||
    //判定两个Surface构造的GaussMap在指定u、v范围内是否有重合
 | 
				
			|||
//    auto isRegionallyOverlapped = NurbsSurface::isGaussMapsOverlapped(nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
//                                                                      nurbsSurfaceEvaluator.gauss_map, {0.2, 0.3},
 | 
				
			|||
//                                                                      {0.2, 0.3}, {0.28, 0.38}, {0.28, 0.38}, {0, 1},
 | 
				
			|||
//                                                                      {0, 1}, {0, 1}, {0, 1});
 | 
				
			|||
//    printf("is guass map overlapped: %d\n", isRegionallyOverlapped);
 | 
				
			|||
 | 
				
			|||
    int level = 8; | 
				
			|||
    int edgeSampleCnt = pow(2, level - 1) + 1; | 
				
			|||
    nurbsSurfaceEvaluator.evaluate(edgeSampleCnt, edgeSampleCnt); | 
				
			|||
    nurbsSurfaceEvaluator.derivative(edgeSampleCnt, edgeSampleCnt); | 
				
			|||
    // 如果buildBVH需要曲率K,这里需要再先: nurbsSurfaceEvaluator.curvature(edgeSampleCnt, edgeSampleCnt);
 | 
				
			|||
    // 同时buildBVH传入第二个参数
 | 
				
			|||
    nurbsSurfaceEvaluator.buildBVH(level); // 构建曲面的BVH
 | 
				
			|||
    auto derInfo = nurbsSurfaceEvaluator.getDerivativeVec(edgeSampleCnt, edgeSampleCnt); // 求值
 | 
				
			|||
  int level = 10; | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                          {{-1,   0,   0,
 | 
				
			|||
  //                                                          0.3},   {0,   1,
 | 
				
			|||
  //                                                          6, 0.8},  {1,  0,
 | 
				
			|||
  //                                                          4, 0.5},   {2,
 | 
				
			|||
  //                                                          0.5,  3, 0.8}, {3,
 | 
				
			|||
  //                                                          3,   1, 0.6}, {4,
 | 
				
			|||
  //                                                          -5,    0, 0.7}},
 | 
				
			|||
  //                                                          {{-2,   1,   1.2,
 | 
				
			|||
  //                                                          0.2}, {1,   2, 3,
 | 
				
			|||
  //                                                          0.3},  {2,  2, 3,
 | 
				
			|||
  //                                                          0.6},   {-1, -0.3,
 | 
				
			|||
  //                                                          2, 0.4},    {-1,
 | 
				
			|||
  //                                                          2,   0, 0.9}, {7,
 | 
				
			|||
  //                                                          -8,    2, 0.3}},
 | 
				
			|||
  //                                                          {{-3.4, 2,   3,
 | 
				
			|||
  //                                                          0.8},   {2,   3,
 | 
				
			|||
  //                                                          0, 0.6},  {4,  3,
 | 
				
			|||
  //                                                          7, 0.3},   {-2, 0,
 | 
				
			|||
  //                                                          -0.2, 0.4},
 | 
				
			|||
  //                                                          {1,    1.7, 5,
 | 
				
			|||
  //                                                          0.6},   {9, -10.3,
 | 
				
			|||
  //                                                          6, 0.7}},
 | 
				
			|||
  //                                                          {{-1.5, 3.2, 1,
 | 
				
			|||
  //                                                          0.5},   {2.6, 7,
 | 
				
			|||
  //                                                          -2, 0.7}, {5,
 | 
				
			|||
  //                                                          0.8, 4.2, 0.8},
 | 
				
			|||
  //                                                          {-4, 1,    4,
 | 
				
			|||
  //                                                          0.7},    {2.1,  4,
 | 
				
			|||
  //                                                          -2, 0.3},  {11,
 | 
				
			|||
  //                                                          -6,    4, 0.6}},
 | 
				
			|||
  //                                                          {{-0.2, 2,   0,
 | 
				
			|||
  //                                                          0.7},   {5,   3,
 | 
				
			|||
  //                                                          2, 0.4},
 | 
				
			|||
  //                                                          {5,  1.5, 1.4,
 | 
				
			|||
  //                                                          0.6}, {-3, 2, 5,
 | 
				
			|||
  //                                                          0.8}, {0.8,  1.3,
 | 
				
			|||
  //                                                          0, 0.5},   {15,
 | 
				
			|||
  //                                                          -2,    0.9, 0.6}},
 | 
				
			|||
  //                                                          {{3,    1.4, -1,
 | 
				
			|||
  //                                                          0.4},  {6,   2, 4,
 | 
				
			|||
  //                                                          0.6},  {-1, 0, -2,
 | 
				
			|||
  //                                                          0.4},  {0,  2.8,
 | 
				
			|||
  //                                                          2, 0.6},    {-0.5,
 | 
				
			|||
  //                                                          2,   1.2, 0.9},
 | 
				
			|||
  //                                                          {7,  -3,    -2,
 | 
				
			|||
  //                                                          0.3}},},
 | 
				
			|||
  //                                                  {0, 0, 0, 0.1, 0.5, 0.8,
 | 
				
			|||
  //                                                  1, 1, 1}, {0, 0, 0, 0.2,
 | 
				
			|||
  //                                                  0.7, 0.8, 1, 1, 1});
 | 
				
			|||
  //    NurbsSurface::Evaluator nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                          {{-1,   0,   0,
 | 
				
			|||
  //                                                          1},   {0,   1, 6,
 | 
				
			|||
  //                                                          1},  {1,  0,   4,
 | 
				
			|||
  //                                                          1},   {2,  0.5, 3,
 | 
				
			|||
  //                                                          1},    {3,    3,
 | 
				
			|||
  //                                                          1, 1},   {4,  -5,
 | 
				
			|||
  //                                                          0, 1}},
 | 
				
			|||
  //                                                          {{-2,   1,   1.2,
 | 
				
			|||
  //                                                          1}, {1,   2, 3,
 | 
				
			|||
  //                                                          1},  {2,  2,   3,
 | 
				
			|||
  //                                                          1},   {-1, -0.3,
 | 
				
			|||
  //                                                          2, 1},    {-1, 2,
 | 
				
			|||
  //                                                          0, 1},   {7,  -8,
 | 
				
			|||
  //                                                          2, 1}},
 | 
				
			|||
  //                                                          {{-3.4, 2,   3,
 | 
				
			|||
  //                                                          1},   {2,   3, 0,
 | 
				
			|||
  //                                                          1},  {4,  3,   7,
 | 
				
			|||
  //                                                          1},   {-2, 0,
 | 
				
			|||
  //                                                          -0.2, 1},
 | 
				
			|||
  //                                                          {1,    1.7, 5, 1},
 | 
				
			|||
  //                                                          {9,  -10.3, 6,
 | 
				
			|||
  //                                                          1}},
 | 
				
			|||
  //                                                          {{-1.5, 3.2, 1,
 | 
				
			|||
  //                                                          1},   {2.6, 7, -2,
 | 
				
			|||
  //                                                          1}, {5,  0.8, 4.2,
 | 
				
			|||
  //                                                          1}, {-4, 1,    4,
 | 
				
			|||
  //                                                          1},    {2.1,  4,
 | 
				
			|||
  //                                                          -2, 1},  {11, -6,
 | 
				
			|||
  //                                                          4, 1}},
 | 
				
			|||
  //                                                          {{-0.2, 2,   0,
 | 
				
			|||
  //                                                          1},   {5,   3, 2,
 | 
				
			|||
  //                                                          1}, {5,  1.5, 1.4,
 | 
				
			|||
  //                                                          1}, {-3, 2,    5,
 | 
				
			|||
  //                                                          1},    {0.8,  1.3,
 | 
				
			|||
  //                                                          0, 1},   {15, -2,
 | 
				
			|||
  //                                                          0.9, 1}},
 | 
				
			|||
  //                                                          {{3,    1.4, -1,
 | 
				
			|||
  //                                                          1},  {6,   2, 4,
 | 
				
			|||
  //                                                          1},  {-1, 0,   -2,
 | 
				
			|||
  //                                                          1},  {0,  2.8,  2,
 | 
				
			|||
  //                                                          1},    {-0.5,
 | 
				
			|||
  //                                                          2,   1.2, 1}, {7,
 | 
				
			|||
  //                                                          -3,    -2, 1}},},
 | 
				
			|||
  //                                                  {0, 0, 0, 0.1, 0.5, 0.8,
 | 
				
			|||
  //                                                  1, 1, 1}, {0, 0, 0, 0.2,
 | 
				
			|||
  //                                                  0.7, 0.8, 1, 1, 1});
 | 
				
			|||
 | 
				
			|||
    printf("==============================\n"); | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                        {{-0.57, -0.48,
 | 
				
			|||
  //                                                        -0.31, 1}, {-0.17,
 | 
				
			|||
  //                                                        -0.49, -0.43, 1},
 | 
				
			|||
  //                                                        {0.3,  -0.53, -0.27,
 | 
				
			|||
  //                                                        1}, {0.66, -0.42,
 | 
				
			|||
  //                                                        -0.36, 1}},
 | 
				
			|||
  //                                                        {{-0.53, -0.15,
 | 
				
			|||
  //                                                        -0.03, 1}, {-0.21,
 | 
				
			|||
  //                                                        -0.12, 0.09, 1},
 | 
				
			|||
  //                                                        {0.10, -0.18, 0.03,
 | 
				
			|||
  //                                                        1},  {0.49, -0.15,
 | 
				
			|||
  //                                                        -0.03, 1}},
 | 
				
			|||
  //                                                        {{-0.61, 0.22, 0.09,
 | 
				
			|||
  //                                                        1},  {-0.21, 0.20,
 | 
				
			|||
  //                                                        0.09, 1},  {0.13,
 | 
				
			|||
  //                                                        0.20,  0.12, 1},
 | 
				
			|||
  //                                                        {0.49, 0.19,  -0.03,
 | 
				
			|||
  //                                                        1}},
 | 
				
			|||
  //                                                        {{-0.52, 0.51, 0.13,
 | 
				
			|||
  //                                                        1},  {-0.20, 0.32,
 | 
				
			|||
  //                                                        0.36, 1},  {0.18,
 | 
				
			|||
  //                                                        0.29,  0.28, 1},
 | 
				
			|||
  //                                                        {0.51, 0.53,  0.12,
 | 
				
			|||
  //                                                        1}}
 | 
				
			|||
  //                                                }, {0, 0, 0, 0, 1, 1, 1, 1},
 | 
				
			|||
  //                                                {0, 0, 0, 0, 1, 1, 1, 1});
 | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                        {{2, -2,  -2, 1},
 | 
				
			|||
  //                                                        {-2.5, -2.2, -1.5,
 | 
				
			|||
  //                                                        3}, {-2, -2,  -0.5,
 | 
				
			|||
  //                                                        4}, {-2, -2,  1.5,
 | 
				
			|||
  //                                                        2}},
 | 
				
			|||
  //                                                        {{2, -1,  -2, 2},
 | 
				
			|||
  //                                                        {-2.5, -1.2, -1.5,
 | 
				
			|||
  //                                                        1}, {-2, -1,  -0.5,
 | 
				
			|||
  //                                                        1}, {-2, -1,  1.5,
 | 
				
			|||
  //                                                        1}},
 | 
				
			|||
  //                                                        {{3, 1.2, -2, 9},
 | 
				
			|||
  //                                                        {-2.5, 1.2,  -1.5,
 | 
				
			|||
  //                                                        1}, {-2, 1.5, -0.5,
 | 
				
			|||
  //                                                        7}, {-2, 1.5, 1.5,
 | 
				
			|||
  //                                                        4}},
 | 
				
			|||
  //                                                        {{2, 2,   -2, 1},
 | 
				
			|||
  //                                                        {-2.5, 2,    -1.5,
 | 
				
			|||
  //                                                        1}, {-2, 2.5, -0.5,
 | 
				
			|||
  //                                                        7}, {-2, 2,   1.5,
 | 
				
			|||
  //                                                        1}}
 | 
				
			|||
  //                                                }, {0, 0, 0, 0, 1, 1, 1, 1},
 | 
				
			|||
  //                                                {0, 0, 0, 0, 1, 1, 1, 1});
 | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                               {{-0.5, -0.5,
 | 
				
			|||
  //                                                               -0.2, 1},
 | 
				
			|||
  //                                                               {-0.2, -0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.2, -0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.5, -0.5,
 | 
				
			|||
  //                                                               -0.2, 1}},
 | 
				
			|||
  //                                                               {{-0.5, -0.2,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {-0.2, -0.2,
 | 
				
			|||
  //                                                               0., 1}, {0.2,
 | 
				
			|||
  //                                                               -0.2, 0., 1},
 | 
				
			|||
  //                                                               {0.5, -0.2,
 | 
				
			|||
  //                                                               -0.1, 1}},
 | 
				
			|||
  //                                                               {{-0.5, 0.2,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {-0.2, 0.2,
 | 
				
			|||
  //                                                               0., 1}, {0.2,
 | 
				
			|||
  //                                                               0.2, 0., 1},
 | 
				
			|||
  //                                                               {0.5, 0.2,
 | 
				
			|||
  //                                                               -0.1, 1}},
 | 
				
			|||
  //                                                               {{-0.5, 0.5,
 | 
				
			|||
  //                                                               -0.2, 1},
 | 
				
			|||
  //                                                               {-0.2, 0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.2, 0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.5, 0.5,
 | 
				
			|||
  //                                                               -0.2, 1}}
 | 
				
			|||
  //                                                       }, {0, 0, 0, 0, 1, 1,
 | 
				
			|||
  //                                                       1, 1}, {0, 0, 0, 0,
 | 
				
			|||
  //                                                       1, 1, 1, 1});
 | 
				
			|||
  NurbsSurface::Surface nurbsSurfaceEvaluator( | 
				
			|||
      {{{0, 0, 0.2, 1.1}, | 
				
			|||
        {0, 0.2, 0.3, 0.9}, | 
				
			|||
        {0, 0.4, 0.25, 1.1}, | 
				
			|||
        {0, 0.6, 0.12, 0.9}, | 
				
			|||
        {0, 0.8, 0.22, 1}, | 
				
			|||
        {0, 1, 0.12, 1}}, | 
				
			|||
       {{0.2, 0, 0.22, 1}, | 
				
			|||
        {0.2, 0.2, -0.3, 1}, | 
				
			|||
        {0.2, 0.4, 0.4, 1}, | 
				
			|||
        {0.2, 0.6, -0.1, 1.1}, | 
				
			|||
        {0.2, 0.8, -0.1, 1}, | 
				
			|||
        {0.2, 1, 0.2, 0.9}}, | 
				
			|||
       {{0.4, 0, 0.18, 0.9}, | 
				
			|||
        {0.4, 0.2, -0.3, 1}, | 
				
			|||
        {0.4, 0.4, 0.4, 1.1}, | 
				
			|||
        {0.4, 0.6, -0.1, 1}, | 
				
			|||
        {0.4, 0.8, -0.1, 0.9}, | 
				
			|||
        {0.4, 1, 0.23, 1}}, | 
				
			|||
       {{0.6, 0, 0.2, 0.9}, | 
				
			|||
        {0.6, 0.2, 0.4, 0.9}, | 
				
			|||
        {0.6, 0.4, 0.4, 1}, | 
				
			|||
        {0.6, 0.6, 0.4, 0.9}, | 
				
			|||
        {0.6, 0.8, 0.4, 1}, | 
				
			|||
        {0.6, 1, 0.2, 1}}, | 
				
			|||
       {{0.8, 0, 0.19, 1.1}, | 
				
			|||
        {0.8, 0.2, -0.4, 1}, | 
				
			|||
        {0.8, 0.4, 0.4, 1.1}, | 
				
			|||
        {0.8, 0.6, -0.27, 1}, | 
				
			|||
        {0.8, 0.8, -0.27, 1}, | 
				
			|||
        {0.8, 1, 0.2, 0.9}}, | 
				
			|||
       {{1, 0, 0.2, 1.1}, | 
				
			|||
        {1, 0.2, 0.12, 1}, | 
				
			|||
        {1, 0.4, 0.22, 1}, | 
				
			|||
        {1, 0.6, 0.32, 1}, | 
				
			|||
        {1, 0.8, 0.22, 1.2}, | 
				
			|||
        {1, 1, 0.12, 1.1}}}, | 
				
			|||
      {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}, level); | 
				
			|||
  nurbsSurfaceEvaluator.setRecordTime(true); | 
				
			|||
 | 
				
			|||
    NurbsCurve::Curve nurbsCurveEvaluator( | 
				
			|||
            {{-1, 0,   0, 0.3}, | 
				
			|||
             {0,  1,   6, 0.4}, | 
				
			|||
             {1,  0,   4, 0.5}, | 
				
			|||
             {2,  0.5, 3, 0.4}, | 
				
			|||
             {3,  3,   1, 0.5}, | 
				
			|||
             {4,  -5,  0, 0.7}}, | 
				
			|||
            {0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1}); | 
				
			|||
    nurbsCurveEvaluator.setRecordTime(true); | 
				
			|||
  //    nurbsSurfaceEvaluator.buildGaussMap(6); // 构建曲面的Gauss map
 | 
				
			|||
  //    nurbsSurfaceEvaluator.gauss_map.printQuadTree(); // 打印整棵Gauss map树
 | 
				
			|||
  //    auto overlappedLeafNodes =
 | 
				
			|||
  //    NurbsSurface::getOverlappedLeafNodes(nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
  //                                                                    nurbsSurfaceEvaluator.gauss_map);
 | 
				
			|||
  //    printf("overlapped leafNodes cnt: %llu\n", overlappedLeafNodes.size());
 | 
				
			|||
 | 
				
			|||
  // 判定两个Surface构造的GaussMap在指定u、v范围内是否有重合
 | 
				
			|||
  //    auto isRegionallyOverlapped =
 | 
				
			|||
  //    NurbsSurface::isGaussMapsOverlapped(nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
  //                                                                      nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
  //                                                                      {0.2,
 | 
				
			|||
  //                                                                      0.3},
 | 
				
			|||
  //                                                                      {0.2,
 | 
				
			|||
  //                                                                      0.3},
 | 
				
			|||
  //                                                                      {0.28,
 | 
				
			|||
  //                                                                      0.38},
 | 
				
			|||
  //                                                                      {0.28,
 | 
				
			|||
  //                                                                      0.38},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1});
 | 
				
			|||
  //    printf("is guass map overlapped: %d\n", isRegionallyOverlapped);
 | 
				
			|||
 | 
				
			|||
  gpuWarmUp(); | 
				
			|||
 | 
				
			|||
    auto res = nurbsCurveEvaluator.evaluate(11); | 
				
			|||
    for (auto &re: res) { | 
				
			|||
        printf("%f, %f, %f\n", re[0], re[1], re[2]); | 
				
			|||
    } | 
				
			|||
    printf("\n"); | 
				
			|||
  int edgeSampleCnt = pow(2, level - 1) + 1; | 
				
			|||
  nurbsSurfaceEvaluator.evaluate(); | 
				
			|||
  nurbsSurfaceEvaluator.derivative(); | 
				
			|||
  // 如果buildBVH需要曲率K,这里需要再先:
 | 
				
			|||
  // nurbsSurfaceEvaluator.curvature(edgeSampleCnt, edgeSampleCnt);
 | 
				
			|||
  // 同时buildBVH传入第二个参数
 | 
				
			|||
  nurbsSurfaceEvaluator.buildBVH(false);                   // 构建曲面的BVH
 | 
				
			|||
  auto derInfo = nurbsSurfaceEvaluator.getDerivativeVec(); // 求值
 | 
				
			|||
 | 
				
			|||
    return 0; | 
				
			|||
  printf("==============================\n"); | 
				
			|||
  //
 | 
				
			|||
  //    NurbsCurve::Curve nurbsCurveEvaluator(
 | 
				
			|||
  //            {{0.721068, 0, 0, 1},
 | 
				
			|||
  //             {1.05152, 0, 0, 1},
 | 
				
			|||
  //             {0.346353, 0, 0, 1},
 | 
				
			|||
  //             {0.351813, 0, 0, 1},
 | 
				
			|||
  //             {0.375972, 0, 0, 1},
 | 
				
			|||
  //             {0.363015, 0, 0, 1},
 | 
				
			|||
  //             {0.368758, 0, 0, 1},
 | 
				
			|||
  //             {0.368222, 0, 0, 1},
 | 
				
			|||
  //             {0.371302, 0, 0, 1},
 | 
				
			|||
  //             {0.374657, 0, 0, 1},
 | 
				
			|||
  //             {0.377866, 0, 0, 1},
 | 
				
			|||
  //             {0.380762, 0, 0, 1},
 | 
				
			|||
  //             {0.382451, 0, 0, 1},
 | 
				
			|||
  //             {0.383466, 0, 0, 1},
 | 
				
			|||
  //             {0.383948, 0, 0, 1},
 | 
				
			|||
  //             {0.384242, 0, 0, 1},
 | 
				
			|||
  //             {0.384156, 0, 0, 1},
 | 
				
			|||
  //             {0.383659, 0, 0, 1},
 | 
				
			|||
  //             {0.382616, 0, 0, 1},
 | 
				
			|||
  //             {0.381428, 0, 0, 1},
 | 
				
			|||
  //             {0.379223, 0, 0, 1},
 | 
				
			|||
  //             {0.379492, 0, 0, 1},
 | 
				
			|||
  //             {0.372487, 0, 0, 1},
 | 
				
			|||
  //             {0.384305, 0, 0, 1},
 | 
				
			|||
  //             {0.357789, 0, 0, 1},
 | 
				
			|||
  //             {0.34936, 0, 0, 1},
 | 
				
			|||
  //             {1.0537, 0, 0, 1},
 | 
				
			|||
  //             {0.717109, 0, 0, 1}},
 | 
				
			|||
  //            {0, 0, 0, 0, 0.103448, 0.137931, 0.172414, 0.206897, 0.241379,
 | 
				
			|||
  //            0.275862, 0.310345, 0.344828, 0.37931, 0.413793, 0.448276,
 | 
				
			|||
  //            0.482759, 0.517241, 0.551724, 0.586207, 0.62069, 0.655172,
 | 
				
			|||
  //            0.689655, 0.724138, 0.758621, 0.793103, 0.827586, 0.862069,
 | 
				
			|||
  //            0.896552, 1, 1, 1, 1});
 | 
				
			|||
  //    nurbsCurveEvaluator.setRecordTime(true);
 | 
				
			|||
  //
 | 
				
			|||
  //    auto res = nurbsCurveEvaluator.evaluate(30);
 | 
				
			|||
  //    for (auto &re: res) {
 | 
				
			|||
  //        printf("%f, %f, %f\n", re[0], re[1], re[2]);
 | 
				
			|||
  //    }
 | 
				
			|||
  //    printf("\n");
 | 
				
			|||
  return 0; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,317 @@ | 
				
			|||
#include "device/Nurbs/loop_detection.cuh" | 
				
			|||
#include "device/Nurbs/nurbs_curve.cuh" | 
				
			|||
#include "device/Nurbs/nurbs_surface.cuh" | 
				
			|||
#include <cstdio> | 
				
			|||
#include <iostream> | 
				
			|||
 | 
				
			|||
void test(); | 
				
			|||
 | 
				
			|||
int main() { | 
				
			|||
  int level = 5; | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                          {{-1,   0,   0,
 | 
				
			|||
  //                                                          0.3},   {0,   1,
 | 
				
			|||
  //                                                          6, 0.8},  {1,  0,
 | 
				
			|||
  //                                                          4, 0.5},   {2,
 | 
				
			|||
  //                                                          0.5,  3, 0.8}, {3,
 | 
				
			|||
  //                                                          3,   1, 0.6}, {4,
 | 
				
			|||
  //                                                          -5,    0, 0.7}},
 | 
				
			|||
  //                                                          {{-2,   1,   1.2,
 | 
				
			|||
  //                                                          0.2}, {1,   2, 3,
 | 
				
			|||
  //                                                          0.3},  {2,  2, 3,
 | 
				
			|||
  //                                                          0.6},   {-1, -0.3,
 | 
				
			|||
  //                                                          2, 0.4},    {-1,
 | 
				
			|||
  //                                                          2,   0, 0.9}, {7,
 | 
				
			|||
  //                                                          -8,    2, 0.3}},
 | 
				
			|||
  //                                                          {{-3.4, 2,   3,
 | 
				
			|||
  //                                                          0.8},   {2,   3,
 | 
				
			|||
  //                                                          0, 0.6},  {4,  3,
 | 
				
			|||
  //                                                          7, 0.3},   {-2, 0,
 | 
				
			|||
  //                                                          -0.2, 0.4},
 | 
				
			|||
  //                                                          {1,    1.7, 5,
 | 
				
			|||
  //                                                          0.6},   {9, -10.3,
 | 
				
			|||
  //                                                          6, 0.7}},
 | 
				
			|||
  //                                                          {{-1.5, 3.2, 1,
 | 
				
			|||
  //                                                          0.5},   {2.6, 7,
 | 
				
			|||
  //                                                          -2, 0.7}, {5,
 | 
				
			|||
  //                                                          0.8, 4.2, 0.8},
 | 
				
			|||
  //                                                          {-4, 1,    4,
 | 
				
			|||
  //                                                          0.7},    {2.1,  4,
 | 
				
			|||
  //                                                          -2, 0.3},  {11,
 | 
				
			|||
  //                                                          -6,    4, 0.6}},
 | 
				
			|||
  //                                                          {{-0.2, 2,   0,
 | 
				
			|||
  //                                                          0.7},   {5,   3,
 | 
				
			|||
  //                                                          2, 0.4},
 | 
				
			|||
  //                                                          {5,  1.5, 1.4,
 | 
				
			|||
  //                                                          0.6}, {-3, 2, 5,
 | 
				
			|||
  //                                                          0.8}, {0.8,  1.3,
 | 
				
			|||
  //                                                          0, 0.5},   {15,
 | 
				
			|||
  //                                                          -2,    0.9, 0.6}},
 | 
				
			|||
  //                                                          {{3,    1.4, -1,
 | 
				
			|||
  //                                                          0.4},  {6,   2, 4,
 | 
				
			|||
  //                                                          0.6},  {-1, 0, -2,
 | 
				
			|||
  //                                                          0.4},  {0,  2.8,
 | 
				
			|||
  //                                                          2, 0.6},    {-0.5,
 | 
				
			|||
  //                                                          2,   1.2, 0.9},
 | 
				
			|||
  //                                                          {7,  -3,    -2,
 | 
				
			|||
  //                                                          0.3}},},
 | 
				
			|||
  //                                                  {0, 0, 0, 0.1, 0.5, 0.8,
 | 
				
			|||
  //                                                  1, 1, 1}, {0, 0, 0, 0.2,
 | 
				
			|||
  //                                                  0.7, 0.8, 1, 1, 1});
 | 
				
			|||
  //    NurbsSurface::Evaluator nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                          {{-1,   0,   0,
 | 
				
			|||
  //                                                          1},   {0,   1, 6,
 | 
				
			|||
  //                                                          1},  {1,  0,   4,
 | 
				
			|||
  //                                                          1},   {2,  0.5, 3,
 | 
				
			|||
  //                                                          1},    {3,    3,
 | 
				
			|||
  //                                                          1, 1},   {4,  -5,
 | 
				
			|||
  //                                                          0, 1}},
 | 
				
			|||
  //                                                          {{-2,   1,   1.2,
 | 
				
			|||
  //                                                          1}, {1,   2, 3,
 | 
				
			|||
  //                                                          1},  {2,  2,   3,
 | 
				
			|||
  //                                                          1},   {-1, -0.3,
 | 
				
			|||
  //                                                          2, 1},    {-1, 2,
 | 
				
			|||
  //                                                          0, 1},   {7,  -8,
 | 
				
			|||
  //                                                          2, 1}},
 | 
				
			|||
  //                                                          {{-3.4, 2,   3,
 | 
				
			|||
  //                                                          1},   {2,   3, 0,
 | 
				
			|||
  //                                                          1},  {4,  3,   7,
 | 
				
			|||
  //                                                          1},   {-2, 0,
 | 
				
			|||
  //                                                          -0.2, 1},
 | 
				
			|||
  //                                                          {1,    1.7, 5, 1},
 | 
				
			|||
  //                                                          {9,  -10.3, 6,
 | 
				
			|||
  //                                                          1}},
 | 
				
			|||
  //                                                          {{-1.5, 3.2, 1,
 | 
				
			|||
  //                                                          1},   {2.6, 7, -2,
 | 
				
			|||
  //                                                          1}, {5,  0.8, 4.2,
 | 
				
			|||
  //                                                          1}, {-4, 1,    4,
 | 
				
			|||
  //                                                          1},    {2.1,  4,
 | 
				
			|||
  //                                                          -2, 1},  {11, -6,
 | 
				
			|||
  //                                                          4, 1}},
 | 
				
			|||
  //                                                          {{-0.2, 2,   0,
 | 
				
			|||
  //                                                          1},   {5,   3, 2,
 | 
				
			|||
  //                                                          1}, {5,  1.5, 1.4,
 | 
				
			|||
  //                                                          1}, {-3, 2,    5,
 | 
				
			|||
  //                                                          1},    {0.8,  1.3,
 | 
				
			|||
  //                                                          0, 1},   {15, -2,
 | 
				
			|||
  //                                                          0.9, 1}},
 | 
				
			|||
  //                                                          {{3,    1.4, -1,
 | 
				
			|||
  //                                                          1},  {6,   2, 4,
 | 
				
			|||
  //                                                          1},  {-1, 0,   -2,
 | 
				
			|||
  //                                                          1},  {0,  2.8,  2,
 | 
				
			|||
  //                                                          1},    {-0.5,
 | 
				
			|||
  //                                                          2,   1.2, 1}, {7,
 | 
				
			|||
  //                                                          -3,    -2, 1}},},
 | 
				
			|||
  //                                                  {0, 0, 0, 0.1, 0.5, 0.8,
 | 
				
			|||
  //                                                  1, 1, 1}, {0, 0, 0, 0.2,
 | 
				
			|||
  //                                                  0.7, 0.8, 1, 1, 1});
 | 
				
			|||
 | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                        {{-0.57, -0.48,
 | 
				
			|||
  //                                                        -0.31, 1}, {-0.17,
 | 
				
			|||
  //                                                        -0.49, -0.43, 1},
 | 
				
			|||
  //                                                        {0.3,  -0.53, -0.27,
 | 
				
			|||
  //                                                        1}, {0.66, -0.42,
 | 
				
			|||
  //                                                        -0.36, 1}},
 | 
				
			|||
  //                                                        {{-0.53, -0.15,
 | 
				
			|||
  //                                                        -0.03, 1}, {-0.21,
 | 
				
			|||
  //                                                        -0.12, 0.09, 1},
 | 
				
			|||
  //                                                        {0.10, -0.18, 0.03,
 | 
				
			|||
  //                                                        1},  {0.49, -0.15,
 | 
				
			|||
  //                                                        -0.03, 1}},
 | 
				
			|||
  //                                                        {{-0.61, 0.22, 0.09,
 | 
				
			|||
  //                                                        1},  {-0.21, 0.20,
 | 
				
			|||
  //                                                        0.09, 1},  {0.13,
 | 
				
			|||
  //                                                        0.20,  0.12, 1},
 | 
				
			|||
  //                                                        {0.49, 0.19,  -0.03,
 | 
				
			|||
  //                                                        1}},
 | 
				
			|||
  //                                                        {{-0.52, 0.51, 0.13,
 | 
				
			|||
  //                                                        1},  {-0.20, 0.32,
 | 
				
			|||
  //                                                        0.36, 1},  {0.18,
 | 
				
			|||
  //                                                        0.29,  0.28, 1},
 | 
				
			|||
  //                                                        {0.51, 0.53,  0.12,
 | 
				
			|||
  //                                                        1}}
 | 
				
			|||
  //                                                }, {0, 0, 0, 0, 1, 1, 1, 1},
 | 
				
			|||
  //                                                {0, 0, 0, 0, 1, 1, 1, 1});
 | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                        {{2, -2,  -2, 1},
 | 
				
			|||
  //                                                        {-2.5, -2.2, -1.5,
 | 
				
			|||
  //                                                        3}, {-2, -2,  -0.5,
 | 
				
			|||
  //                                                        4}, {-2, -2,  1.5,
 | 
				
			|||
  //                                                        2}},
 | 
				
			|||
  //                                                        {{2, -1,  -2, 2},
 | 
				
			|||
  //                                                        {-2.5, -1.2, -1.5,
 | 
				
			|||
  //                                                        1}, {-2, -1,  -0.5,
 | 
				
			|||
  //                                                        1}, {-2, -1,  1.5,
 | 
				
			|||
  //                                                        1}},
 | 
				
			|||
  //                                                        {{3, 1.2, -2, 9},
 | 
				
			|||
  //                                                        {-2.5, 1.2,  -1.5,
 | 
				
			|||
  //                                                        1}, {-2, 1.5, -0.5,
 | 
				
			|||
  //                                                        7}, {-2, 1.5, 1.5,
 | 
				
			|||
  //                                                        4}},
 | 
				
			|||
  //                                                        {{2, 2,   -2, 1},
 | 
				
			|||
  //                                                        {-2.5, 2,    -1.5,
 | 
				
			|||
  //                                                        1}, {-2, 2.5, -0.5,
 | 
				
			|||
  //                                                        7}, {-2, 2,   1.5,
 | 
				
			|||
  //                                                        1}}
 | 
				
			|||
  //                                                }, {0, 0, 0, 0, 1, 1, 1, 1},
 | 
				
			|||
  //                                                {0, 0, 0, 0, 1, 1, 1, 1});
 | 
				
			|||
  //    NurbsSurface::Surface nurbsSurfaceEvaluator({
 | 
				
			|||
  //                                                               {{-0.5, -0.5,
 | 
				
			|||
  //                                                               -0.2, 1},
 | 
				
			|||
  //                                                               {-0.2, -0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.2, -0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.5, -0.5,
 | 
				
			|||
  //                                                               -0.2, 1}},
 | 
				
			|||
  //                                                               {{-0.5, -0.2,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {-0.2, -0.2,
 | 
				
			|||
  //                                                               0., 1}, {0.2,
 | 
				
			|||
  //                                                               -0.2, 0., 1},
 | 
				
			|||
  //                                                               {0.5, -0.2,
 | 
				
			|||
  //                                                               -0.1, 1}},
 | 
				
			|||
  //                                                               {{-0.5, 0.2,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {-0.2, 0.2,
 | 
				
			|||
  //                                                               0., 1}, {0.2,
 | 
				
			|||
  //                                                               0.2, 0., 1},
 | 
				
			|||
  //                                                               {0.5, 0.2,
 | 
				
			|||
  //                                                               -0.1, 1}},
 | 
				
			|||
  //                                                               {{-0.5, 0.5,
 | 
				
			|||
  //                                                               -0.2, 1},
 | 
				
			|||
  //                                                               {-0.2, 0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.2, 0.5,
 | 
				
			|||
  //                                                               -0.1, 1},
 | 
				
			|||
  //                                                               {0.5, 0.5,
 | 
				
			|||
  //                                                               -0.2, 1}}
 | 
				
			|||
  //                                                       }, {0, 0, 0, 0, 1, 1,
 | 
				
			|||
  //                                                       1, 1}, {0, 0, 0, 0,
 | 
				
			|||
  //                                                       1, 1, 1, 1});
 | 
				
			|||
  NurbsSurface::Surface nurbsSurfaceEvaluator( | 
				
			|||
      {{{0, 0, 0.2, 1.1}, | 
				
			|||
        {0, 0.2, 0.3, 0.9}, | 
				
			|||
        {0, 0.4, 0.25, 1.1}, | 
				
			|||
        {0, 0.6, 0.12, 0.9}, | 
				
			|||
        {0, 0.8, 0.22, 1}, | 
				
			|||
        {0, 1, 0.12, 1}}, | 
				
			|||
       {{0.2, 0, 0.22, 1}, | 
				
			|||
        {0.2, 0.2, -0.3, 1}, | 
				
			|||
        {0.2, 0.4, 0.4, 1}, | 
				
			|||
        {0.2, 0.6, -0.1, 1.1}, | 
				
			|||
        {0.2, 0.8, -0.1, 1}, | 
				
			|||
        {0.2, 1, 0.2, 0.9}}, | 
				
			|||
       {{0.4, 0, 0.18, 0.9}, | 
				
			|||
        {0.4, 0.2, -0.3, 1}, | 
				
			|||
        {0.4, 0.4, 0.4, 1.1}, | 
				
			|||
        {0.4, 0.6, -0.1, 1}, | 
				
			|||
        {0.4, 0.8, -0.1, 0.9}, | 
				
			|||
        {0.4, 1, 0.23, 1}}, | 
				
			|||
       {{0.6, 0, 0.2, 0.9}, | 
				
			|||
        {0.6, 0.2, 0.4, 0.9}, | 
				
			|||
        {0.6, 0.4, 0.4, 1}, | 
				
			|||
        {0.6, 0.6, 0.4, 0.9}, | 
				
			|||
        {0.6, 0.8, 0.4, 1}, | 
				
			|||
        {0.6, 1, 0.2, 1}}, | 
				
			|||
       {{0.8, 0, 0.19, 1.1}, | 
				
			|||
        {0.8, 0.2, -0.4, 1}, | 
				
			|||
        {0.8, 0.4, 0.4, 1.1}, | 
				
			|||
        {0.8, 0.6, -0.27, 1}, | 
				
			|||
        {0.8, 0.8, -0.27, 1}, | 
				
			|||
        {0.8, 1, 0.2, 0.9}}, | 
				
			|||
       {{1, 0, 0.2, 1.1}, | 
				
			|||
        {1, 0.2, 0.12, 1}, | 
				
			|||
        {1, 0.4, 0.22, 1}, | 
				
			|||
        {1, 0.6, 0.32, 1}, | 
				
			|||
        {1, 0.8, 0.22, 1.2}, | 
				
			|||
        {1, 1, 0.12, 1.1}}}, | 
				
			|||
      {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1}, level); | 
				
			|||
  nurbsSurfaceEvaluator.setRecordTime(true); | 
				
			|||
 | 
				
			|||
  //    nurbsSurfaceEvaluator.buildGaussMap(6); // 构建曲面的Gauss map
 | 
				
			|||
  //    nurbsSurfaceEvaluator.gauss_map.printQuadTree(); // 打印整棵Gauss map树
 | 
				
			|||
  //    auto overlappedLeafNodes =
 | 
				
			|||
  //    NurbsSurface::getOverlappedLeafNodes(nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
  //                                                                    nurbsSurfaceEvaluator.gauss_map);
 | 
				
			|||
  //    printf("overlapped leafNodes cnt: %llu\n", overlappedLeafNodes.size());
 | 
				
			|||
 | 
				
			|||
  // 判定两个Surface构造的GaussMap在指定u、v范围内是否有重合
 | 
				
			|||
  //    auto isRegionallyOverlapped =
 | 
				
			|||
  //    NurbsSurface::isGaussMapsOverlapped(nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
  //                                                                      nurbsSurfaceEvaluator.gauss_map,
 | 
				
			|||
  //                                                                      {0.2,
 | 
				
			|||
  //                                                                      0.3},
 | 
				
			|||
  //                                                                      {0.2,
 | 
				
			|||
  //                                                                      0.3},
 | 
				
			|||
  //                                                                      {0.28,
 | 
				
			|||
  //                                                                      0.38},
 | 
				
			|||
  //                                                                      {0.28,
 | 
				
			|||
  //                                                                      0.38},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1},
 | 
				
			|||
  //                                                                      {0,
 | 
				
			|||
  //                                                                      1});
 | 
				
			|||
  //    printf("is guass map overlapped: %d\n", isRegionallyOverlapped);
 | 
				
			|||
 | 
				
			|||
  int edgeSampleCnt = pow(2, level - 1) + 1; | 
				
			|||
  nurbsSurfaceEvaluator.evaluate(); | 
				
			|||
  nurbsSurfaceEvaluator.derivative(); | 
				
			|||
  // 如果buildBVH需要曲率K,这里需要再先:
 | 
				
			|||
  // nurbsSurfaceEvaluator.curvature(edgeSampleCnt, edgeSampleCnt);
 | 
				
			|||
  // 同时buildBVH传入第二个参数
 | 
				
			|||
  nurbsSurfaceEvaluator.buildBVH(false);                   // 构建曲面的BVH
 | 
				
			|||
  auto derInfo = nurbsSurfaceEvaluator.getDerivativeVec(); // 求值
 | 
				
			|||
 | 
				
			|||
  printf("==============================\n"); | 
				
			|||
  //
 | 
				
			|||
  //    NurbsCurve::Curve nurbsCurveEvaluator(
 | 
				
			|||
  //            {{0.721068, 0, 0, 1},
 | 
				
			|||
  //             {1.05152, 0, 0, 1},
 | 
				
			|||
  //             {0.346353, 0, 0, 1},
 | 
				
			|||
  //             {0.351813, 0, 0, 1},
 | 
				
			|||
  //             {0.375972, 0, 0, 1},
 | 
				
			|||
  //             {0.363015, 0, 0, 1},
 | 
				
			|||
  //             {0.368758, 0, 0, 1},
 | 
				
			|||
  //             {0.368222, 0, 0, 1},
 | 
				
			|||
  //             {0.371302, 0, 0, 1},
 | 
				
			|||
  //             {0.374657, 0, 0, 1},
 | 
				
			|||
  //             {0.377866, 0, 0, 1},
 | 
				
			|||
  //             {0.380762, 0, 0, 1},
 | 
				
			|||
  //             {0.382451, 0, 0, 1},
 | 
				
			|||
  //             {0.383466, 0, 0, 1},
 | 
				
			|||
  //             {0.383948, 0, 0, 1},
 | 
				
			|||
  //             {0.384242, 0, 0, 1},
 | 
				
			|||
  //             {0.384156, 0, 0, 1},
 | 
				
			|||
  //             {0.383659, 0, 0, 1},
 | 
				
			|||
  //             {0.382616, 0, 0, 1},
 | 
				
			|||
  //             {0.381428, 0, 0, 1},
 | 
				
			|||
  //             {0.379223, 0, 0, 1},
 | 
				
			|||
  //             {0.379492, 0, 0, 1},
 | 
				
			|||
  //             {0.372487, 0, 0, 1},
 | 
				
			|||
  //             {0.384305, 0, 0, 1},
 | 
				
			|||
  //             {0.357789, 0, 0, 1},
 | 
				
			|||
  //             {0.34936, 0, 0, 1},
 | 
				
			|||
  //             {1.0537, 0, 0, 1},
 | 
				
			|||
  //             {0.717109, 0, 0, 1}},
 | 
				
			|||
  //            {0, 0, 0, 0, 0.103448, 0.137931, 0.172414, 0.206897, 0.241379,
 | 
				
			|||
  //            0.275862, 0.310345, 0.344828, 0.37931, 0.413793, 0.448276,
 | 
				
			|||
  //            0.482759, 0.517241, 0.551724, 0.586207, 0.62069, 0.655172,
 | 
				
			|||
  //            0.689655, 0.724138, 0.758621, 0.793103, 0.827586, 0.862069,
 | 
				
			|||
  //            0.896552, 1, 1, 1, 1});
 | 
				
			|||
  //    nurbsCurveEvaluator.setRecordTime(true);
 | 
				
			|||
  //
 | 
				
			|||
  //    auto res = nurbsCurveEvaluator.evaluate(30);
 | 
				
			|||
  //    for (auto &re: res) {
 | 
				
			|||
  //        printf("%f, %f, %f\n", re[0], re[1], re[2]);
 | 
				
			|||
  //    }
 | 
				
			|||
  //    printf("\n");
 | 
				
			|||
 | 
				
			|||
  test(); | 
				
			|||
  return 0; | 
				
			|||
} | 
				
			|||
					Loading…
					
					
				
		Reference in new issue