From 1dc1a87fba520bb45c1ce8165e8ea2c83c0a308d Mon Sep 17 00:00:00 2001 From: Bryan Galdrikian Date: Mon, 22 Jan 2018 14:04:16 -0800 Subject: Changes for 1.1.2 release candidate See README.md, docs/release_notes.txt --- README.md | 6 +- blast_tools_and_samples-windows.zip | Bin 72050467 -> 69172825 bytes buildtools/packager/formic/LICENSE.txt | 619 +++++ buildtools/packman/packman | 25 +- buildtools/packman/packman.cmd | 20 +- buildtools/packman/packmanapi.py | 2 +- buildtools/packman/win-bootstrap/configure.bat | 6 +- buildtools/packman/win-bootstrap/fetch_file.cmd | 23 - .../packman/win-bootstrap/fetch_file_from_s3.cmd | 19 + .../packman/win-bootstrap/fetch_file_from_s3.ps1 | 75 +- dependencies.xml | 32 +- .../files/_nv_blast_ext_authoring_8h-source.html | 134 +- .../api_docs/files/_nv_blast_ext_authoring_8h.html | 221 +- ...ast_ext_authoring_bond_generator_8h-source.html | 95 +- .../_nv_blast_ext_authoring_cutout_8h-source.html | 89 + .../files/_nv_blast_ext_authoring_cutout_8h.html | 43 + ...last_ext_authoring_fracture_tool_8h-source.html | 288 ++- .../_nv_blast_ext_authoring_fracture_tool_8h.html | 4 + .../_nv_blast_ext_authoring_types_8h-source.html | 266 ++- .../files/_nv_blast_ext_exporter_8h-source.html | 196 +- docs/api_docs/files/_nv_blast_ext_exporter_8h.html | 2 + docs/api_docs/files/annotated.html | 4 + ...1_1_blast_1_1_blast_bond_generator-members.html | 2 +- ...lass_nv_1_1_blast_1_1_blast_bond_generator.html | 12 +- .../class_nv_1_1_blast_1_1_cutout_set-members.html | 41 + .../files/class_nv_1_1_blast_1_1_cutout_set.html | 331 +++ ...ass_nv_1_1_blast_1_1_fracture_tool-members.html | 7 +- .../class_nv_1_1_blast_1_1_fracture_tool.html | 235 +- ...v_1_1_blast_1_1_i_mesh_file_writer-members.html | 1 + .../class_nv_1_1_blast_1_1_i_mesh_file_writer.html | 22 + docs/api_docs/files/classes.html | 32 +- docs/api_docs/files/files.html | 1 + docs/api_docs/files/functions.html | 22 +- docs/api_docs/files/functions_0x63.html | 28 +- docs/api_docs/files/functions_0x64.html | 10 +- docs/api_docs/files/functions_0x66.html | 14 +- docs/api_docs/files/functions_0x67.html | 22 +- docs/api_docs/files/functions_0x69.html | 10 +- docs/api_docs/files/functions_0x6d.html | 4 +- docs/api_docs/files/functions_0x6e.html | 10 +- docs/api_docs/files/functions_0x6f.html | 2 + docs/api_docs/files/functions_0x72.html | 25 +- docs/api_docs/files/functions_0x73.html | 22 +- docs/api_docs/files/functions_0x74.html | 16 +- docs/api_docs/files/functions_0x75.html | 18 +- docs/api_docs/files/functions_0x7e.html | 2 + docs/api_docs/files/functions_func_0x63.html | 13 +- docs/api_docs/files/functions_func_0x66.html | 4 + docs/api_docs/files/functions_func_0x67.html | 18 + docs/api_docs/files/functions_func_0x69.html | 2 + docs/api_docs/files/functions_func_0x72.html | 23 +- docs/api_docs/files/functions_func_0x73.html | 10 +- docs/api_docs/files/functions_func_0x75.html | 2 + docs/api_docs/files/functions_func_0x7e.html | 2 + docs/api_docs/files/functions_vars.html | 10 +- docs/api_docs/files/functions_vars_0x63.html | 10 +- docs/api_docs/files/functions_vars_0x64.html | 6 +- docs/api_docs/files/functions_vars_0x66.html | 6 +- docs/api_docs/files/functions_vars_0x69.html | 4 + docs/api_docs/files/functions_vars_0x6d.html | 8 +- docs/api_docs/files/functions_vars_0x6e.html | 10 +- docs/api_docs/files/functions_vars_0x6f.html | 2 + docs/api_docs/files/functions_vars_0x73.html | 12 +- docs/api_docs/files/functions_vars_0x74.html | 5 +- docs/api_docs/files/globals.html | 10 +- docs/api_docs/files/globals_func.html | 10 +- docs/api_docs/files/hierarchy.html | 4 + docs/api_docs/files/namespace_nv_1_1_blast.html | 8 + docs/api_docs/files/pagereleasenotes.html | 35 + ...1_blast_1_1_bond_generation_config-members.html | 1 + ...ct_nv_1_1_blast_1_1_bond_generation_config.html | 19 +- ...struct_nv_1_1_blast_1_1_chunk_info-members.html | 1 + .../files/struct_nv_1_1_blast_1_1_chunk_info.html | 17 + ...1_1_blast_1_1_cutout_configuration-members.html | 35 + ...ruct_nv_1_1_blast_1_1_cutout_configuration.html | 128 + ...v_1_1_blast_1_1_exporter_mesh_data-members.html | 2 +- ...struct_nv_1_1_blast_1_1_exporter_mesh_data.html | 6 +- .../struct_nv_1_1_blast_1_1_materials-members.html | 32 + .../files/struct_nv_1_1_blast_1_1_materials.html | 76 + ..._1_1_blast_1_1_noise_configuration-members.html | 34 + ...truct_nv_1_1_blast_1_1_noise_configuration.html | 111 + ..._1_blast_1_1_slicing_configuration-members.html | 5 +- ...uct_nv_1_1_blast_1_1_slicing_configuration.html | 58 +- .../struct_nv_1_1_blast_1_1_triangle-members.html | 2 + .../files/struct_nv_1_1_blast_1_1_triangle.html | 44 + docs/api_docs/files/tree.html | 9 + docs/release_notes.txt | 35 + .../files/_nv_blast_ext_authoring_8h-source.html | 134 +- .../files/_nv_blast_ext_authoring_8h.html | 221 +- ...ast_ext_authoring_bond_generator_8h-source.html | 95 +- ...xt_authoring_bond_generator_impl_8h-source.html | 4 +- .../_nv_blast_ext_authoring_cutout_8h-source.html | 106 + .../files/_nv_blast_ext_authoring_cutout_8h.html | 61 + ..._blast_ext_authoring_cutout_impl_8h-source.html | 174 ++ .../_nv_blast_ext_authoring_cutout_impl_8h.html | 76 + ...last_ext_authoring_fracture_tool_8h-source.html | 288 ++- .../_nv_blast_ext_authoring_fracture_tool_8h.html | 4 + ...ext_authoring_fracture_tool_impl_8h-source.html | 307 +-- ..._blast_ext_authoring_fracture_tool_impl_8h.html | 1 + ...nv_blast_ext_authoring_mesh_impl_8h-source.html | 12 +- .../_nv_blast_ext_authoring_mesh_impl_8h.html | 2 + ...blast_ext_authoring_triangulator_8h-source.html | 117 +- .../_nv_blast_ext_authoring_types_8h-source.html | 266 ++- .../files/_nv_blast_ext_exporter_8h-source.html | 196 +- .../files/_nv_blast_ext_exporter_8h.html | 2 + ...nv_blast_ext_exporter_fbx_writer_8h-source.html | 76 +- ...nv_blast_ext_exporter_obj_reader_8h-source.html | 22 +- ...nv_blast_ext_exporter_obj_writer_8h-source.html | 24 +- .../_nv_blast_ext_exporter_obj_writer_8h.html | 1 + docs/source_docs/files/annotated.html | 15 +- ...1_1_blast_1_1_blast_bond_generator-members.html | 2 +- ...lass_nv_1_1_blast_1_1_blast_bond_generator.html | 14 +- ...last_1_1_blast_bond_generator_impl-members.html | 2 +- ...nv_1_1_blast_1_1_blast_bond_generator_impl.html | 14 +- .../class_nv_1_1_blast_1_1_cutout_set-members.html | 61 + .../files/class_nv_1_1_blast_1_1_cutout_set.html | 380 +++ .../files/class_nv_1_1_blast_1_1_cutout_set.png | Bin 0 -> 510 bytes ...s_nv_1_1_blast_1_1_fbx_file_writer-members.html | 1 + .../class_nv_1_1_blast_1_1_fbx_file_writer.html | 24 + ...ass_nv_1_1_blast_1_1_fracture_tool-members.html | 7 +- .../class_nv_1_1_blast_1_1_fracture_tool.html | 247 +- ...v_1_1_blast_1_1_fracture_tool_impl-members.html | 7 +- .../class_nv_1_1_blast_1_1_fracture_tool_impl.html | 247 +- ...v_1_1_blast_1_1_i_mesh_file_writer-members.html | 1 + .../class_nv_1_1_blast_1_1_i_mesh_file_writer.html | 24 + .../class_nv_1_1_blast_1_1_obj_file_reader.html | 4 +- ...s_nv_1_1_blast_1_1_obj_file_writer-members.html | 1 + .../class_nv_1_1_blast_1_1_obj_file_writer.html | 24 + ...lass_nv_1_1_blast_1_1_triangulator-members.html | 2 + .../files/class_nv_1_1_blast_1_1_triangulator.html | 42 + docs/source_docs/files/classes.html | 36 +- docs/source_docs/files/files.html | 2 + docs/source_docs/files/functions_0x61.html | 56 +- docs/source_docs/files/functions_0x63.html | 74 +- docs/source_docs/files/functions_0x64.html | 25 +- docs/source_docs/files/functions_0x66.html | 19 +- docs/source_docs/files/functions_0x67.html | 243 +- docs/source_docs/files/functions_0x69.html | 39 +- docs/source_docs/files/functions_0x6d.html | 14 +- docs/source_docs/files/functions_0x6e.html | 19 +- docs/source_docs/files/functions_0x6f.html | 59 +- docs/source_docs/files/functions_0x70.html | 56 +- docs/source_docs/files/functions_0x72.html | 76 +- docs/source_docs/files/functions_0x73.html | 70 +- docs/source_docs/files/functions_0x74.html | 72 +- docs/source_docs/files/functions_0x75.html | 25 +- docs/source_docs/files/functions_0x76.html | 17 +- docs/source_docs/files/functions_0x78.html | 13 +- docs/source_docs/files/functions_0x79.html | 7 +- docs/source_docs/files/functions_0x7e.html | 2 + docs/source_docs/files/functions_func.html | 12 +- docs/source_docs/files/functions_func_0x63.html | 69 +- docs/source_docs/files/functions_func_0x66.html | 10 +- docs/source_docs/files/functions_func_0x67.html | 207 +- docs/source_docs/files/functions_func_0x69.html | 13 +- docs/source_docs/files/functions_func_0x6f.html | 35 +- docs/source_docs/files/functions_func_0x70.html | 23 +- docs/source_docs/files/functions_func_0x72.html | 81 +- docs/source_docs/files/functions_func_0x73.html | 51 +- docs/source_docs/files/functions_func_0x75.html | 8 +- docs/source_docs/files/functions_func_0x7e.html | 2 + docs/source_docs/files/functions_vars_0x61.html | 6 +- docs/source_docs/files/functions_vars_0x63.html | 14 +- docs/source_docs/files/functions_vars_0x64.html | 8 +- docs/source_docs/files/functions_vars_0x66.html | 7 +- docs/source_docs/files/functions_vars_0x69.html | 5 + docs/source_docs/files/functions_vars_0x6d.html | 16 +- docs/source_docs/files/functions_vars_0x6e.html | 10 +- docs/source_docs/files/functions_vars_0x6f.html | 2 + docs/source_docs/files/functions_vars_0x70.html | 24 +- docs/source_docs/files/functions_vars_0x73.html | 12 +- docs/source_docs/files/functions_vars_0x74.html | 5 +- docs/source_docs/files/functions_vars_0x75.html | 19 +- docs/source_docs/files/functions_vars_0x76.html | 3 +- docs/source_docs/files/functions_vars_0x78.html | 13 +- docs/source_docs/files/functions_vars_0x79.html | 13 +- docs/source_docs/files/globals_0x6e.html | 10 +- docs/source_docs/files/globals_func_0x6e.html | 10 +- docs/source_docs/files/hierarchy.html | 17 +- docs/source_docs/files/namespace_nv_1_1_blast.html | 171 ++ docs/source_docs/files/namespacemembers_0x63.html | 4 + docs/source_docs/files/namespacemembers_0x67.html | 2 + .../files/namespacemembers_func_0x63.html | 4 + .../files/namespacemembers_func_0x67.html | 2 + ...1_blast_1_1_bond_generation_config-members.html | 1 + ...ct_nv_1_1_blast_1_1_bond_generation_config.html | 19 +- ...struct_nv_1_1_blast_1_1_chunk_info-members.html | 1 + .../files/struct_nv_1_1_blast_1_1_chunk_info.html | 17 + ...truct_nv_1_1_blast_1_1_convex_loop-members.html | 51 + .../files/struct_nv_1_1_blast_1_1_convex_loop.html | 79 + .../struct_nv_1_1_blast_1_1_cutout-members.html | 52 + .../files/struct_nv_1_1_blast_1_1_cutout.html | 96 + ...1_1_blast_1_1_cutout_configuration-members.html | 55 + ...ruct_nv_1_1_blast_1_1_cutout_configuration.html | 148 ++ ...t_nv_1_1_blast_1_1_cutout_set_impl-members.html | 65 + .../struct_nv_1_1_blast_1_1_cutout_set_impl.html | 430 ++++ .../struct_nv_1_1_blast_1_1_cutout_set_impl.png | Bin 0 -> 506 bytes ...v_1_1_blast_1_1_exporter_mesh_data-members.html | 2 +- ...struct_nv_1_1_blast_1_1_exporter_mesh_data.html | 6 +- .../struct_nv_1_1_blast_1_1_materials-members.html | 52 + .../files/struct_nv_1_1_blast_1_1_materials.html | 96 + ..._1_1_blast_1_1_noise_configuration-members.html | 54 + ...truct_nv_1_1_blast_1_1_noise_configuration.html | 131 + ...ruct_nv_1_1_blast_1_1_p_o_i_n_t2_d-members.html | 56 + .../struct_nv_1_1_blast_1_1_p_o_i_n_t2_d.html | 195 ++ .../struct_nv_1_1_blast_1_1_poly_vert-members.html | 52 + .../files/struct_nv_1_1_blast_1_1_poly_vert.html | 96 + ..._1_blast_1_1_slicing_configuration-members.html | 5 +- ...uct_nv_1_1_blast_1_1_slicing_configuration.html | 58 +- .../struct_nv_1_1_blast_1_1_triangle-members.html | 2 + .../files/struct_nv_1_1_blast_1_1_triangle.html | 44 + docs/source_docs/files/tree.html | 230 +- samples/SampleBase/blast/BlastModel.cpp | 170 +- samples/SampleBase/ui/CommonUIController.cpp | 2 +- samples/compiler/cmake/windows/SampleBase-AT.cmake | 2 +- sdk/compiler/cmake/NvBlastExtAuthoring.cmake | 5 +- sdk/compiler/cmake/modules/FindApexSDK.cmake | 211 +- .../cmake/modules/FindBoostMultiprecision.cmake | 1 + sdk/compiler/cmake/modules/FindCapnProtoSDK.cmake | 4 +- sdk/compiler/cmake/modules/FindFBXSDK.cmake | 4 +- sdk/compiler/cmake/modules/FindGoogleTestNV.cmake | 4 +- sdk/compiler/cmake/modules/FindPhysXSDK.cmake | 117 +- sdk/compiler/cmake/modules/FindPxSharedSDK.cmake | 34 +- .../authoring/include/NvBlastExtAuthoring.h | 53 +- .../include/NvBlastExtAuthoringBondGenerator.h | 4 +- .../authoring/include/NvBlastExtAuthoringCutout.h | 106 + .../include/NvBlastExtAuthoringFractureTool.h | 141 +- .../authoring/include/NvBlastExtAuthoringTypes.h | 8 + .../authoring/source/NvBlastExtAuthoring.cpp | 34 +- .../NvBlastExtAuthoringBondGeneratorImpl.cpp | 33 +- .../source/NvBlastExtAuthoringBondGeneratorImpl.h | 4 +- .../source/NvBlastExtAuthoringCutoutImpl.cpp | 2508 ++++++++++++++++++++ .../source/NvBlastExtAuthoringCutoutImpl.h | 129 + .../source/NvBlastExtAuthoringFractureToolImpl.cpp | 390 ++- .../source/NvBlastExtAuthoringFractureToolImpl.h | 63 +- .../source/NvBlastExtAuthoringMeshImpl.cpp | 83 +- .../authoring/source/NvBlastExtAuthoringMeshImpl.h | 12 +- .../source/NvBlastExtAuthoringTriangulator.cpp | 21 +- .../source/NvBlastExtAuthoringTriangulator.h | 11 + .../exporter/include/NvBlastExtExporter.h | 13 +- .../source/NvBlastExtExporterFbxWriter.cpp | 31 +- .../exporter/source/NvBlastExtExporterFbxWriter.h | 9 +- .../source/NvBlastExtExporterObjReader.cpp | 33 +- .../exporter/source/NvBlastExtExporterObjReader.h | 14 +- .../source/NvBlastExtExporterObjWriter.cpp | 107 +- .../exporter/source/NvBlastExtExporterObjWriter.h | 11 +- sdk/lowlevel/source/NvBlastActor.cpp | 53 +- sdk/lowlevel/source/NvBlastAsset.cpp | 8 +- test/compiler/cmake/BlastUnitTests.cmake | 7 + test/src/unit/AuthoringCutout.cpp | 410 ++++ .../src/ApexDestructibleObjExporter.cpp | 7 +- tools/AuthoringTool/src/AuthoringTool.cpp | 177 +- 252 files changed, 13343 insertions(+), 2791 deletions(-) create mode 100644 buildtools/packager/formic/LICENSE.txt delete mode 100644 buildtools/packman/win-bootstrap/fetch_file.cmd create mode 100644 buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd create mode 100644 docs/api_docs/files/_nv_blast_ext_authoring_cutout_8h-source.html create mode 100644 docs/api_docs/files/_nv_blast_ext_authoring_cutout_8h.html create mode 100644 docs/api_docs/files/class_nv_1_1_blast_1_1_cutout_set-members.html create mode 100644 docs/api_docs/files/class_nv_1_1_blast_1_1_cutout_set.html create mode 100644 docs/api_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration-members.html create mode 100644 docs/api_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration.html create mode 100644 docs/api_docs/files/struct_nv_1_1_blast_1_1_materials-members.html create mode 100644 docs/api_docs/files/struct_nv_1_1_blast_1_1_materials.html create mode 100644 docs/api_docs/files/struct_nv_1_1_blast_1_1_noise_configuration-members.html create mode 100644 docs/api_docs/files/struct_nv_1_1_blast_1_1_noise_configuration.html create mode 100644 docs/source_docs/files/_nv_blast_ext_authoring_cutout_8h-source.html create mode 100644 docs/source_docs/files/_nv_blast_ext_authoring_cutout_8h.html create mode 100644 docs/source_docs/files/_nv_blast_ext_authoring_cutout_impl_8h-source.html create mode 100644 docs/source_docs/files/_nv_blast_ext_authoring_cutout_impl_8h.html create mode 100644 docs/source_docs/files/class_nv_1_1_blast_1_1_cutout_set-members.html create mode 100644 docs/source_docs/files/class_nv_1_1_blast_1_1_cutout_set.html create mode 100644 docs/source_docs/files/class_nv_1_1_blast_1_1_cutout_set.png create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.png create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_materials-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_materials.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert-members.html create mode 100644 docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert.html create mode 100644 sdk/extensions/authoring/include/NvBlastExtAuthoringCutout.h create mode 100644 sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.cpp create mode 100644 sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h create mode 100644 test/src/unit/AuthoringCutout.cpp diff --git a/README.md b/README.md index 1181cac..4ec6aa1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Blast 1.1.1 +Blast 1.1.2 =========== ![Alt text](/images/blast.png?raw=true "Blast Intro") @@ -93,8 +93,8 @@ applications. Unreal Engine 4 Plugin ---------------------- -4.17 branch: https://github.com/NvPhysX/UnrealEngine/tree/Blast-4.17 -4.18 branch: https://github.com/NvPhysX/UnrealEngine/tree/Blast-4.18 +UE4.17.2: https://github.com/NvPhysX/UnrealEngine/tree/Blast-4.17 +UE4.18.0: https://github.com/NvPhysX/UnrealEngine/tree/Blast-4.18 UE4 github access is required to access this repo, more info: https://developer.nvidia.com/nvidia-gameworks-and-ue4 diff --git a/blast_tools_and_samples-windows.zip b/blast_tools_and_samples-windows.zip index 1806c57..d3d0e9f 100644 Binary files a/blast_tools_and_samples-windows.zip and b/blast_tools_and_samples-windows.zip differ diff --git a/buildtools/packager/formic/LICENSE.txt b/buildtools/packager/formic/LICENSE.txt new file mode 100644 index 0000000..39b0004 --- /dev/null +++ b/buildtools/packager/formic/LICENSE.txt @@ -0,0 +1,619 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. diff --git a/buildtools/packman/packman b/buildtools/packman/packman index 6ab322c..a423f8a 100755 --- a/buildtools/packman/packman +++ b/buildtools/packman/packman @@ -1,12 +1,15 @@ -#!/bin/sh +#!/bin/bash -PM_PACKMAN_VERSION=4.0-rc3 +PM_PACKMAN_VERSION=4.0.1 # Specify where configuration file could exist -export PM_CONFIG_PATH=$(dirname "$0")/packman_config.txt +export PM_CONFIG_PATH=$(dirname ${BASH_SOURCE})/packman_config.txt # The packages root may already be configured by the user if [ -z "$PM_PACKAGES_ROOT" ]; then + # Set variable permanently using .profile for this user + echo "export PM_PACKAGES_ROOT=\$HOME/packman-repo" >> ~/.profile + # Set variable temporarily in this process so that the following execution will work export PM_PACKAGES_ROOT="${HOME}/packman-repo" fi @@ -54,4 +57,18 @@ if [ ! -f "$PM_MODULE" ]; then fi fi -python "$PM_MODULE" $* +# Generate temporary file name for environment variables: +PM_VAR_PATH=`mktemp -u -t tmp.XXXXX.$$.pmvars` + +python "$PM_MODULE" $* --var-path="$PM_VAR_PATH" + +# Export the variables if the file was used and remove the file: +if [ -f "$PM_VAR_PATH" ]; then + while read -r line + do + if [ ${#line} -gt 0 ]; then + export "$line" + fi + done < "$PM_VAR_PATH" + rm -f "$PM_VAR_PATH" +fi diff --git a/buildtools/packman/packman.cmd b/buildtools/packman/packman.cmd index a17027e..03e2cf8 100644 --- a/buildtools/packman/packman.cmd +++ b/buildtools/packman/packman.cmd @@ -7,7 +7,21 @@ @if not defined PM_PYTHON goto :PYTHON_ENV_ERROR @if not defined PM_MODULE goto :MODULE_ENV_ERROR -@"%PM_PYTHON%" "%PM_MODULE%" %* +:: Generate temporary path for variable file +:TEMP_VAR_PATH_LOOP +@set "PM_VAR_PATH=%tmp%\tmp.%RANDOM%.pmvars" +@if exist "%PM_VAR_PATH%" goto :TEMP_VAR_PATH_LOOP + +@"%PM_PYTHON%" "%PM_MODULE%" %* --var-path="%PM_VAR_PATH%" +@if errorlevel 1 goto :eof + +:: Marshall environment variables into the current environment if they have been generated and remove temporary file +@if exist "%PM_VAR_PATH%" ( + @for /F "usebackq tokens=*" %%A in ("%PM_VAR_PATH%") do @set "%%A" + @if errorlevel 1 goto :VAR_ERROR + @del /F "%PM_VAR_PATH%" +) +@set PM_VAR_PATH= @goto :eof :: Subroutines below @@ -19,5 +33,9 @@ @echo User environment variable PM_MODULE is not set! Please configure machine for packman or call configure.bat. @exit /b 1 +:VAR_ERROR +@echo Error while processing and setting environment variables! +@exit /b 1 + :RESET_ERROR @exit /b 0 \ No newline at end of file diff --git a/buildtools/packman/packmanapi.py b/buildtools/packman/packmanapi.py index 45ea711..6475f9d 100644 --- a/buildtools/packman/packmanapi.py +++ b/buildtools/packman/packmanapi.py @@ -4,7 +4,7 @@ import sys def get_packman_module_dir(): root_dir = os.environ['PM_PACKAGES_ROOT'] - common_dir = '4.0-rc3-common' + common_dir = '4.0.1-common' module_dir = os.path.join(root_dir, 'packman', common_dir) return module_dir diff --git a/buildtools/packman/win-bootstrap/configure.bat b/buildtools/packman/win-bootstrap/configure.bat index 8f3d7b8..7963ac2 100644 --- a/buildtools/packman/win-bootstrap/configure.bat +++ b/buildtools/packman/win-bootstrap/configure.bat @@ -1,4 +1,4 @@ -@set PM_PACKMAN_VERSION=4.0-rc3 +@set PM_PACKMAN_VERSION=4.0.1 :: Specify where config file could exist @set PM_CONFIG_PATH=%~dp0..\packman_config.txt @@ -45,7 +45,7 @@ @set PM_PYTHON_PACKAGE=python@2.7.6-windows-x86.exe @for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a @set TARGET=%TEMP_FILE_NAME%.exe -@call "%~dp0fetch_file.cmd" s3 %PM_PYTHON_PACKAGE% UNUSED_BOGUS_GUID %TARGET% +@call "%~dp0fetch_file_from_s3.cmd" %PM_PYTHON_PACKAGE% %TARGET% @if errorlevel 1 goto ERROR @echo Unpacking ... @@ -69,7 +69,7 @@ @set PM_MODULE_PACKAGE=packman@%PM_PACKMAN_VERSION%-common.zip @for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a @set TARGET=%TEMP_FILE_NAME% -@call "%~dp0fetch_file.cmd" s3 %PM_MODULE_PACKAGE% UNUSED_BOGUS_GUID %TARGET% +@call "%~dp0fetch_file_from_s3.cmd" %PM_MODULE_PACKAGE% %TARGET% @if errorlevel 1 goto ERROR @echo Unpacking ... diff --git a/buildtools/packman/win-bootstrap/fetch_file.cmd b/buildtools/packman/win-bootstrap/fetch_file.cmd deleted file mode 100644 index 298b6a0..0000000 --- a/buildtools/packman/win-bootstrap/fetch_file.cmd +++ /dev/null @@ -1,23 +0,0 @@ -:: You need to specify as input to this command - -@set PACKAGE_NAME=%2 -@set PACKAGE_GUID=%3 -@set TARGET=%4 - -@echo Fetching %PACKAGE_NAME% from %1 ... - -@if ["%1"] EQU ["s3"] set SOURCE_OPT=-sourceName %PACKAGE_NAME% -@if ["%1"] EQU ["gtl"] set SOURCE_OPT=-sourceGUID %PACKAGE_GUID% - -@powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0fetch_file_from_%1.ps1" %SOURCE_OPT% -output %TARGET% -:: A bug in powershell prevents the errorlevel code from being set when using the -File execution option -:: We must therefore do our own failure analysis, basically make sure the file exists and is larger than 0 bytes: -@if not exist %TARGET% goto ERROR_DOWNLOAD_FAILED -@if %~z4==0 goto ERROR_DOWNLOAD_FAILED - -@exit /b 0 - -:ERROR_DOWNLOAD_FAILED -@echo Failed to download file from %1 -@echo Most likely because endpoint cannot be reached (VPN connection down?) -@exit /b 1 \ No newline at end of file diff --git a/buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd b/buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd new file mode 100644 index 0000000..974d5ec --- /dev/null +++ b/buildtools/packman/win-bootstrap/fetch_file_from_s3.cmd @@ -0,0 +1,19 @@ +:: You need to specify as input to this command + +@set PACKAGE_NAME=%1 +@set TARGET=%2 + +@echo Fetching %PACKAGE_NAME% from s3 ... + +@powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0fetch_file_from_s3.ps1" -sourceName %PACKAGE_NAME% -output %TARGET% +:: A bug in powershell prevents the errorlevel code from being set when using the -File execution option +:: We must therefore do our own failure analysis, basically make sure the file exists and is larger than 0 bytes: +@if not exist %TARGET% goto ERROR_DOWNLOAD_FAILED +@if %~z2==0 goto ERROR_DOWNLOAD_FAILED + +@exit /b 0 + +:ERROR_DOWNLOAD_FAILED +@echo Failed to download file from %1 +@echo Most likely because endpoint cannot be reached (VPN connection down?) +@exit /b 1 \ No newline at end of file diff --git a/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 b/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 index e424058..fc588d9 100644 --- a/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 +++ b/buildtools/packman/win-bootstrap/fetch_file_from_s3.ps1 @@ -5,33 +5,56 @@ param( $source = "http://packman.s3.amazonaws.com/" + $sourceName $filename = $output -$req = [System.Net.httpwebrequest]::Create($source) -$req.cookiecontainer = New-Object System.net.CookieContainer +$triesLeft = 3 -Write-Host "Connecting to S3 ..." -$res = $req.GetResponse() +do +{ + $triesLeft -= 1 + $req = [System.Net.httpwebrequest]::Create($source) + $req.cookiecontainer = New-Object System.net.CookieContainer -if($res.StatusCode -eq "OK") { - Write-Host "Downloading ..." - [int]$goal = $res.ContentLength - $reader = $res.GetResponseStream() - $writer = new-object System.IO.FileStream $fileName, "Create" - [byte[]]$buffer = new-object byte[] 4096 - [int]$total = [int]$count = 0 - do - { - $count = $reader.Read($buffer, 0, $buffer.Length); - $writer.Write($buffer, 0, $count); - $total += $count - if($goal -gt 0) { - Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100) - } else { - Write-Progress "Downloading $url" "Saving $total bytes..." -id 0 + try + { + Write-Host "Connecting to S3 ..." + $res = $req.GetResponse() + if($res.StatusCode -eq "OK") { + Write-Host "Downloading ..." + [int]$goal = $res.ContentLength + $reader = $res.GetResponseStream() + $writer = new-object System.IO.FileStream $fileName, "Create" + [byte[]]$buffer = new-object byte[] 4096 + [int]$total = [int]$count = 0 + do + { + $count = $reader.Read($buffer, 0, $buffer.Length); + $writer.Write($buffer, 0, $count); + $total += $count + if($goal -gt 0) { + Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100) + } else { + Write-Progress "Downloading $url" "Saving $total bytes..." -id 0 + } + } while ($count -gt 0) + + $triesLeft = 0 + } } - } while ($count -gt 0) - - $reader.Close() - $writer.Flush() - $writer.Close() -} + catch + { + Write-Host "Error connecting to S3!" + Write-Host $_.Exception|format-list -force + } + finally + { + if ($reader) + { + $reader.Close() + } + if ($writer) + { + $writer.Flush() + $writer.Close() + } + } +} while ($triesLeft -gt 0) diff --git a/dependencies.xml b/dependencies.xml index b7a0f07..72fdcbe 100644 --- a/dependencies.xml +++ b/dependencies.xml @@ -18,44 +18,24 @@ - - - - - - - - - - - - - + - - - + - - - + - - - - + + - - - + diff --git a/docs/api_docs/files/_nv_blast_ext_authoring_8h-source.html b/docs/api_docs/files/_nv_blast_ext_authoring_8h-source.html index 9132e77..68e7d60 100644 --- a/docs/api_docs/files/_nv_blast_ext_authoring_8h-source.html +++ b/docs/api_docs/files/_nv_blast_ext_authoring_8h-source.html @@ -64,69 +64,83 @@ 00043 { 00044 class Mesh; 00045 class VoronoiSitesGenerator; -00046 class FractureTool; -00047 class ConvexMeshBuilder; -00048 class BlastBondGenerator; -00049 class MeshCleaner; -00050 struct CollisionParams; -00051 struct CollisionHull; -00052 } -00053 } -00054 -00055 struct NvBlastExtAssetUtilsBondDesc; -00056 -00070 NVBLAST_API Nv::Blast::Mesh* NvBlastExtAuthoringCreateMesh(const physx::PxVec3* positions, const physx::PxVec3* normals, -00071 const physx::PxVec2* uv, uint32_t verticesCount, const uint32_t* indices, uint32_t indicesCount); -00072 -00080 NVBLAST_API Nv::Blast::VoronoiSitesGenerator* NvBlastExtAuthoringCreateVoronoiSitesGenerator(Nv::Blast::Mesh* mesh, -00081 Nv::Blast::RandomGeneratorBase* rng); -00082 -00087 NVBLAST_API Nv::Blast::FractureTool* NvBlastExtAuthoringCreateFractureTool(); -00088 -00093 NVBLAST_API Nv::Blast::BlastBondGenerator* NvBlastExtAuthoringCreateBondGenerator(physx::PxCooking* cooking, -00094 physx::PxPhysicsInsertionCallback* insertionCallback); -00095 -00100 NVBLAST_API Nv::Blast::ConvexMeshBuilder* NvBlastExtAuthoringCreateConvexMeshBuilder(physx::PxCooking* cooking, -00101 physx::PxPhysicsInsertionCallback* insertionCallback); +00046 class CutoutSet; +00047 class FractureTool; +00048 class ConvexMeshBuilder; +00049 class BlastBondGenerator; +00050 class MeshCleaner; +00051 struct CollisionParams; +00052 struct CollisionHull; +00053 } +00054 } +00055 +00056 struct NvBlastExtAssetUtilsBondDesc; +00057 +00071 NVBLAST_API Nv::Blast::Mesh* NvBlastExtAuthoringCreateMesh(const physx::PxVec3* positions, const physx::PxVec3* normals, +00072 const physx::PxVec2* uv, uint32_t verticesCount, const uint32_t* indices, uint32_t indicesCount); +00073 +00087 NVBLAST_API Nv::Blast::Mesh* NvBlastExtAuthoringCreateMeshFromFacets(const void* vertices, const void* edges, const void* facets, +00088 uint32_t verticesCount, uint32_t edgesCount, uint32_t facetsCount); +00089 +00097 NVBLAST_API Nv::Blast::VoronoiSitesGenerator* NvBlastExtAuthoringCreateVoronoiSitesGenerator(Nv::Blast::Mesh* mesh, +00098 Nv::Blast::RandomGeneratorBase* rng); +00099 +00101 NVBLAST_API Nv::Blast::CutoutSet* NvBlastExtAuthoringCreateCutoutSet(); 00102 -00103 -00111 NVBLAST_API void NvBlastExtAuthoringTransformCollisionHullInPlace -00112 ( -00113 Nv::Blast::CollisionHull* hull, -00114 const physx::PxVec3* scaling, -00115 const physx::PxQuat* rotation, -00116 const physx::PxVec3* translation -00117 ); -00118 -00126 NVBLAST_API Nv::Blast::CollisionHull* NvBlastExtAuthoringTransformCollisionHull -00127 ( -00128 const Nv::Blast::CollisionHull* hull, -00129 const physx::PxVec3* scaling, -00130 const physx::PxQuat* rotation, -00131 const physx::PxVec3* translation -00132 ); +00118 NVBLAST_API void NvBlastExtAuthoringBuildCutoutSet(Nv::Blast::CutoutSet& cutoutSet, const uint8_t* pixelBuffer, +00119 uint32_t bufferWidth, uint32_t bufferHeight, float segmentationErrorThreshold, float snapThreshold, bool periodic, bool expandGaps); +00120 +00125 NVBLAST_API Nv::Blast::FractureTool* NvBlastExtAuthoringCreateFractureTool(); +00126 +00131 NVBLAST_API Nv::Blast::BlastBondGenerator* NvBlastExtAuthoringCreateBondGenerator(physx::PxCooking* cooking, +00132 physx::PxPhysicsInsertionCallback* insertionCallback); 00133 -00145 NVBLAST_API Nv::Blast::AuthoringResult* NvBlastExtAuthoringProcessFracture(Nv::Blast::FractureTool& fTool, -00146 Nv::Blast::BlastBondGenerator& bondGenerator, Nv::Blast::ConvexMeshBuilder& collisionBuilder, const Nv::Blast::CollisionParams& collisionParam, int32_t defaultSupportDepth = -1); -00147 -00148 -00153 NVBLAST_API Nv::Blast::MeshCleaner* NvBlastExtAuthoringCreateMeshCleaner(); -00154 -00155 +00138 NVBLAST_API Nv::Blast::ConvexMeshBuilder* NvBlastExtAuthoringCreateConvexMeshBuilder(physx::PxCooking* cooking, +00139 physx::PxPhysicsInsertionCallback* insertionCallback); +00140 +00141 +00149 NVBLAST_API void NvBlastExtAuthoringTransformCollisionHullInPlace +00150 ( +00151 Nv::Blast::CollisionHull* hull, +00152 const physx::PxVec3* scaling, +00153 const physx::PxQuat* rotation, +00154 const physx::PxVec3* translation +00155 ); 00156 -00179 NVBLAST_API uint32_t NvBlastExtAuthoringFindAssetConnectingBonds -00180 ( -00181 const NvBlastAsset** components, -00182 const physx::PxVec3* scales, -00183 const physx::PxQuat* rotations, -00184 const physx::PxVec3* translations, -00185 const uint32_t** convexHullOffsets, -00186 const Nv::Blast::CollisionHull*** chunkHulls, -00187 uint32_t componentCount, -00188 NvBlastExtAssetUtilsBondDesc*& newBondDescs -00189 ); -00190 -00191 #endif // ifndef NVBLASTAUTHORING_H +00164 NVBLAST_API Nv::Blast::CollisionHull* NvBlastExtAuthoringTransformCollisionHull +00165 ( +00166 const Nv::Blast::CollisionHull* hull, +00167 const physx::PxVec3* scaling, +00168 const physx::PxQuat* rotation, +00169 const physx::PxVec3* translation +00170 ); +00171 +00183 NVBLAST_API Nv::Blast::AuthoringResult* NvBlastExtAuthoringProcessFracture(Nv::Blast::FractureTool& fTool, +00184 Nv::Blast::BlastBondGenerator& bondGenerator, Nv::Blast::ConvexMeshBuilder& collisionBuilder, const Nv::Blast::CollisionParams& collisionParam, int32_t defaultSupportDepth = -1); +00185 +00192 NVBLAST_API void NvBlastExtUpdateGraphicsMesh(Nv::Blast::FractureTool& fTool, Nv::Blast::AuthoringResult& ares); +00193 +00194 +00195 +00196 +00201 NVBLAST_API Nv::Blast::MeshCleaner* NvBlastExtAuthoringCreateMeshCleaner(); +00202 +00203 +00204 +00227 NVBLAST_API uint32_t NvBlastExtAuthoringFindAssetConnectingBonds +00228 ( +00229 const NvBlastAsset** components, +00230 const physx::PxVec3* scales, +00231 const physx::PxQuat* rotations, +00232 const physx::PxVec3* translations, +00233 const uint32_t** convexHullOffsets, +00234 const Nv::Blast::CollisionHull*** chunkHulls, +00235 uint32_t componentCount, +00236 NvBlastExtAssetUtilsBondDesc*& newBondDescs, +00237 float maxSeparation = 0.0f +00238 ); +00239 +00240 #endif // ifndef NVBLASTAUTHORING_H +

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nv::Blast::Mesh* NvBlastExtAuthoringCreateMeshFromFacets (const void *  vertices,
const void *  edges,
const void *  facets,
uint32_t  verticesCount,
uint32_t  edgesCount,
uint32_t  facetsCount 
)
+
+
+ +

+Constructs mesh object from array of vertices, edges and facets. User should call release() after usage.

+

Parameters:
+ + + + + + + +
[in] vertices Array for Nv::Blast::Vertex
[in] edges Array for Nv::Blast::Edge
[in] facets Array for Nv::Blast::Facet
[in] verticesCount Number of vertices in mesh
[in] edgesCount Number of edges in mesh
[in] facetsCount Number of facets in mesh
+
+
Returns:
pointer to Nv::Blast::Mesh if it was created succefully otherwise return nullptr
+

@@ -256,7 +426,7 @@ Voronoi sites should not be generated outside of the fractured mesh, so VoronoiS

- +

@@ -306,7 +476,13 @@ Voronoi sites should not be generated outside of the fractured mesh, so VoronoiS - + + + + + + + @@ -331,7 +507,8 @@ NOTE: This function allocates memory using the allocator in NvBlastGlobals, to c - + +
NvBlastExtAssetUtilsBondDesc *&  newBondDescs  newBondDescs,
float  maxSeparation = 0.0f 
[in] convexHullOffsets For each component, an array of chunkSize+1 specifying the start of the convex hulls for that chunk inside the chunkHulls array for that component.
[in] chunkHulls For each component, an array of CollisionHull* specifying the collision geometry for the chunks in that component.
[in] componentCount The size of the components and relativeTransforms arrays.
[out] newBondDescs Descriptors of type NvBlastExtAssetUtilsBondDesc for new bonds between components.
[out] newBondDescs Descriptors of type NvBlastExtAssetUtilsBondDesc for new bonds between components.
[in] maxSeparation Maximal distance between chunks which can be connected by bond.
Returns:
the number of bonds in newBondDescs
@@ -492,6 +669,42 @@ Transforms collision hull in place using scale, rotation, transform.
+
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
void NvBlastExtUpdateGraphicsMesh (Nv::Blast::FractureTool fTool,
Nv::Blast::AuthoringResult ares 
)
+
+
+ +

+Updates graphics mesh only

+

Parameters:
+ + + +
[in] fTool Fracture tool created by NvBlastExtAuthoringCreateFractureTool
[out] ares AuthoringResult object which contains chunks, for which rendermeshes will be updated (e.g. to tweak UVs).
+
+

diff --git a/docs/api_docs/files/_nv_blast_ext_authoring_bond_generator_8h-source.html b/docs/api_docs/files/_nv_blast_ext_authoring_bond_generator_8h-source.html index 80d9e23..3f85041 100644 --- a/docs/api_docs/files/_nv_blast_ext_authoring_bond_generator_8h-source.html +++ b/docs/api_docs/files/_nv_blast_ext_authoring_bond_generator_8h-source.html @@ -73,53 +73,54 @@ 00052 class TriangleProcessor; 00053 struct PlaneChunkIndexer; 00054 -00060 struct BondGenerationConfig -00061 { -00062 enum BondGenMode { EXACT, AVERAGE }; -00063 BondGenMode bondMode; -00064 }; -00065 -00066 -00067 struct PlaneChunkIndexer -00068 { -00069 PlaneChunkIndexer(int32_t chunkId, int32_t trId, physx::PxPlane pl) : chunkId(chunkId), trId(trId), plane(pl) {} -00070 int32_t chunkId; -00071 int32_t trId; -00072 physx::PxPlane plane; -00073 }; -00074 -00075 -00080 class BlastBondGenerator -00081 { -00082 public: -00083 virtual ~BlastBondGenerator() {} -00084 -00088 virtual void release() = 0; -00089 -00099 virtual int32_t buildDescFromInternalFracture(FractureTool* tool, const bool* chunkIsSupport, -00100 NvBlastBondDesc*& resultBondDescs, NvBlastChunkDesc*& resultChunkDescriptors) = 0; -00101 -00102 -00113 virtual int32_t createBondBetweenMeshes(uint32_t meshACount, const Triangle* meshA, uint32_t meshBCount, const Triangle* meshB, -00114 NvBlastBond& resultBond, BondGenerationConfig conf = BondGenerationConfig()) = 0; -00115 -00130 virtual int32_t createBondBetweenMeshes(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry, -00131 uint32_t overlapsCount, const uint32_t* overlapsA, const uint32_t* overlapsB, -00132 NvBlastBondDesc*& resultBond, BondGenerationConfig cfg) = 0; -00133 -00134 -00148 virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry, -00149 const bool* chunkIsSupport, NvBlastBondDesc*& resultBondDescs, -00150 BondGenerationConfig conf = BondGenerationConfig()) = 0; -00151 -00166 virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* convexHullOffset, const CollisionHull** chunkHulls, -00167 const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs) = 0; -00168 }; -00169 -00170 } // namespace Blast -00171 } // namespace Nv -00172 -00173 #endif // NVBLASTEXTAUTHORINGBONDGENERATOR_H +00061 struct BondGenerationConfig +00062 { +00063 enum BondGenMode { EXACT, AVERAGE }; +00064 float maxSeparation; +00065 BondGenMode bondMode; +00066 }; +00067 +00068 +00069 struct PlaneChunkIndexer +00070 { +00071 PlaneChunkIndexer(int32_t chunkId, int32_t trId, physx::PxPlane pl) : chunkId(chunkId), trId(trId), plane(pl) {} +00072 int32_t chunkId; +00073 int32_t trId; +00074 physx::PxPlane plane; +00075 }; +00076 +00077 +00082 class BlastBondGenerator +00083 { +00084 public: +00085 virtual ~BlastBondGenerator() {} +00086 +00090 virtual void release() = 0; +00091 +00101 virtual int32_t buildDescFromInternalFracture(FractureTool* tool, const bool* chunkIsSupport, +00102 NvBlastBondDesc*& resultBondDescs, NvBlastChunkDesc*& resultChunkDescriptors) = 0; +00103 +00104 +00115 virtual int32_t createBondBetweenMeshes(uint32_t meshACount, const Triangle* meshA, uint32_t meshBCount, const Triangle* meshB, +00116 NvBlastBond& resultBond, BondGenerationConfig conf = BondGenerationConfig()) = 0; +00117 +00132 virtual int32_t createBondBetweenMeshes(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry, +00133 uint32_t overlapsCount, const uint32_t* overlapsA, const uint32_t* overlapsB, +00134 NvBlastBondDesc*& resultBond, BondGenerationConfig cfg) = 0; +00135 +00136 +00150 virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry, +00151 const bool* chunkIsSupport, NvBlastBondDesc*& resultBondDescs, +00152 BondGenerationConfig conf = BondGenerationConfig()) = 0; +00153 +00168 virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* convexHullOffset, const CollisionHull** chunkHulls, +00169 const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, float maxSeparation) = 0; +00170 }; +00171 +00172 } // namespace Blast +00173 } // namespace Nv +00174 +00175 #endif // NVBLASTEXTAUTHORINGBONDGENERATOR_H

+ + + + diff --git a/docs/api_docs/files/_nv_blast_ext_authoring_cutout_8h.html b/docs/api_docs/files/_nv_blast_ext_authoring_cutout_8h.html new file mode 100644 index 0000000..0165022 --- /dev/null +++ b/docs/api_docs/files/_nv_blast_ext_authoring_cutout_8h.html @@ -0,0 +1,43 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 API Reference: sdk/extensions/authoring/include/NvBlastExtAuthoringCutout.h File Reference + + + + + + + +
+

sdk/extensions/authoring/include/NvBlastExtAuthoringCutout.h File Reference

#include "NvBlastExtAuthoringTypes.h"
+ +

+Go to the source code of this file. + + + + + + + + + +

Classes

class  Nv::Blast::CutoutSet

Namespaces

namespace  Nv
namespace  Nv::Blast
+

+ + + + diff --git a/docs/api_docs/files/_nv_blast_ext_authoring_fracture_tool_8h-source.html b/docs/api_docs/files/_nv_blast_ext_authoring_fracture_tool_8h-source.html index 236c38c..e650986 100644 --- a/docs/api_docs/files/_nv_blast_ext_authoring_fracture_tool_8h-source.html +++ b/docs/api_docs/files/_nv_blast_ext_authoring_fracture_tool_8h-source.html @@ -60,135 +60,171 @@ 00039 class SpatialAccelerator; 00040 class Triangulator; 00041 class Mesh; -00042 -00043 /* -00044 Chunk data, chunk with chunkId == 0 is always source mesh. -00045 */ -00046 struct ChunkInfo -00047 { -00048 Mesh* meshData; -00049 int32_t parent; -00050 int32_t chunkId; -00051 bool isLeaf; -00052 }; -00053 -00054 -00055 /* -00056 Slicing fracturing configuration -00057 */ -00058 struct SlicingConfiguration -00059 { -00063 int32_t x_slices = 1, y_slices = 1, z_slices = 1; -00064 -00068 float offset_variations = 0.f; -00069 -00073 float angle_variations = 0.f; -00074 -00080 float noiseAmplitude = 0.f; -00081 -00085 float noiseFrequency = 1.f; -00086 -00090 uint32_t noiseOctaveNumber = 1; -00091 -00095 uint32_t surfaceResolution = 1; -00096 }; -00097 +00042 class CutoutSet; +00043 +00044 /* +00045 Chunk data, chunk with chunkId == 0 is always source mesh. +00046 */ +00047 struct ChunkInfo +00048 { +00049 Mesh* meshData; +00050 int32_t parent; +00051 int32_t chunkId; +00052 bool isLeaf; +00053 bool isChanged; +00054 }; +00055 +00056 /* +00057 Noise fracturing configuration for chunks's faces +00058 */ +00059 struct NoiseConfiguration +00060 { +00066 float amplitude = 0.f; +00067 +00071 float frequency = 1.f; +00072 +00076 uint32_t octaveNumber = 1; +00077 +00081 uint32_t surfaceResolution = 1; +00082 }; +00083 +00084 /* +00085 Slicing fracturing configuration +00086 */ +00087 struct SlicingConfiguration +00088 { +00092 int32_t x_slices = 1, y_slices = 1, z_slices = 1; +00093 +00097 float offset_variations = 0.f; 00098 -00102 class VoronoiSitesGenerator -00103 { -00104 public: -00105 virtual ~VoronoiSitesGenerator() {} -00106 -00110 virtual void release() = 0; -00111 -00115 virtual void setBaseMesh(const Mesh* mesh) = 0; -00116 -00122 virtual uint32_t getVoronoiSites(const physx::PxVec3*& sites) = 0; -00123 -00128 virtual void addSite(const physx::PxVec3& site) = 0; -00133 virtual void uniformlyGenerateSitesInMesh(uint32_t numberOfSites) = 0; -00134 -00141 virtual void clusteredSitesGeneration(uint32_t numberOfClusters, uint32_t sitesPerCluster, float clusterRadius) = 0; -00142 -00153 virtual void radialPattern(const physx::PxVec3& center, const physx::PxVec3& normal, float radius, int32_t angularSteps, int32_t radialSteps, float angleOffset = 0.0f, float variability = 0.0f) = 0; -00154 -00161 virtual void generateInSphere(const uint32_t count, const float radius, const physx::PxVec3& center) = 0; -00166 virtual void setStencil(const Mesh* stencil) = 0; -00170 virtual void clearStencil() = 0; -00171 -00178 virtual void deleteInSphere(const float radius, const physx::PxVec3& center, const float eraserProbability = 1) = 0; -00179 }; -00180 -00184 class FractureTool -00185 { -00186 -00187 public: -00188 virtual ~FractureTool() {} -00189 -00193 virtual void release() = 0; -00194 -00198 virtual void reset() = 0; -00199 -00200 -00204 virtual void setSourceMesh(const Mesh* mesh) = 0; -00205 -00209 virtual int32_t setChunkMesh(const Mesh* mesh, int32_t parentId) = 0; -00210 -00214 virtual void setInteriorMaterialId(int32_t materialId) = 0; -00215 -00219 virtual int32_t getInteriorMaterialId() const = 0; -00220 -00224 virtual void replaceMaterialId(int32_t oldMaterialId, int32_t newMaterialId) = 0; -00225 -00229 virtual Mesh* createChunkMesh(int32_t chunkId) = 0; -00230 -00235 virtual void getTransformation(physx::PxVec3& offset, float& scale) = 0; +00102 float angle_variations = 0.f; +00103 +00104 /* +00105 Noise parameters for faces between sliced chunks +00106 */ +00107 NoiseConfiguration noise; +00108 }; +00109 +00113 struct CutoutConfiguration +00114 { +00119 CutoutSet* cutoutSet = nullptr; +00120 +00125 physx::PxTransform transform = physx::PxTransform(physx::PxIdentity); +00126 +00131 physx::PxVec2 scale = physx::PxVec2(-1, -1); +00132 +00136 bool isRelativeTransform = true; +00137 +00141 NoiseConfiguration noise; +00142 }; +00143 +00147 class VoronoiSitesGenerator +00148 { +00149 public: +00150 virtual ~VoronoiSitesGenerator() {} +00151 +00155 virtual void release() = 0; +00156 +00160 virtual void setBaseMesh(const Mesh* mesh) = 0; +00161 +00167 virtual uint32_t getVoronoiSites(const physx::PxVec3*& sites) = 0; +00168 +00173 virtual void addSite(const physx::PxVec3& site) = 0; +00178 virtual void uniformlyGenerateSitesInMesh(uint32_t numberOfSites) = 0; +00179 +00186 virtual void clusteredSitesGeneration(uint32_t numberOfClusters, uint32_t sitesPerCluster, float clusterRadius) = 0; +00187 +00198 virtual void radialPattern(const physx::PxVec3& center, const physx::PxVec3& normal, float radius, int32_t angularSteps, int32_t radialSteps, float angleOffset = 0.0f, float variability = 0.0f) = 0; +00199 +00206 virtual void generateInSphere(const uint32_t count, const float radius, const physx::PxVec3& center) = 0; +00207 +00212 virtual void setStencil(const Mesh* stencil) = 0; +00213 +00217 virtual void clearStencil() = 0; +00218 +00225 virtual void deleteInSphere(const float radius, const physx::PxVec3& center, const float eraserProbability = 1) = 0; +00226 }; +00227 +00231 class FractureTool +00232 { +00233 +00234 public: +00235 virtual ~FractureTool() {} 00236 -00237 -00246 virtual int32_t voronoiFracturing(uint32_t chunkId, uint32_t cellCount, const physx::PxVec3* cellPoints, bool replaceChunk) = 0; -00247 -00259 virtual int32_t voronoiFracturing(uint32_t chunkId, uint32_t cellCount, const physx::PxVec3* cellPoints, const physx::PxVec3& scale, const physx::PxQuat& rotation, bool replaceChunk) = 0; -00260 -00261 -00272 virtual int32_t slicing(uint32_t chunkId, SlicingConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) = 0; -00273 -00274 -00278 virtual void finalizeFracturing() = 0; -00279 -00280 virtual uint32_t getChunkCount() const = 0; -00281 -00285 virtual const ChunkInfo& getChunkInfo(int32_t chunkIndex) = 0; -00286 -00294 virtual float getMeshOverlap(const Mesh& meshA, const Mesh& meshB) = 0; -00295 -00302 virtual uint32_t getBaseMesh(int32_t chunkIndex, Triangle*& output) = 0; -00303 -00309 virtual int32_t getChunkIndex(int32_t chunkId) = 0; -00310 -00316 virtual int32_t getChunkId(int32_t chunkIndex) = 0; -00317 -00323 virtual int32_t getChunkDepth(int32_t chunkId) = 0; -00324 -00331 virtual uint32_t getChunksIdAtDepth(uint32_t depth, int32_t*& chunkIds) = 0; -00332 -00333 -00343 virtual uint32_t getBufferedBaseMeshes(Vertex*& vertexBuffer, uint32_t*& indexBuffer, uint32_t*& indexBufferOffsets) = 0; -00344 -00349 virtual void setRemoveIslands(bool isRemoveIslands) = 0; -00350 -00356 virtual int32_t islandDetectionAndRemoving(int32_t chunkId) = 0; +00240 virtual void release() = 0; +00241 +00245 virtual void reset() = 0; +00246 +00247 +00251 virtual void setSourceMesh(const Mesh* mesh) = 0; +00252 +00256 virtual int32_t setChunkMesh(const Mesh* mesh, int32_t parentId) = 0; +00257 +00261 virtual void setInteriorMaterialId(int32_t materialId) = 0; +00262 +00266 virtual int32_t getInteriorMaterialId() const = 0; +00267 +00271 virtual void replaceMaterialId(int32_t oldMaterialId, int32_t newMaterialId) = 0; +00272 +00276 virtual Mesh* createChunkMesh(int32_t chunkId) = 0; +00277 +00282 virtual void getTransformation(physx::PxVec3& offset, float& scale) = 0; +00283 +00284 +00293 virtual int32_t voronoiFracturing(uint32_t chunkId, uint32_t cellCount, const physx::PxVec3* cellPoints, bool replaceChunk) = 0; +00294 +00306 virtual int32_t voronoiFracturing(uint32_t chunkId, uint32_t cellCount, const physx::PxVec3* cellPoints, const physx::PxVec3& scale, const physx::PxQuat& rotation, bool replaceChunk) = 0; +00307 +00308 +00319 virtual int32_t slicing(uint32_t chunkId, const SlicingConfiguration& conf, bool replaceChunk, RandomGeneratorBase* rnd) = 0; +00320 +00333 virtual int32_t cut(uint32_t chunkId, const physx::PxVec3& normal, const physx::PxVec3& position, const NoiseConfiguration& noise, bool replaceChunk, RandomGeneratorBase* rnd) = 0; +00334 +00345 virtual int32_t cutout(uint32_t chunkId, CutoutConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) = 0; +00346 +00347 +00351 virtual void finalizeFracturing() = 0; +00352 +00356 virtual uint32_t getChunkCount() const = 0; 00357 -00362 virtual bool isMeshContainOpenEdges(const Mesh* input) = 0; -00363 -00369 virtual bool deleteAllChildrenOfChunk(int32_t chunkId) = 0; -00370 -00371 virtual void uniteChunks(uint32_t maxAtLevel, uint32_t maxGroupSize) = 0; -00372 }; -00373 -00374 } // namespace Blast -00375 } // namespace Nv -00376 -00377 #endif // ifndef NVBLASTAUTHORINGFRACTURETOOL_H +00361 virtual const ChunkInfo& getChunkInfo(int32_t chunkIndex) = 0; +00362 +00370 virtual float getMeshOverlap(const Mesh& meshA, const Mesh& meshB) = 0; +00371 +00378 virtual uint32_t getBaseMesh(int32_t chunkIndex, Triangle*& output) = 0; +00379 +00387 virtual uint32_t updateBaseMesh(int32_t chunkIndex, Triangle* output) = 0; +00388 +00394 virtual int32_t getChunkIndex(int32_t chunkId) = 0; +00395 +00401 virtual int32_t getChunkId(int32_t chunkIndex) = 0; +00402 +00408 virtual int32_t getChunkDepth(int32_t chunkId) = 0; +00409 +00416 virtual uint32_t getChunksIdAtDepth(uint32_t depth, int32_t*& chunkIds) = 0; +00417 +00427 virtual uint32_t getBufferedBaseMeshes(Vertex*& vertexBuffer, uint32_t*& indexBuffer, uint32_t*& indexBufferOffsets) = 0; +00428 +00433 virtual void setRemoveIslands(bool isRemoveIslands) = 0; +00434 +00440 virtual int32_t islandDetectionAndRemoving(int32_t chunkId) = 0; +00441 +00446 virtual bool isMeshContainOpenEdges(const Mesh* input) = 0; +00447 +00453 virtual bool deleteAllChildrenOfChunk(int32_t chunkId) = 0; +00454 +00462 virtual void uniteChunks(uint32_t maxAtLevel, uint32_t maxGroupSize) = 0; +00463 +00469 virtual void fitUvToRect(float side, uint32_t chunkId) = 0; +00470 +00475 virtual void fitAllUvToRect(float side) = 0; +00476 +00477 }; +00478 +00479 } // namespace Blast +00480 } // namespace Nv +00481 +00482 #endif // ifndef NVBLASTAUTHORINGFRACTURETOOL_H

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual int32_t Nv::Blast::FractureTool::cutout (uint32_t  chunkId,
CutoutConfiguration  conf,
bool  replaceChunk,
RandomGeneratorBase rnd 
) [pure virtual]
+
+
+ +

+Cutout fracture for specified chunk.

Parameters:
+ + + + + +
[in] chunkId Chunk to fracture
[in] conf Cutout parameters, see CutoutConfiguration.
[in] replaceChunk if 'true', newly generated chunks will replace source chunk, if 'false', newly generated chunks will be at next depth level, source chunk will be parent for them. Case replaceChunk == true && chunkId == 0 considered as wrong input parameters
[in] rnd User supplied random number generator
+
+
Returns:
If 0, fracturing is successful.
+

@@ -171,6 +295,66 @@ Delete all children for specified chunk (also recursively delete chidren of chil

Creates resulting fractured mesh geometry from intermediate format + +

+ +

+
+ + + + + + + + + +
virtual void Nv::Blast::FractureTool::fitAllUvToRect (float  side  )  [pure virtual]
+
+
+ +

+Rescale interior uv coordinates of all existing chunks to fit square of given size, relative sizes will be preserved.

Parameters:
+ + +
[in] side Size of square side
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
virtual void Nv::Blast::FractureTool::fitUvToRect (float  side,
uint32_t  chunkId 
) [pure virtual]
+
+
+ +

+Rescale interior uv coordinates of given chunk to fit square of given size.

Parameters:
+ + + +
[in] side Size of square side
[in] chunkId Chunk ID for which UVs should be scaled.
+
+

@@ -268,7 +452,7 @@ Get result geometry without noise as vertex and index buffers, where index buffe

- +Returns overall number of chunks in fracture.

@@ -697,7 +881,7 @@ Set automatic islands removing. May cause instabilities.

Para Set input mesh which will be fractured, FractureTool will be reseted.

- +

@@ -710,7 +894,7 @@ Set input mesh which will be fractured, - + @@ -773,6 +957,49 @@ Fractures specified chunk with slicing method.
Parameters:

+Optimize chunk hierarhy for better runtime performance. It tries to unite chunks to groups of some size in order to transform flat hierarchy (all chunks are children of single root) to tree like hieracrhy with limited number of children for each chunk.

Parameters:
+
SlicingConfiguration const SlicingConfiguration conf,
+ + +
[in] maxAtLevel If number of children of some chunk less then maxAtLevel then it would be considered as already optimized and skipped.
[in] maxGroupSize Max number of children for processed chunks.
+
+ + +

+ +

+
+ + + + + + + + + + + + + + + + + + +
virtual uint32_t Nv::Blast::FractureTool::updateBaseMesh (int32_t  chunkIndex,
Triangle output 
) [pure virtual]
+
+
+ +

+Update chunk base mesh

Note:
Doesn't allocates output array, Triangle* output should be preallocated by user
+
Parameters:
+ + + +
[in] chunkIndex Chunk index
[out] output Array of triangles to be filled
+
+
Returns:
number of triangles in base mesh

diff --git a/docs/api_docs/files/class_nv_1_1_blast_1_1_i_mesh_file_writer-members.html b/docs/api_docs/files/class_nv_1_1_blast_1_1_i_mesh_file_writer-members.html index 96268eb..efc85ee 100644 --- a/docs/api_docs/files/class_nv_1_1_blast_1_1_i_mesh_file_writer-members.html +++ b/docs/api_docs/files/class_nv_1_1_blast_1_1_i_mesh_file_writer-members.html @@ -25,6 +25,7 @@ appendMesh(const ExporterMeshData &meshData, const char *assetName, bool nonSkinned=false)=0Nv::Blast::IMeshFileWriter [pure virtual] release()=0Nv::Blast::IMeshFileWriter [pure virtual] saveToFile(const char *assetName, const char *outputPath)=0Nv::Blast::IMeshFileWriter [pure virtual] + setInteriorIndex(int32_t index)=0Nv::Blast::IMeshFileWriter [pure virtual]

+ +

+
+ + + + + + + + + +
virtual void Nv::Blast::IMeshFileWriter::setInteriorIndex (int32_t  index  )  [pure virtual]
+
+
+ +

+Set material index for interior surface. By default new material will be created; +

+


The documentation for this class was generated from the following file: diff --git a/docs/api_docs/files/classes.html b/docs/api_docs/files/classes.html index ce5b939..d4eede6 100644 --- a/docs/api_docs/files/classes.html +++ b/docs/api_docs/files/classes.html @@ -23,22 +23,22 @@

Class Index

A | B | C | D | E | F | I | J | L | M | N | P | R | S | T | V

  A  
-
ExtPxAssetDesc (Nv::Blast)   IFbxFileReader (Nv::Blast)   NvBlastExtTriangleIntersectionDamageDesc   TkActor (Nv::Blast)   
Allocator (Nv::Blast)   ExtPxAssetDesc::ChunkDesc (Nv::Blast)   IMeshFileReader (Nv::Blast)   NvBlastFamily   TkActorData (Nv::Blast)   
AllocatorCallback (Nv::Blast)   ExtPxAssetDesc::SubchunkDesc (Nv::Blast)   IMeshFileWriter (Nv::Blast)   NvBlastFractureBuffers   TkActorDesc (Nv::Blast)   
ApexImporterConfig (Nv::Blast::ApexImporter)   ExtPxChunk (Nv::Blast)   
  J  
-
NvBlastGraphShaderActor   TkAsset (Nv::Blast)   
ApexImportTool (Nv::Blast::ApexImporter)   ExtPxFamily (Nv::Blast)   JsonCollisionExporter (Nv::Blast)   NvBlastID   TkAssetDesc (Nv::Blast)   
AuthoringResult (Nv::Blast)   ExtPxFamilyDesc (Nv::Blast)   
  L  
-
NvBlastMessage   TkAssetJointDesc (Nv::Blast)   
  B  
-
ExtPxListener (Nv::Blast)   LlObjectTypeID (Nv::Blast)   NvBlastSubgraphShaderActor   TkEvent (Nv::Blast)   
BlastBondGenerator (Nv::Blast)   ExtPxManager (Nv::Blast)   
  M  
-
NvBlastSupportGraph   TkEventListener (Nv::Blast)   
BondGenerationConfig (Nv::Blast)   ExtPxObjectTypeID (Nv::Blast)   Mesh (Nv::Blast)   NvBlastTimers   TkFamily (Nv::Blast)   
  C  
-
ExtPxShapeDescTemplate (Nv::Blast)   MeshCleaner (Nv::Blast)   NvcBounds3   TkFractureCommands (Nv::Blast)   
ChunkInfo (Nv::Blast)   ExtPxSpawnSettings (Nv::Blast)   
  N  
-
NvcMat33   TkFractureEvents (Nv::Blast)   
CollisionHull (Nv::Blast)   ExtPxStressSolver (Nv::Blast)   NvBlastActor   NvcMat34   TkFramework (Nv::Blast)   
CollisionHull::HullPolygon (Nv::Blast)   ExtPxSubchunk (Nv::Blast)   NvBlastActorDesc   NvcMat44   TkGroup (Nv::Blast)   
CollisionParams (Nv::Blast)   ExtSerialization (Nv::Blast)   NvBlastActorSplitEvent   NvcPlane   TkGroupDesc (Nv::Blast)   
ConvexMeshBuilder (Nv::Blast)   ExtSerialization::BufferProvider (Nv::Blast)   NvBlastAsset   NvcQuat   TkGroupStats (Nv::Blast)   
  D  
-
ExtSerialization::EncodingID (Nv::Blast)   NvBlastAssetDesc   NvcTransform   TkGroupWorker (Nv::Blast)   
DebugBuffer (Nv::Blast)   ExtStressSolver (Nv::Blast)   NvBlastBond   NvcVec2   TkIdentifiable (Nv::Blast)   
DebugLine (Nv::Blast)   ExtStressSolver::DebugBuffer (Nv::Blast)   NvBlastBondDesc   NvcVec2i   TkJoint (Nv::Blast)   
  E  
-
ExtStressSolver::DebugLine (Nv::Blast)   NvBlastBondFractureData   NvcVec3   TkJointData (Nv::Blast)   
Edge (Nv::Blast)   ExtStressSolverSettings (Nv::Blast)   NvBlastChunk   NvcVec3i   TkJointDesc (Nv::Blast)   
ErrorCallback (Nv::Blast)   ExtSync (Nv::Blast)   NvBlastChunkDesc   NvcVec4   TkJointUpdateEvent (Nv::Blast)   
ErrorCode (Nv::Blast)   ExtSyncEvent (Nv::Blast)   NvBlastChunkFractureData   NvcVec4i   TkObject (Nv::Blast)   
ExporterMeshData (Nv::Blast)   ExtSyncEventFamilySync (Nv::Blast)   NvBlastDamageProgram   
  P  
-
TkObjectTypeID (Nv::Blast)   
ExtCustomProfiler (Nv::Blast)   ExtSyncEventFracture (Nv::Blast)   NvBlastDataBlock   PlaneChunkIndexer (Nv::Blast)   TkSplitEvent (Nv::Blast)   
ExtForceMode (Nv::Blast)   ExtSyncEventInstance (Nv::Blast)   NvBlastExtAssetUtilsBondDesc   ProfilerCallback (Nv::Blast)   TkType (Nv::Blast)   
ExtGroupTaskManager (Nv::Blast)   ExtSyncEventPhysicsSync (Nv::Blast)   NvBlastExtCapsuleRadialDamageDesc   ProfilerDetail (Nv::Blast)   TkTypeIndex (Nv::Blast)   
ExtImpactDamageManager (Nv::Blast)   ExtSyncEventPhysicsSync::ActorData (Nv::Blast)   NvBlastExtDamageAccelerator   
  R  
-
Triangle (Nv::Blast)   
ExtImpactSettings (Nv::Blast)   ExtSyncEventType (Nv::Blast)   NvBlastExtImpactSpreadDamageDesc   RandomGeneratorBase (Nv::Blast)   TriangleIndexed (Nv::Blast)   
ExtProfileData (Nv::Blast)   
  F  
-
NvBlastExtMaterial   
  S  
-
  V  
-
ExtPxActor (Nv::Blast)   Facet (Nv::Blast)   NvBlastExtProgramParams   SlicingConfiguration (Nv::Blast)   Vertex (Nv::Blast)   
ExtPxActorDescTemplate (Nv::Blast)   FractureTool (Nv::Blast)   NvBlastExtRadialDamageDesc   
  T  
-
VoronoiSitesGenerator (Nv::Blast)   
ExtPxAsset (Nv::Blast)   
  I  
-
NvBlastExtShearDamageDesc   

A | B | C | D | E | F | I | J | L | M | N | P | R | S | T | V

+ExtPxAsset (Nv::Blast)   IFbxFileReader (Nv::Blast)   NvBlastExtRadialDamageDesc   
  T  
+Allocator (Nv::Blast)   ExtPxAssetDesc (Nv::Blast)   IMeshFileReader (Nv::Blast)   NvBlastExtShearDamageDesc   TkActor (Nv::Blast)   AllocatorCallback (Nv::Blast)   ExtPxAssetDesc::ChunkDesc (Nv::Blast)   IMeshFileWriter (Nv::Blast)   NvBlastExtTriangleIntersectionDamageDesc   TkActorData (Nv::Blast)   ApexImporterConfig (Nv::Blast::ApexImporter)   ExtPxAssetDesc::SubchunkDesc (Nv::Blast)   
  J  
+NvBlastFamily   TkActorDesc (Nv::Blast)   ApexImportTool (Nv::Blast::ApexImporter)   ExtPxChunk (Nv::Blast)   JsonCollisionExporter (Nv::Blast)   NvBlastFractureBuffers   TkAsset (Nv::Blast)   AuthoringResult (Nv::Blast)   ExtPxFamily (Nv::Blast)   
  L  
+NvBlastGraphShaderActor   TkAssetDesc (Nv::Blast)   
  B  
+ExtPxFamilyDesc (Nv::Blast)   LlObjectTypeID (Nv::Blast)   NvBlastID   TkAssetJointDesc (Nv::Blast)   BlastBondGenerator (Nv::Blast)   ExtPxListener (Nv::Blast)   
  M  
+NvBlastMessage   TkEvent (Nv::Blast)   BondGenerationConfig (Nv::Blast)   ExtPxManager (Nv::Blast)   Materials (Nv::Blast)   NvBlastSubgraphShaderActor   TkEventListener (Nv::Blast)   
  C  
+ExtPxObjectTypeID (Nv::Blast)   Mesh (Nv::Blast)   NvBlastSupportGraph   TkFamily (Nv::Blast)   ChunkInfo (Nv::Blast)   ExtPxShapeDescTemplate (Nv::Blast)   MeshCleaner (Nv::Blast)   NvBlastTimers   TkFractureCommands (Nv::Blast)   CollisionHull (Nv::Blast)   ExtPxSpawnSettings (Nv::Blast)   
  N  
+NvcBounds3   TkFractureEvents (Nv::Blast)   CollisionHull::HullPolygon (Nv::Blast)   ExtPxStressSolver (Nv::Blast)   NoiseConfiguration (Nv::Blast)   NvcMat33   TkFramework (Nv::Blast)   CollisionParams (Nv::Blast)   ExtPxSubchunk (Nv::Blast)   NvBlastActor   NvcMat34   TkGroup (Nv::Blast)   ConvexMeshBuilder (Nv::Blast)   ExtSerialization (Nv::Blast)   NvBlastActorDesc   NvcMat44   TkGroupDesc (Nv::Blast)   CutoutConfiguration (Nv::Blast)   ExtSerialization::BufferProvider (Nv::Blast)   NvBlastActorSplitEvent   NvcPlane   TkGroupStats (Nv::Blast)   CutoutSet (Nv::Blast)   ExtSerialization::EncodingID (Nv::Blast)   NvBlastAsset   NvcQuat   TkGroupWorker (Nv::Blast)   
  D  
+ExtStressSolver (Nv::Blast)   NvBlastAssetDesc   NvcTransform   TkIdentifiable (Nv::Blast)   DebugBuffer (Nv::Blast)   ExtStressSolver::DebugBuffer (Nv::Blast)   NvBlastBond   NvcVec2   TkJoint (Nv::Blast)   DebugLine (Nv::Blast)   ExtStressSolver::DebugLine (Nv::Blast)   NvBlastBondDesc   NvcVec2i   TkJointData (Nv::Blast)   
  E  
+ExtStressSolverSettings (Nv::Blast)   NvBlastBondFractureData   NvcVec3   TkJointDesc (Nv::Blast)   Edge (Nv::Blast)   ExtSync (Nv::Blast)   NvBlastChunk   NvcVec3i   TkJointUpdateEvent (Nv::Blast)   ErrorCallback (Nv::Blast)   ExtSyncEvent (Nv::Blast)   NvBlastChunkDesc   NvcVec4   TkObject (Nv::Blast)   ErrorCode (Nv::Blast)   ExtSyncEventFamilySync (Nv::Blast)   NvBlastChunkFractureData   NvcVec4i   TkObjectTypeID (Nv::Blast)   ExporterMeshData (Nv::Blast)   ExtSyncEventFracture (Nv::Blast)   NvBlastDamageProgram   
  P  
+TkSplitEvent (Nv::Blast)   ExtCustomProfiler (Nv::Blast)   ExtSyncEventInstance (Nv::Blast)   NvBlastDataBlock   PlaneChunkIndexer (Nv::Blast)   TkType (Nv::Blast)   ExtForceMode (Nv::Blast)   ExtSyncEventPhysicsSync (Nv::Blast)   NvBlastExtAssetUtilsBondDesc   ProfilerCallback (Nv::Blast)   TkTypeIndex (Nv::Blast)   ExtGroupTaskManager (Nv::Blast)   ExtSyncEventPhysicsSync::ActorData (Nv::Blast)   NvBlastExtCapsuleRadialDamageDesc   ProfilerDetail (Nv::Blast)   Triangle (Nv::Blast)   ExtImpactDamageManager (Nv::Blast)   ExtSyncEventType (Nv::Blast)   NvBlastExtDamageAccelerator   
  R  
+TriangleIndexed (Nv::Blast)   ExtImpactSettings (Nv::Blast)   
  F  
+NvBlastExtImpactSpreadDamageDesc   RandomGeneratorBase (Nv::Blast)   
  V  
+ExtProfileData (Nv::Blast)   Facet (Nv::Blast)   NvBlastExtMaterial   
  S  
+Vertex (Nv::Blast)   ExtPxActor (Nv::Blast)   FractureTool (Nv::Blast)   NvBlastExtProgramParams   SlicingConfiguration (Nv::Blast)   VoronoiSitesGenerator (Nv::Blast)   ExtPxActorDescTemplate (Nv::Blast)   
  I  
+

A | B | C | D | E | F | I | J | L | M | N | P | R | S | T | V

diff --git a/docs/api_docs/files/functions_0x64.html b/docs/api_docs/files/functions_0x64.html index 1d51045..2bfe6c2 100644 --- a/docs/api_docs/files/functions_0x64.html +++ b/docs/api_docs/files/functions_0x64.html @@ -92,13 +92,13 @@ Here is a list of all class members with links to the classes they belong to:
  • dataType : NvBlastDataBlock
  • deallocate() -: Nv::Blast::AllocatorCallback -, Nv::Blast::Allocator +: Nv::Blast::Allocator +, Nv::Blast::AllocatorCallback
  • Debug : NvBlastMessage
  • DebugLine() -: Nv::Blast::ExtStressSolver::ExtStressSolver::DebugLine -, Nv::Blast::DebugLine +: Nv::Blast::DebugLine +, Nv::Blast::ExtStressSolver::ExtStressSolver::DebugLine
  • DebugRenderMode : Nv::Blast::ExtStressSolver
  • deleteAllChildrenOfChunk() @@ -115,6 +115,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtPxFamily
  • destroyJoint() : Nv::Blast::ExtPxManager +
  • diffuse_tex +: Nv::Blast::Materials diff --git a/docs/api_docs/files/functions_0x66.html b/docs/api_docs/files/functions_0x66.html index 33bc41f..b1919c0 100644 --- a/docs/api_docs/files/functions_0x66.html +++ b/docs/api_docs/files/functions_0x66.html @@ -101,25 +101,31 @@ Here is a list of all class members with links to the classes they belong to: : NvBlastGraphShaderActor
  • firstSubchunkIndex : Nv::Blast::ExtPxChunk +
  • fitAllUvToRect() +: Nv::Blast::FractureTool +
  • fitUvToRect() +: Nv::Blast::FractureTool
  • flags -: Nv::Blast::ExtPxActorDescTemplate +: NvBlastChunkDesc
  • Flags : NvBlastChunkDesc
  • flags : Nv::Blast::ExtPxShapeDescTemplate -, NvBlastChunkDesc +, Nv::Blast::ExtPxActorDescTemplate
  • FORCED : Nv::Blast::ApexImporter::ApexImporterConfig
  • formatVersion : NvBlastDataBlock -
  • fracture -: NvBlastTimers
  • Fracture : Nv::Blast::ExtSyncEventType +
  • fracture +: NvBlastTimers
  • FractureCommand : Nv::Blast::TkEvent
  • FractureEvent : Nv::Blast::TkEvent +
  • frequency +: Nv::Blast::NoiseConfiguration diff --git a/docs/api_docs/files/functions_0x67.html b/docs/api_docs/files/functions_0x67.html index 264dd86..34224c9 100644 --- a/docs/api_docs/files/functions_0x67.html +++ b/docs/api_docs/files/functions_0x67.html @@ -140,12 +140,28 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::IMeshFileReader
  • getCollisionGeometry() : Nv::Blast::ApexImporter::ApexImportTool +
  • getCutoutCount() +: Nv::Blast::CutoutSet +
  • getCutoutLoopCount() +: Nv::Blast::CutoutSet +
  • getCutoutLoopSize() +: Nv::Blast::CutoutSet +
  • getCutoutLoopVertexFlags() +: Nv::Blast::CutoutSet +
  • getCutoutLoopVertexIndex() +: Nv::Blast::CutoutSet +
  • getCutoutVertex() +: Nv::Blast::CutoutSet +
  • getCutoutVertexCount() +: Nv::Blast::CutoutSet
  • getData() : Nv::Blast::TkJoint
  • getDataSize() : Nv::Blast::TkAsset
  • getDefaultActorDesc() : Nv::Blast::ExtPxAsset +
  • getDimensions() +: Nv::Blast::CutoutSet
  • getEdges() : Nv::Blast::Mesh
  • getEdgesCount() @@ -294,6 +310,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::IMeshFileReader
  • getVersion() : Nv::Blast::TkType +
  • getVertex() +: Nv::Blast::Triangle
  • getVertices() : Nv::Blast::Mesh
  • getVerticesCount() @@ -317,10 +335,10 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtStressSolverSettings
  • graphShaderFunction : NvBlastDamageProgram -
  • group -: Nv::Blast::ExtPxFamilyDesc
  • Group : Nv::Blast::TkTypeIndex +
  • group +: Nv::Blast::ExtPxFamilyDesc diff --git a/docs/api_docs/files/functions_0x69.html b/docs/api_docs/files/functions_0x69.html index d6ceb2d..4314070 100644 --- a/docs/api_docs/files/functions_0x69.html +++ b/docs/api_docs/files/functions_0x69.html @@ -82,6 +82,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ApexImporter::ApexImporterConfig
  • isBoundToWorld() : Nv::Blast::TkActor +
  • isChanged +: Nv::Blast::ChunkInfo
  • isCollisionLoaded() : Nv::Blast::IMeshFileReader
  • isContainEdge() @@ -96,13 +98,17 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::FractureTool
  • isPending() : Nv::Blast::TkActor +
  • isPeriodic() +: Nv::Blast::CutoutSet
  • isPxUserDataUsed() : Nv::Blast::ExtPxManager +
  • isRelativeTransform +: Nv::Blast::CutoutConfiguration
  • isSelfCollissionEnabled : Nv::Blast::ExtImpactSettings
  • isStatic -: Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::ChunkDesc -, Nv::Blast::ExtPxChunk +: Nv::Blast::ExtPxChunk +, Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::ChunkDesc
  • isValid() : Nv::Blast::ApexImporter::ApexImportTool , Nv::Blast::Mesh diff --git a/docs/api_docs/files/functions_0x6d.html b/docs/api_docs/files/functions_0x6d.html index ade7ac5..e7e0dde 100644 --- a/docs/api_docs/files/functions_0x6d.html +++ b/docs/api_docs/files/functions_0x6d.html @@ -87,6 +87,8 @@ Here is a list of all class members with links to the classes they belong to: , NvBlastExtRadialDamageDesc , NvBlastExtCapsuleRadialDamageDesc , NvBlastExtShearDamageDesc +
  • maxSeparation +: Nv::Blast::BondGenerationConfig
  • MEDIUM : Nv::Blast::ProfilerDetail
  • meshCount @@ -102,8 +104,8 @@ Here is a list of all class members with links to the classes they belong to:
  • minRadius : NvBlastExtImpactSpreadDamageDesc , NvBlastExtShearDamageDesc -, NvBlastExtRadialDamageDesc , NvBlastExtCapsuleRadialDamageDesc +, NvBlastExtRadialDamageDesc
  • mNbVerts : Nv::Blast::CollisionHull::CollisionHull::HullPolygon
  • MODE_COUNT diff --git a/docs/api_docs/files/functions_0x6e.html b/docs/api_docs/files/functions_0x6e.html index eff9f45..78be989 100644 --- a/docs/api_docs/files/functions_0x6e.html +++ b/docs/api_docs/files/functions_0x6e.html @@ -67,6 +67,7 @@ Here is a list of all class members with links to the classes they belong to: , NvcPlane
  • name : Nv::Blast::ExtProfileData +, Nv::Blast::Materials
  • newActors : NvBlastActorSplitEvent
  • nodeActorIndices @@ -82,12 +83,9 @@ Here is a list of all class members with links to the classes they belong to:
  • NoFlags : NvBlastChunkDesc , Nv::Blast::TkAssetDesc -
  • noiseAmplitude -: Nv::Blast::SlicingConfiguration -
  • noiseFrequency -: Nv::Blast::SlicingConfiguration -
  • noiseOctaveNumber -: Nv::Blast::SlicingConfiguration +
  • noise +: Nv::Blast::SlicingConfiguration +, Nv::Blast::CutoutConfiguration
  • normal : NvBlastExtShearDamageDesc , NvBlastBond diff --git a/docs/api_docs/files/functions_0x6f.html b/docs/api_docs/files/functions_0x6f.html index bae26d0..6f6cbf4 100644 --- a/docs/api_docs/files/functions_0x6f.html +++ b/docs/api_docs/files/functions_0x6f.html @@ -62,6 +62,8 @@ Here is a list of all class members with links to the classes they belong to:

    - o -

    diff --git a/docs/api_docs/files/functions_0x74.html b/docs/api_docs/files/functions_0x74.html index e69a69f..33a5d71 100644 --- a/docs/api_docs/files/functions_0x74.html +++ b/docs/api_docs/files/functions_0x74.html @@ -78,7 +78,8 @@ Here is a list of all class members with links to the classes they belong to:
  • TkObject() : Nv::Blast::TkObject
  • transform -: Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::SubchunkDesc +: Nv::Blast::CutoutConfiguration +, Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::SubchunkDesc , Nv::Blast::ExtPxSubchunk , Nv::Blast::ExtSyncEventPhysicsSync::ExtSyncEventPhysicsSync::ActorData
  • Triangle() @@ -90,17 +91,16 @@ Here is a list of all class members with links to the classes they belong to:
  • trimCollisionGeometry() : Nv::Blast::ConvexMeshBuilder
  • Type -: NvBlastDataBlock +: Nv::Blast::TkEvent +, NvBlastMessage
  • type : Nv::Blast::TkEvent +, Nv::Blast::ExtSyncEvent
  • Type -: NvBlastMessage -, Nv::Blast::TkEvent -
  • type -: Nv::Blast::ExtSyncEvent +: NvBlastDataBlock
  • TypeCount -: Nv::Blast::TkTypeIndex -, Nv::Blast::TkEvent +: Nv::Blast::TkEvent +, Nv::Blast::TkTypeIndex diff --git a/docs/api_docs/files/functions_0x75.html b/docs/api_docs/files/functions_0x75.html index 367db34..052a5f2 100644 --- a/docs/api_docs/files/functions_0x75.html +++ b/docs/api_docs/files/functions_0x75.html @@ -78,23 +78,23 @@ Here is a list of all class members with links to the classes they belong to:
  • update() : Nv::Blast::ExtPxStressSolver , Nv::Blast::ExtStressSolver +
  • updateBaseMesh() +: Nv::Blast::FractureTool
  • userData -: Nv::Blast::TkObject +: NvBlastChunk , NvBlastBond -, NvBlastChunk , Nv::Blast::ExtPxFamily +, Nv::Blast::ExtPxAsset +, Nv::Blast::Facet , NvBlastChunkDesc -, Nv::Blast::TkActorData -, Nv::Blast::TriangleIndexed , Nv::Blast::Triangle +, Nv::Blast::TkActorData +, Nv::Blast::TkObject
  • userdata : NvBlastChunkFractureData +, NvBlastBondFractureData
  • userData -: Nv::Blast::Facet -
  • userdata -: NvBlastBondFractureData -
  • userData -: Nv::Blast::ExtPxAsset +: Nv::Blast::TriangleIndexed
  • userIntData : Nv::Blast::TkIdentifiable
  • uv diff --git a/docs/api_docs/files/functions_0x7e.html b/docs/api_docs/files/functions_0x7e.html index bfd6cc1..674e72e 100644 --- a/docs/api_docs/files/functions_0x7e.html +++ b/docs/api_docs/files/functions_0x7e.html @@ -72,6 +72,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::BlastBondGenerator
  • ~ConvexMeshBuilder() : Nv::Blast::ConvexMeshBuilder +
  • ~CutoutSet() +: Nv::Blast::CutoutSet
  • ~ErrorCallback() : Nv::Blast::ErrorCallback
  • ~ExtGroupTaskManager() diff --git a/docs/api_docs/files/functions_func_0x63.html b/docs/api_docs/files/functions_func_0x63.html index 4e5b523..b39485a 100644 --- a/docs/api_docs/files/functions_func_0x63.html +++ b/docs/api_docs/files/functions_func_0x63.html @@ -75,16 +75,15 @@ , Nv::Blast::ExtSync , Nv::Blast::ExtStressSolver , Nv::Blast::ExtPxAsset -, Nv::Blast::ExtGroupTaskManager -, Nv::Blast::ExtPxAsset , Nv::Blast::ExtPxManager , Nv::Blast::ExtPxStressSolver +, Nv::Blast::ExtGroupTaskManager
  • createActor() : Nv::Blast::TkFramework
  • createAsset() : Nv::Blast::TkFramework
  • createBondBetweenMeshes() -: Nv::Blast::BlastBondGenerator +: Nv::Blast::BlastBondGenerator
  • createChunkMesh() : Nv::Blast::FractureTool
  • createFamily() @@ -92,8 +91,12 @@
  • createGroup() : Nv::Blast::TkFramework
  • createJoint() -: Nv::Blast::ExtPxManager -, Nv::Blast::TkFramework +: Nv::Blast::TkFramework +, Nv::Blast::ExtPxManager +
  • cut() +: Nv::Blast::FractureTool +
  • cutout() +: Nv::Blast::FractureTool diff --git a/docs/api_docs/files/functions_func_0x66.html b/docs/api_docs/files/functions_func_0x66.html index 1a3a8eb..4d3002a 100644 --- a/docs/api_docs/files/functions_func_0x66.html +++ b/docs/api_docs/files/functions_func_0x66.html @@ -68,6 +68,10 @@ : Nv::Blast::FractureTool
  • findObjectByID() : Nv::Blast::TkFramework +
  • fitAllUvToRect() +: Nv::Blast::FractureTool +
  • fitUvToRect() +: Nv::Blast::FractureTool diff --git a/docs/api_docs/files/functions_func_0x67.html b/docs/api_docs/files/functions_func_0x67.html index 7738c7f..68cab15 100644 --- a/docs/api_docs/files/functions_func_0x67.html +++ b/docs/api_docs/files/functions_func_0x67.html @@ -129,12 +129,28 @@ : Nv::Blast::IMeshFileReader
  • getCollisionGeometry() : Nv::Blast::ApexImporter::ApexImportTool +
  • getCutoutCount() +: Nv::Blast::CutoutSet +
  • getCutoutLoopCount() +: Nv::Blast::CutoutSet +
  • getCutoutLoopSize() +: Nv::Blast::CutoutSet +
  • getCutoutLoopVertexFlags() +: Nv::Blast::CutoutSet +
  • getCutoutLoopVertexIndex() +: Nv::Blast::CutoutSet +
  • getCutoutVertex() +: Nv::Blast::CutoutSet +
  • getCutoutVertexCount() +: Nv::Blast::CutoutSet
  • getData() : Nv::Blast::TkJoint
  • getDataSize() : Nv::Blast::TkAsset
  • getDefaultActorDesc() : Nv::Blast::ExtPxAsset +
  • getDimensions() +: Nv::Blast::CutoutSet
  • getEdges() : Nv::Blast::Mesh
  • getEdgesCount() @@ -283,6 +299,8 @@ : Nv::Blast::IMeshFileReader
  • getVersion() : Nv::Blast::TkType +
  • getVertex() +: Nv::Blast::Triangle
  • getVertices() : Nv::Blast::Mesh
  • getVerticesCount() diff --git a/docs/api_docs/files/functions_func_0x69.html b/docs/api_docs/files/functions_func_0x69.html index 49477ba..4efffc3 100644 --- a/docs/api_docs/files/functions_func_0x69.html +++ b/docs/api_docs/files/functions_func_0x69.html @@ -73,6 +73,8 @@ : Nv::Blast::FractureTool
  • isPending() : Nv::Blast::TkActor +
  • isPeriodic() +: Nv::Blast::CutoutSet
  • isPxUserDataUsed() : Nv::Blast::ExtPxManager
  • isValid() diff --git a/docs/api_docs/files/functions_func_0x72.html b/docs/api_docs/files/functions_func_0x72.html index bffc806..09224de 100644 --- a/docs/api_docs/files/functions_func_0x72.html +++ b/docs/api_docs/files/functions_func_0x72.html @@ -67,28 +67,29 @@
  • reinitialize() : Nv::Blast::TkFamily
  • release() -: Nv::Blast::VoronoiSitesGenerator +: Nv::Blast::CutoutSet +, Nv::Blast::ExtImpactDamageManager , Nv::Blast::ExtPxAsset +, Nv::Blast::VoronoiSitesGenerator , Nv::Blast::ExtPxFamily -, Nv::Blast::FractureTool , Nv::Blast::ExtPxManager +, Nv::Blast::FractureTool , Nv::Blast::ExtPxStressSolver -, Nv::Blast::Mesh -, Nv::Blast::ExtGroupTaskManager , Nv::Blast::TkObject , Nv::Blast::TkFramework , Nv::Blast::ExtStressSolver +, NvBlastExtDamageAccelerator +, Nv::Blast::ExtGroupTaskManager +, Nv::Blast::Mesh , Nv::Blast::ExtSyncEvent -, Nv::Blast::MeshCleaner , Nv::Blast::ExtSync -, Nv::Blast::ExtSerialization , Nv::Blast::BlastBondGenerator +, Nv::Blast::MeshCleaner +, Nv::Blast::ExtSerialization , Nv::Blast::AuthoringResult -, NvBlastExtDamageAccelerator -, Nv::Blast::IMeshFileReader , Nv::Blast::ConvexMeshBuilder +, Nv::Blast::IMeshFileReader , Nv::Blast::IMeshFileWriter -, Nv::Blast::ExtImpactDamageManager
  • releaseCollisionHulls() : Nv::Blast::AuthoringResult
  • releaseSyncBuffer() @@ -107,8 +108,8 @@
  • requestBuffer() : Nv::Blast::ExtSerialization::ExtSerialization::BufferProvider
  • reset() -: Nv::Blast::FractureTool -, Nv::Blast::ExtStressSolver +: Nv::Blast::ExtStressSolver +, Nv::Blast::FractureTool
  • returnWorker() : Nv::Blast::TkGroup diff --git a/docs/api_docs/files/functions_func_0x73.html b/docs/api_docs/files/functions_func_0x73.html index 1b60999..5eabf60 100644 --- a/docs/api_docs/files/functions_func_0x73.html +++ b/docs/api_docs/files/functions_func_0x73.html @@ -87,6 +87,8 @@ : Nv::Blast::ExtGroupTaskManager
  • setID() : Nv::Blast::TkIdentifiable +
  • setInteriorIndex() +: Nv::Blast::IMeshFileWriter
  • setInteriorMaterialId() : Nv::Blast::FractureTool
  • setMaterial() @@ -106,8 +108,8 @@
  • setSerializationEncoding() : Nv::Blast::ExtSerialization
  • setSettings() -: Nv::Blast::ExtStressSolver -, Nv::Blast::ExtImpactDamageManager +: Nv::Blast::ExtImpactDamageManager +, Nv::Blast::ExtStressSolver
  • setSmoothingGroup() : Nv::Blast::Mesh
  • setSourceMesh() @@ -121,7 +123,7 @@
  • skipObject() : Nv::Blast::ExtSerialization
  • slicing() -: Nv::Blast::FractureTool +: Nv::Blast::FractureTool
  • spawn() : Nv::Blast::ExtPxFamily
  • startProcess() @@ -130,7 +132,7 @@ : Nv::Blast::ExtPxManager , Nv::Blast::ExtPxFamily
  • syncFamily() -: Nv::Blast::ExtSync +: Nv::Blast::ExtSync diff --git a/docs/api_docs/files/functions_func_0x75.html b/docs/api_docs/files/functions_func_0x75.html index b6ad6d4..d5e7fd5 100644 --- a/docs/api_docs/files/functions_func_0x75.html +++ b/docs/api_docs/files/functions_func_0x75.html @@ -67,6 +67,8 @@
  • update() : Nv::Blast::ExtStressSolver , Nv::Blast::ExtPxStressSolver +
  • updateBaseMesh() +: Nv::Blast::FractureTool diff --git a/docs/api_docs/files/functions_func_0x7e.html b/docs/api_docs/files/functions_func_0x7e.html index fdb9203..7e484d6 100644 --- a/docs/api_docs/files/functions_func_0x7e.html +++ b/docs/api_docs/files/functions_func_0x7e.html @@ -67,6 +67,8 @@ : Nv::Blast::BlastBondGenerator
  • ~ConvexMeshBuilder() : Nv::Blast::ConvexMeshBuilder +
  • ~CutoutSet() +: Nv::Blast::CutoutSet
  • ~ErrorCallback() : Nv::Blast::ErrorCallback
  • ~ExtGroupTaskManager() diff --git a/docs/api_docs/files/functions_vars.html b/docs/api_docs/files/functions_vars.html index 3c7850a..7dd8687 100644 --- a/docs/api_docs/files/functions_vars.html +++ b/docs/api_docs/files/functions_vars.html @@ -81,14 +81,16 @@
  • adjacentNodeIndices : NvBlastSupportGraph , NvBlastGraphShaderActor +
  • amplitude +: Nv::Blast::NoiseConfiguration
  • angle_variations : Nv::Blast::SlicingConfiguration
  • area : NvBlastBond
  • asset -: Nv::Blast::ExporterMeshData +: Nv::Blast::AuthoringResult +, Nv::Blast::ExporterMeshData , Nv::Blast::TkActorDesc -, Nv::Blast::AuthoringResult
  • assetBonds : NvBlastGraphShaderActor
  • assetChunks @@ -99,8 +101,8 @@
  • assetToFractureChunkIdMap : Nv::Blast::AuthoringResult
  • attachPositions -: Nv::Blast::TkJointData -, Nv::Blast::TkAssetJointDesc +: Nv::Blast::TkAssetJointDesc +, Nv::Blast::TkJointData , Nv::Blast::TkJointDesc diff --git a/docs/api_docs/files/functions_vars_0x63.html b/docs/api_docs/files/functions_vars_0x63.html index 3ecaba4..5df108a 100644 --- a/docs/api_docs/files/functions_vars_0x63.html +++ b/docs/api_docs/files/functions_vars_0x63.html @@ -113,13 +113,13 @@ , NvcMat44 , NvcMat34
  • column1 -: NvcMat44 -, NvcMat33 +: NvcMat33 +, NvcMat44 , NvcMat34
  • column2 -: NvcMat34 -, NvcMat44 +: NvcMat44 , NvcMat33 +, NvcMat34
  • column3 : NvcMat44 , NvcMat34 @@ -127,6 +127,8 @@ : NvBlastExtAssetUtilsBondDesc
  • contactOffset : Nv::Blast::ExtPxShapeDescTemplate +
  • cutoutSet +: Nv::Blast::CutoutConfiguration diff --git a/docs/api_docs/files/functions_vars_0x64.html b/docs/api_docs/files/functions_vars_0x64.html index 49a9362..6d06f20 100644 --- a/docs/api_docs/files/functions_vars_0x64.html +++ b/docs/api_docs/files/functions_vars_0x64.html @@ -84,15 +84,17 @@
  • damageThresholdMin : Nv::Blast::ExtImpactSettings
  • data -: Nv::Blast::ExtProfileData -, NvBlastID +: NvBlastID , Nv::Blast::ExtSyncEventPhysicsSync +, Nv::Blast::ExtProfileData
  • dataType : NvBlastDataBlock
  • deletedActor : NvBlastActorSplitEvent
  • density : Nv::Blast::ExtPxSpawnSettings +
  • diffuse_tex +: Nv::Blast::Materials diff --git a/docs/api_docs/files/functions_vars_0x66.html b/docs/api_docs/files/functions_vars_0x66.html index 976366c..afba697 100644 --- a/docs/api_docs/files/functions_vars_0x66.html +++ b/docs/api_docs/files/functions_vars_0x66.html @@ -79,13 +79,15 @@
  • firstSubchunkIndex : Nv::Blast::ExtPxChunk
  • flags -: NvBlastChunkDesc +: Nv::Blast::ExtPxActorDescTemplate , Nv::Blast::ExtPxShapeDescTemplate -, Nv::Blast::ExtPxActorDescTemplate +, NvBlastChunkDesc
  • formatVersion : NvBlastDataBlock
  • fracture : NvBlastTimers +
  • frequency +: Nv::Blast::NoiseConfiguration diff --git a/docs/api_docs/files/functions_vars_0x69.html b/docs/api_docs/files/functions_vars_0x69.html index fe0f027..5debcec 100644 --- a/docs/api_docs/files/functions_vars_0x69.html +++ b/docs/api_docs/files/functions_vars_0x69.html @@ -69,10 +69,14 @@ : NvBlastActorDesc
  • initialSupportChunkHealths : NvBlastActorDesc +
  • isChanged +: Nv::Blast::ChunkInfo
  • island : NvBlastTimers
  • isLeaf : Nv::Blast::ChunkInfo +
  • isRelativeTransform +: Nv::Blast::CutoutConfiguration
  • isSelfCollissionEnabled : Nv::Blast::ExtImpactSettings
  • isStatic diff --git a/docs/api_docs/files/functions_vars_0x6d.html b/docs/api_docs/files/functions_vars_0x6d.html index eb134e8..7fc266b 100644 --- a/docs/api_docs/files/functions_vars_0x6d.html +++ b/docs/api_docs/files/functions_vars_0x6d.html @@ -83,9 +83,11 @@ : Nv::Blast::CollisionParams
  • maxRadius : NvBlastExtImpactSpreadDamageDesc -, NvBlastExtShearDamageDesc , NvBlastExtRadialDamageDesc , NvBlastExtCapsuleRadialDamageDesc +, NvBlastExtShearDamageDesc +
  • maxSeparation +: Nv::Blast::BondGenerationConfig
  • meshCount : Nv::Blast::ExporterMeshData
  • meshData @@ -98,9 +100,9 @@ : NvcBounds3
  • minRadius : NvBlastExtRadialDamageDesc -, NvBlastExtImpactSpreadDamageDesc -, NvBlastExtShearDamageDesc , NvBlastExtCapsuleRadialDamageDesc +, NvBlastExtShearDamageDesc +, NvBlastExtImpactSpreadDamageDesc
  • mNbVerts : Nv::Blast::CollisionHull::CollisionHull::HullPolygon
  • mPlane diff --git a/docs/api_docs/files/functions_vars_0x6e.html b/docs/api_docs/files/functions_vars_0x6e.html index 7ec16cd..8b2613e 100644 --- a/docs/api_docs/files/functions_vars_0x6e.html +++ b/docs/api_docs/files/functions_vars_0x6e.html @@ -66,6 +66,7 @@ , NvcPlane
  • name : Nv::Blast::ExtProfileData +, Nv::Blast::Materials
  • newActors : NvBlastActorSplitEvent
  • nodeActorIndices @@ -78,12 +79,9 @@ : NvBlastBondFractureData
  • nodeIndices : Nv::Blast::TkAssetJointDesc -
  • noiseAmplitude -: Nv::Blast::SlicingConfiguration -
  • noiseFrequency -: Nv::Blast::SlicingConfiguration -
  • noiseOctaveNumber -: Nv::Blast::SlicingConfiguration +
  • noise +: Nv::Blast::SlicingConfiguration +, Nv::Blast::CutoutConfiguration
  • normal : NvBlastBond , NvBlastExtShearDamageDesc diff --git a/docs/api_docs/files/functions_vars_0x6f.html b/docs/api_docs/files/functions_vars_0x6f.html index f5c92fc..88952f2 100644 --- a/docs/api_docs/files/functions_vars_0x6f.html +++ b/docs/api_docs/files/functions_vars_0x6f.html @@ -61,6 +61,8 @@  

    - o -

    diff --git a/docs/api_docs/files/functions_vars_0x73.html b/docs/api_docs/files/functions_vars_0x73.html index e65f8ab..86b11be 100644 --- a/docs/api_docs/files/functions_vars_0x73.html +++ b/docs/api_docs/files/functions_vars_0x73.html @@ -63,6 +63,8 @@

    - s -

    diff --git a/docs/api_docs/files/functions_vars_0x74.html b/docs/api_docs/files/functions_vars_0x74.html index f975653..ee7cf8e 100644 --- a/docs/api_docs/files/functions_vars_0x74.html +++ b/docs/api_docs/files/functions_vars_0x74.html @@ -71,9 +71,10 @@ : Nv::Blast::TkFractureCommands , Nv::Blast::TkFractureEvents
  • transform -: Nv::Blast::ExtPxSubchunk -, Nv::Blast::ExtSyncEventPhysicsSync::ExtSyncEventPhysicsSync::ActorData +: Nv::Blast::ExtSyncEventPhysicsSync::ExtSyncEventPhysicsSync::ActorData , Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::SubchunkDesc +, Nv::Blast::ExtPxSubchunk +, Nv::Blast::CutoutConfiguration
  • trId : Nv::Blast::PlaneChunkIndexer
  • type diff --git a/docs/api_docs/files/globals.html b/docs/api_docs/files/globals.html index de251d7..52dce57 100644 --- a/docs/api_docs/files/globals.html +++ b/docs/api_docs/files/globals.html @@ -163,20 +163,26 @@ Here is a list of all file members with links to the files they belong to: : NvBlastExtAssetUtils.h
  • NvBlastExtAssetUtilsMergeAssets() : NvBlastExtAssetUtils.h +
  • NvBlastExtAuthoringBuildCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateBondGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateConvexMeshBuilder() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateFractureTool() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMesh() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMeshCleaner() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateMeshFromFacets() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateVoronoiSitesGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringFindAssetConnectingBonds() -: NvBlastExtAuthoring.h +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringProcessFracture() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringTransformCollisionHull() @@ -233,6 +239,8 @@ Here is a list of all file members with links to the files they belong to: : NvBlastExtDamageShaders.h
  • NvBlastExtTriangleIntersectionSubgraphShader() : NvBlastExtDamageShaders.h +
  • NvBlastExtUpdateGraphicsMesh() +: NvBlastExtAuthoring.h
  • NvBlastFamilyCreateFirstActor() : NvBlast.h
  • NvBlastFamilyDeserializeActor() diff --git a/docs/api_docs/files/globals_func.html b/docs/api_docs/files/globals_func.html index 06d4cad..9c63b5d 100644 --- a/docs/api_docs/files/globals_func.html +++ b/docs/api_docs/files/globals_func.html @@ -121,20 +121,26 @@ : NvBlastExtAssetUtils.h
  • NvBlastExtAssetUtilsMergeAssets() : NvBlastExtAssetUtils.h +
  • NvBlastExtAuthoringBuildCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateBondGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateConvexMeshBuilder() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateFractureTool() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMesh() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMeshCleaner() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateMeshFromFacets() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateVoronoiSitesGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringFindAssetConnectingBonds() -: NvBlastExtAuthoring.h +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringProcessFracture() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringTransformCollisionHull() @@ -191,6 +197,8 @@ : NvBlastExtDamageShaders.h
  • NvBlastExtTriangleIntersectionSubgraphShader() : NvBlastExtDamageShaders.h +
  • NvBlastExtUpdateGraphicsMesh() +: NvBlastExtAuthoring.h
  • NvBlastFamilyCreateFirstActor() : NvBlast.h
  • NvBlastFamilyDeserializeActor() diff --git a/docs/api_docs/files/hierarchy.html b/docs/api_docs/files/hierarchy.html index 92c8dec..79961fc 100644 --- a/docs/api_docs/files/hierarchy.html +++ b/docs/api_docs/files/hierarchy.html @@ -33,6 +33,8 @@
  • Nv::Blast::CollisionHull::CollisionHull::HullPolygon
  • Nv::Blast::CollisionParams
  • Nv::Blast::ConvexMeshBuilder +
  • Nv::Blast::CutoutConfiguration +
  • Nv::Blast::CutoutSet
  • Nv::Blast::DebugBuffer
  • Nv::Blast::DebugLine
  • Nv::Blast::Edge @@ -93,8 +95,10 @@
  • Nv::Blast::IMeshFileWriter
  • Nv::Blast::JsonCollisionExporter
  • Nv::Blast::LlObjectTypeID +
  • Nv::Blast::Materials
  • Nv::Blast::Mesh
  • Nv::Blast::MeshCleaner +
  • Nv::Blast::NoiseConfiguration
  • NvBlastActor
  • NvBlastActorDesc diff --git a/docs/source_docs/files/functions_0x67.html b/docs/source_docs/files/functions_0x67.html index 9048dae..05ddc93 100644 --- a/docs/source_docs/files/functions_0x67.html +++ b/docs/source_docs/files/functions_0x67.html @@ -169,6 +169,8 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::Triangulator
  • getBaseMeshIndexed() : Nv::Blast::Triangulator +
  • getBaseMeshNotFitted() +: Nv::Blast::Triangulator
  • getBlastFBXAxisSystem() : FbxUtils
  • getBlastFBXUnit() @@ -176,11 +178,11 @@ Here is a list of all class members with links to the classes they belong to:
  • getBlock() : Nv::Blast::SharedBlock< T >
  • getBondCount() -: Nv::Blast::TkAsset +: Nv::Blast::Asset +, Nv::Blast::TkAsset , Nv::Blast::Serialization::Asset::Asset::Reader , Nv::Blast::Serialization::Asset::Asset::Builder , Nv::Blast::ExtStressSolver -, Nv::Blast::Asset
  • getBondHealths() : Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader , Nv::Blast::Actor @@ -267,9 +269,9 @@ Here is a list of all class members with links to the classes they belong to:
  • getChunkToGraphNodeMap() : Nv::Blast::Serialization::Asset::Asset::Reader
  • getCollision() -: Nv::Blast::ObjFileReader +: Nv::Blast::FbxFileReader +, Nv::Blast::ObjFileReader , Nv::Blast::IMeshFileReader -, Nv::Blast::FbxFileReader
  • getCollisionGeometry() : Nv::Blast::ApexImporter::ApexImportTool
  • getCollisionGeometryLayerName() @@ -286,6 +288,27 @@ Here is a list of all class members with links to the classes they belong to:
  • getConvexMesh() : Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder +
  • getCutoutCount() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopCount() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopSize() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopVertexFlags() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopVertexIndex() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutVertex() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutVertexCount() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl
  • GetData() : VHACD::CircularListElement< T > , VHACD::CircularList< T > @@ -309,6 +332,9 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtSerializer
  • GetDiagBB() : VHACD::Mesh +
  • getDimensions() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl
  • GetDistance() : VHACD::Vec3< T >
  • getDistance() @@ -452,11 +478,11 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::final , Nv::Blast::ExtDamageAcceleratorInternal
  • getIndex() -: Nv::Blast::TkTypeImpl -, FLOAT_MATH::fm_VertexIndex +: FLOAT_MATH::fm_VertexIndex , Nv::Blast::Actor , Nv::Blast::TkActor , Nv::Blast::TkActorImpl +, Nv::Blast::TkTypeImpl
  • getIndexArray() : Nv::Blast::IMeshFileReader , Nv::Blast::FbxFileReader @@ -487,22 +513,22 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::Serialization::TkAsset::TkAsset::Builder , Nv::Blast::TkAsset
  • getJoints() -: Nv::Blast::TkActor -, Nv::Blast::TkActorImpl +: Nv::Blast::TkActorImpl +, Nv::Blast::TkActor
  • getLastTickCount() : Nv::Blast::Time
  • getLeafChunkCount() -: Nv::Blast::TkAsset +: Nv::Blast::Actor , Nv::Blast::Serialization::Asset::Asset::Reader , Nv::Blast::Serialization::Asset::Asset::Builder -, Nv::Blast::Actor +, Nv::Blast::TkAsset
  • getLowerSupportChunkCount() : Nv::Blast::Asset
  • getLowerSupportChunkHealths() : Nv::Blast::Actor
  • getMaterial() -: Nv::Blast::final -, Nv::Blast::ExtPxFamily +: Nv::Blast::ExtPxFamily +, Nv::Blast::final
  • getMaterialCount() : Nv::Blast::IMeshFileReader , Nv::Blast::FbxFileReader @@ -513,8 +539,8 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::ObjFileReader
  • getMaterialName() : Nv::Blast::IMeshFileReader -, Nv::Blast::ObjFileReader , Nv::Blast::FbxFileReader +, Nv::Blast::ObjFileReader
  • GetMaxBB() : VHACD::Mesh , VHACD::TetrahedronSet @@ -527,8 +553,8 @@ Here is a list of all class members with links to the classes they belong to:
  • getMesh() : Nv::Blast::MeshNoiser
  • getMeshFlags() -: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder
  • getMeshOverlap() : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl @@ -537,20 +563,20 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::MeshImpl
  • GetMinBB() : VHACD::Mesh -, VHACD::VoxelSet , VHACD::TetrahedronSet +, VHACD::VoxelSet
  • GetMinBBVoxels() : VHACD::VoxelSet
  • getName() : Nv::Blast::ExtGroupWorkerTask -, Nv::Blast::ExtSerializer -, Nv::Blast::TkTypeImpl , Nv::Blast::TkType +, Nv::Blast::TkTypeImpl +, Nv::Blast::ExtSerializer
  • getNameInternal() : Nv::Blast::TkTypeImpl
  • GetNConvexHulls() -: VHACD::VHACD -, VHACD::IVHACD +: VHACD::IVHACD +, VHACD::VHACD
  • GetNEdges() : VHACD::TMMesh
  • GetNext() @@ -562,20 +588,20 @@ Here is a list of all class members with links to the classes they belong to:
  • getNextEdgeOfVertex() : btConvexHullComputer::btConvexHullComputer::Edge
  • getNextFacet() -: Nv::Blast::SpatialAccelerator +: Nv::Blast::DummyAccelerator , Nv::Blast::SweepingAccelerator , Nv::Blast::BBoxBasedAccelerator , Nv::Blast::IntersectionTestingAccelerator -, Nv::Blast::DummyAccelerator +, Nv::Blast::SpatialAccelerator
  • getNodeCount() -: Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder -, Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Reader +: Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Reader +, Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder
  • getNodeIndices() : Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Reader , Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder
  • GetNorm() -: VHACD::Vec2< T > -, VHACD::Vec3< T > +: VHACD::Vec3< T > +, VHACD::Vec2< T >
  • getNormal() : Nv::Blast::Triangle , Nv::Blast::TrPrcTriangle @@ -584,22 +610,22 @@ Here is a list of all class members with links to the classes they belong to:
  • getNormalizedDamage() : NvBlastExtMaterial
  • getNormalsArray() -: Nv::Blast::IMeshFileReader +: Nv::Blast::FbxFileReader , Nv::Blast::ObjFileReader -, Nv::Blast::FbxFileReader +, Nv::Blast::IMeshFileReader
  • getNot() : Nv::Blast::EdgeToTriangles
  • GetNPoints() : VHACD::Mesh
  • GetNPrimitives() -: VHACD::VoxelSet +: VHACD::PrimitiveSet +, VHACD::VoxelSet , VHACD::TetrahedronSet -, VHACD::PrimitiveSet
  • GetNPrimitivesInsideSurf() -: VHACD::PrimitiveSet +: VHACD::VoxelSet , VHACD::TetrahedronSet , VHACD::Volume -, VHACD::VoxelSet +, VHACD::PrimitiveSet
  • GetNPrimitivesOnSurf() : VHACD::PrimitiveSet , VHACD::VoxelSet @@ -611,11 +637,11 @@ Here is a list of all class members with links to the classes they belong to:
  • GetNVertices() : VHACD::TMMesh
  • getObjectCount() -: Nv::Blast::TkFramework -, Nv::Blast::TkFrameworkImpl +: Nv::Blast::TkFrameworkImpl +, Nv::Blast::TkFramework
  • getObjects() -: Nv::Blast::TkFrameworkImpl -, Nv::Blast::TkFramework +: Nv::Blast::TkFramework +, Nv::Blast::TkFrameworkImpl
  • getObjectType() : btTypedObject
  • getObjectTypeID() @@ -625,31 +651,35 @@ Here is a list of all class members with links to the classes they belong to:
  • getOverstressedBondCount() : Nv::Blast::ExtStressSolver
  • getP() -: Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline +: Nv::Blast::Serialization::PxTransform::PxTransform::Builder , Nv::Blast::Serialization::PxTransform::PxTransform::Reader -, Nv::Blast::Serialization::PxTransform::PxTransform::Builder +, Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline +
  • getParentChunkId() +: Nv::Blast::Triangulator
  • getParentChunkIndex() : Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Reader
  • getPayload() : Nv::Blast::TkEvent
  • getPhysics() -: Nv::Blast::final -, Nv::Blast::ExtPxManager +: Nv::Blast::ExtPxManager +, Nv::Blast::final
  • getPhysXActor() : Nv::Blast::final , Nv::Blast::ExtPxActor
  • GetPoint() : VHACD::Mesh -, VHACD::VoxelSet +, VHACD::VoxelSet +, VHACD::Mesh +, VHACD::VoxelSet
  • GetPoints() -: VHACD::Mesh -, VHACD::VoxelSet +: VHACD::VoxelSet +, VHACD::Mesh
  • GetPointsBuffer() -: VHACD::Mesh +: VHACD::Mesh
  • getPositionArray() -: Nv::Blast::FbxFileReader +: Nv::Blast::IMeshFileReader +, Nv::Blast::FbxFileReader , Nv::Blast::ObjFileReader -, Nv::Blast::IMeshFileReader
  • getPositionedMapping() : Nv::Blast::Triangulator
  • GetPrev() @@ -657,21 +687,21 @@ Here is a list of all class members with links to the classes they belong to:
  • getPrev() : Nv::Blast::DLink
  • getPxActorCount() -: Nv::Blast::ExtPxManager -, Nv::Blast::final +: Nv::Blast::final +, Nv::Blast::ExtPxManager
  • getPxActorDesc() -: Nv::Blast::final -, Nv::Blast::ExtPxFamily +: Nv::Blast::ExtPxFamily +, Nv::Blast::final
  • getPxAsset() : Nv::Blast::ExtPxFamily , Nv::Blast::final
  • getPxShapeDescTemplate() -: Nv::Blast::final -, Nv::Blast::ExtPxFamily +: Nv::Blast::ExtPxFamily +, Nv::Blast::final
  • getQ() : Nv::Blast::Serialization::PxTransform::PxTransform::Reader -, Nv::Blast::Serialization::PxTransform::PxTransform::Builder , Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline +, Nv::Blast::Serialization::PxTransform::PxTransform::Builder
  • getRandomValue() : Nv::Blast::RandomGeneratorBase
  • getRenderGeometryLayerName() @@ -679,20 +709,20 @@ Here is a list of all class members with links to the classes they belong to:
  • getReverseEdge() : btConvexHullComputer::btConvexHullComputer::Edge
  • getRotation() -: Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader -, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Pipeline +: Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Pipeline +, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader , Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder
  • GetSacle() : VHACD::TetrahedronSet
  • getScale() -: Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Pipeline +: Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader +, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Pipeline
  • GetScale() : VHACD::VoxelSet
  • getScale() -: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Pipeline -, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader , Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder
  • getScene() : Nv::Blast::FbxFileWriter @@ -702,23 +732,24 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtSerialization
  • getSettings() : Nv::Blast::ExtStressSolver +
  • getSize() +: Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Reader
  • GetSize() : VHACD::CircularList< T >
  • getSize() : Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Builder -, Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Reader
  • getSmoothingGroups() -: Nv::Blast::FbxFileReader +: Nv::Blast::IMeshFileReader +, Nv::Blast::FbxFileReader , Nv::Blast::ObjFileReader -, Nv::Blast::IMeshFileReader
  • getSolver() : Nv::Blast::ExtPxStressSolver , Nv::Blast::final
  • getSourceVertex() : btConvexHullComputer::btConvexHullComputer::Edge
  • getSplitMaxActorCount() -: Nv::Blast::TkActor -, Nv::Blast::TkActorImpl +: Nv::Blast::TkActorImpl +, Nv::Blast::TkActor
  • getStats() : Nv::Blast::TkGroup
  • getStressErrorAngular() @@ -726,19 +757,19 @@ Here is a list of all class members with links to the classes they belong to:
  • getStressErrorLinear() : Nv::Blast::ExtStressSolver
  • getSubchunkCount() -: Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder -, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Reader -, Nv::Blast::ExtPxAsset +: Nv::Blast::ExtPxAsset +, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder , Nv::Blast::final +, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Reader
  • getSubchunks() -: Nv::Blast::final -, Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader +: Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader +, Nv::Blast::final , Nv::Blast::ExtPxAsset
  • getSubchunksArray() : Nv::Blast::final
  • getSubchunkShapes() -: Nv::Blast::ExtPxFamily -, Nv::Blast::final +: Nv::Blast::final +, Nv::Blast::ExtPxFamily
  • getSubsupportChunkHealths() : Nv::Blast::FamilyHeader , Nv::Blast::Actor @@ -761,32 +792,32 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::final , Nv::Blast::ExtPxAsset
  • getTkFamily() -: Nv::Blast::final -, Nv::Blast::ExtPxFamily +: Nv::Blast::ExtPxFamily +, Nv::Blast::final
  • getTransform() : Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Pipeline -, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Reader , Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder +, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Reader
  • getTransformation() : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl
  • GetTriangle() -: VHACD::Mesh +: VHACD::Mesh
  • getTriangleIntersection() : Nv::Blast::TriangleProcessor
  • GetTriangles() -: VHACD::TMMesh +: VHACD::Mesh +, VHACD::TMMesh , VHACD::Mesh , VHACD::TMMesh -, VHACD::Mesh
  • GetTrianglesBuffer() -: VHACD::Mesh +: VHACD::Mesh
  • getType() -: Nv::Blast::TkFramework -, Nv::Blast::TkFrameworkImpl -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +: Nv::Blast::TkFrameworkImpl , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder , Nv::Blast::TkIdentifiable +, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +, Nv::Blast::TkFramework
  • getUniformInitialBondHealth() : Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader
  • getUniformInitialLowerSupportChunkHealth() @@ -799,55 +830,57 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Reader , Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Reader
  • getUvArray() -: Nv::Blast::ObjFileReader +: Nv::Blast::IMeshFileReader , Nv::Blast::FbxFileReader -, Nv::Blast::IMeshFileReader +, Nv::Blast::ObjFileReader
  • getValue() -: Nv::Blast::Serialization::UUID::UUID::Reader -, Nv::Blast::Serialization::UUID::UUID::Builder +: Nv::Blast::Serialization::UUID::UUID::Builder +, Nv::Blast::Serialization::UUID::UUID::Reader
  • getVcount() : FLOAT_MATH::fm_VertexIndex
  • getVersion() -: Nv::Blast::TkTypeImpl -, Nv::Blast::TkType +: Nv::Blast::TkType +, Nv::Blast::TkTypeImpl
  • getVersionInternal() : Nv::Blast::TkTypeImpl +
  • getVertex() +: Nv::Blast::Triangle
  • getVertexDouble() : FLOAT_MATH::fm_VertexIndex
  • getVertexFloat() : FLOAT_MATH::fm_VertexIndex
  • GetVertices() -: VHACD::TMMesh +: VHACD::TMMesh
  • getVertices() : Nv::Blast::MeshImpl , Nv::Blast::Mesh
  • getVerticesCount() -: Nv::Blast::MeshImpl -, Nv::Blast::IMeshFileReader +: Nv::Blast::IMeshFileReader +, Nv::Blast::FbxFileReader +, Nv::Blast::MeshImpl , Nv::Blast::ObjFileReader , Nv::Blast::Mesh -, Nv::Blast::FbxFileReader
  • getVerticesDouble() : FLOAT_MATH::fm_VertexIndex
  • getVerticesFloat() : FLOAT_MATH::fm_VertexIndex
  • getVerticesWritable() -: Nv::Blast::MeshImpl -, Nv::Blast::Mesh +: Nv::Blast::Mesh +, Nv::Blast::MeshImpl
  • getVisibleChunkCount() -: Nv::Blast::TkActorImpl +: Nv::Blast::TkActor , Nv::Blast::Actor -, Nv::Blast::TkActor +, Nv::Blast::TkActorImpl
  • getVisibleChunkIndices() : Nv::Blast::TkActorImpl , Nv::Blast::TkActor
  • getVolume() : Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Reader
  • getVoronoiSites() -: Nv::Blast::VoronoiSitesGenerator -, Nv::Blast::VoronoiSitesGeneratorImpl +: Nv::Blast::VoronoiSitesGeneratorImpl +, Nv::Blast::VoronoiSitesGenerator
  • GetVoxel() -: VHACD::Volume +: VHACD::Volume
  • GetVoxels() : VHACD::VoxelSet
  • getW() @@ -863,20 +896,20 @@ Here is a list of all class members with links to the classes they belong to:
  • getWrittenBytes() : Nv::Blast::ExtKJPxOutputStream
  • getX() -: Nv::Blast::Serialization::PxVec3::PxVec3::Reader -, Nv::Blast::Serialization::PxQuat::PxQuat::Builder -, Nv::Blast::Serialization::PxQuat::PxQuat::Reader +: Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxVec3::PxVec3::Builder +, Nv::Blast::Serialization::PxVec3::PxVec3::Reader +, Nv::Blast::Serialization::PxQuat::PxQuat::Reader
  • getY() : Nv::Blast::Serialization::PxQuat::PxQuat::Builder -, Nv::Blast::Serialization::PxQuat::PxQuat::Reader , Nv::Blast::Serialization::PxVec3::PxVec3::Reader +, Nv::Blast::Serialization::PxQuat::PxQuat::Reader , Nv::Blast::Serialization::PxVec3::PxVec3::Builder
  • getZ() -: Nv::Blast::Serialization::PxQuat::PxQuat::Reader -, Nv::Blast::Serialization::PxVec3::PxVec3::Builder -, Nv::Blast::Serialization::PxQuat::PxQuat::Builder +: Nv::Blast::Serialization::PxVec3::PxVec3::Builder +, Nv::Blast::Serialization::PxQuat::PxQuat::Reader , Nv::Blast::Serialization::PxVec3::PxVec3::Reader +, Nv::Blast::Serialization::PxQuat::PxQuat::Builder
  • graphNodeCount : NvBlastGraphShaderActor
  • graphNodeIndexLinks diff --git a/docs/source_docs/files/functions_0x69.html b/docs/source_docs/files/functions_0x69.html index 2e2038f..e21994b 100644 --- a/docs/source_docs/files/functions_0x69.html +++ b/docs/source_docs/files/functions_0x69.html @@ -98,6 +98,7 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtForceMode
  • index : Nv::Blast::SegmentToIndex +, Nv::Blast::PolyVert , Nv::Blast::TkActorData
  • indexIsValid() : Nv::Blast::TkTypeImpl @@ -105,10 +106,10 @@ Here is a list of all class members with links to the classes they belong to: : NvBlastMessage
  • infSearchMode : Nv::Blast::ApexImporter::ApexImporterConfig -
  • Init() -: VHACD::IVHACD::IVHACD::Parameters
  • init() : btAlignedObjectArray< T > +
  • Init() +: VHACD::IVHACD::IVHACD::Parameters
  • initAsset() : Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Builder
  • initAssetLL() @@ -132,6 +133,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ActorSerializationFormat
  • initialBondHealths : NvBlastActorDesc +
  • Initialize() +: VHACD::SArray< T, N >
  • initialize() : Nv::Blast::ApexImporter::ApexImportTool , Nv::Blast::ApexImporter::ApexDestruction @@ -142,7 +145,6 @@ Here is a list of all class members with links to the classes they belong to: : VHACD::TMMVertex , VHACD::TMMEdge , VHACD::TMMTriangle -, VHACD::SArray< T, N >
  • initializeFromBuffer() : btAlignedObjectArray< T >
  • initialSupportChunkHealths @@ -187,9 +189,9 @@ Here is a list of all class members with links to the classes they belong to:
  • INTERNAL_EDGE : Nv::Blast::MeshNoiser
  • Intersect() -: VHACD::PrimitiveSet +: VHACD::TetrahedronSet +, VHACD::PrimitiveSet , VHACD::VoxelSet -, VHACD::TetrahedronSet
  • intersectionPoint : Nv::Blast::EdgeFacetIntersectionData
  • IntersectionTestingAccelerator() @@ -203,12 +205,14 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::FamilyHeader
  • isBoundToWorld() : Nv::Blast::Actor -, Nv::Blast::TkActor , Nv::Blast::TkActorImpl +, Nv::Blast::TkActor +
  • isChanged +: Nv::Blast::ChunkInfo
  • isCollisionLoaded() : Nv::Blast::IMeshFileReader -, Nv::Blast::FbxFileReader , Nv::Blast::ObjFileReader +, Nv::Blast::FbxFileReader
  • isContainEdge() : Nv::Blast::TriangleIndexed
  • isDone() @@ -227,16 +231,19 @@ Here is a list of all class members with links to the classes they belong to:
  • island : NvBlastTimers
  • islandDetectionAndRemoving() -: Nv::Blast::FractureToolImpl -, Nv::Blast::FractureTool +: Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl
  • isLeaf : Nv::Blast::ChunkInfo
  • isMeshContainOpenEdges() -: Nv::Blast::FractureTool -, Nv::Blast::FractureToolImpl +: Nv::Blast::FractureToolImpl +, Nv::Blast::FractureTool
  • isPending() : Nv::Blast::TkActorImpl , Nv::Blast::TkActor +
  • isPeriodic() +: Nv::Blast::CutoutSetImpl +, Nv::Blast::CutoutSet
  • isPointContainedInMesh() : Nv::Blast::BooleanEvaluator
  • isPointInside() @@ -248,6 +255,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtSerializer
  • IsReady() : VHACD::IVHACD +
  • isRelativeTransform +: Nv::Blast::CutoutConfiguration
  • isSelfCollissionEnabled : Nv::Blast::ExtImpactSettings
  • isSingleSupportChunk() @@ -258,18 +267,18 @@ Here is a list of all class members with links to the classes they belong to:
  • isSplitRequired() : Nv::Blast::Actor
  • isStatic -: Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::ChunkDesc -, Nv::Blast::ExtPxChunk +: Nv::Blast::ExtPxChunk +, Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::ChunkDesc
  • isSubSupportChunk() : Nv::Blast::Actor
  • isUsed() : Nv::Blast::SharedMemory
  • isValid() -: Nv::Blast::Mesh -, Nv::Blast::ApexImporter::ApexImportTool +: Nv::Blast::ApexImporter::ApexImportTool , Nv::Blast::ExtAtomicCounter , Nv::Blast::MeshImpl , Nv::Blast::ApexImporter::ApexDestruction +, Nv::Blast::Mesh
  • It() : Nv::Blast::DList::DList::It
  • IteratorBase() diff --git a/docs/source_docs/files/functions_0x6d.html b/docs/source_docs/files/functions_0x6d.html index e013802..d10c199 100644 --- a/docs/source_docs/files/functions_0x6d.html +++ b/docs/source_docs/files/functions_0x6d.html @@ -268,9 +268,9 @@ Here is a list of all class members with links to the classes they belong to:
  • materialCount : Nv::Blast::AuthoringResult
  • materialId -: Nv::Blast::TriangleIndexed +: Nv::Blast::Triangle +, Nv::Blast::TriangleIndexed , Nv::Blast::Facet -, Nv::Blast::Triangle
  • materialNames : Nv::Blast::AuthoringResult
  • max0 @@ -286,10 +286,12 @@ Here is a list of all class members with links to the classes they belong to:
  • maximumNumberOfHulls : Nv::Blast::CollisionParams
  • maxRadius -: NvBlastExtRadialDamageDesc -, NvBlastExtShearDamageDesc +: NvBlastExtShearDamageDesc , NvBlastExtCapsuleRadialDamageDesc , NvBlastExtImpactSpreadDamageDesc +, NvBlastExtRadialDamageDesc +
  • maxSeparation +: Nv::Blast::BondGenerationConfig
  • mbValid : Nv::Blast::ApexImporter::ApexReleaser
  • mChunkData @@ -329,8 +331,8 @@ Here is a list of all class members with links to the classes they belong to:
  • minimum : NvcBounds3
  • minRadius -: NvBlastExtCapsuleRadialDamageDesc -, NvBlastExtImpactSpreadDamageDesc +: NvBlastExtImpactSpreadDamageDesc +, NvBlastExtCapsuleRadialDamageDesc , NvBlastExtShearDamageDesc , NvBlastExtRadialDamageDesc
  • mInteriorMaterialId diff --git a/docs/source_docs/files/functions_0x6e.html b/docs/source_docs/files/functions_0x6e.html index c317dab..7c67b80 100644 --- a/docs/source_docs/files/functions_0x6e.html +++ b/docs/source_docs/files/functions_0x6e.html @@ -91,6 +91,7 @@ Here is a list of all class members with links to the classes they belong to: , NvcPlane
  • name : Nv::Blast::ExtProfileData +, Nv::Blast::Materials
  • newActors : NvBlastActorSplitEvent
  • Next() @@ -112,14 +113,11 @@ Here is a list of all class members with links to the classes they belong to:
  • nodeIndices : Nv::Blast::TkAssetJointDesc
  • NoFlags -: NvBlastChunkDesc -, Nv::Blast::TkAssetDesc -
  • noiseAmplitude -: Nv::Blast::SlicingConfiguration -
  • noiseFrequency -: Nv::Blast::SlicingConfiguration -
  • noiseOctaveNumber -: Nv::Blast::SlicingConfiguration +: Nv::Blast::TkAssetDesc +, NvBlastChunkDesc +
  • noise +: Nv::Blast::SlicingConfiguration +, Nv::Blast::CutoutConfiguration
  • NONE : Nv::Blast::MeshNoiser
  • normal @@ -161,11 +159,10 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::FamilyHeader , Nv::Blast::Asset
  • NvBlastBlockData() -: Nv::Blast::ActorSerializationHeader -, Nv::Blast::FamilyGraph +: Nv::Blast::FamilyHeader , Nv::Blast::ActorSerializationHeader , Nv::Blast::FamilyGraph -, Nv::Blast::FamilyHeader +, Nv::Blast::ActorSerializationHeader , Nv::Blast::FamilyGraph , Nv::Blast::ActorSerializationHeader , Nv::Blast::FamilyGraph diff --git a/docs/source_docs/files/functions_0x6f.html b/docs/source_docs/files/functions_0x6f.html index bb78f52..54bb858 100644 --- a/docs/source_docs/files/functions_0x6f.html +++ b/docs/source_docs/files/functions_0x6f.html @@ -96,6 +96,8 @@ Here is a list of all class members with links to the classes they belong to:
  • OCLRelease() : VHACD::VHACD , VHACD::IVHACD +
  • octaveNumber +: Nv::Blast::NoiseConfiguration
  • offset_variations : Nv::Blast::SlicingConfiguration
  • onActorCreated() @@ -109,7 +111,7 @@ Here is a list of all class members with links to the classes they belong to:
  • onCreate() : Nv::Blast::TkFrameworkImpl
  • onDestroy() -: Nv::Blast::TkFrameworkImpl +: Nv::Blast::TkFrameworkImpl
  • onIDChange() : Nv::Blast::TkFrameworkImpl
  • operator bool() @@ -123,7 +125,8 @@ Here is a list of all class members with links to the classes they belong to:
  • operator Nv::Blast::TkActorData() : Nv::Blast::TkActorImpl
  • operator Reader() -: Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder +: Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder +, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder , Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder @@ -138,7 +141,6 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder , Nv::Blast::Serialization::UUID::UUID::Builder , Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Builder -, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder
  • operator T() : Nv::Blast::IteratorBase< T >
  • operator!=() @@ -162,65 +164,70 @@ Here is a list of all class members with links to the classes they belong to: : VHACD::Vec3< T > , VHACD::Vec2< T >
  • operator++() -: Nv::Blast::LListIt< IndexType > -, Nv::Blast::DList::DList::It +: Nv::Blast::DList::DList::It +, Nv::Blast::LListIt< IndexType > , Nv::Blast::DListIt< IndexType > , Nv::Blast::ChunkDepthFirstIt
  • operator+=() -: VHACD::Vec2< T > -, VHACD::Vec3< T > +: VHACD::Vec3< T > +, VHACD::Vec2< T > +, VHACD::Vec3< T >
  • operator-() : VHACD::Vec3< T > , VHACD::Vec2< T >
  • operator--() : Nv::Blast::DList::DList::It
  • operator-=() -: VHACD::Vec3< T > +: VHACD::Vec3< T > , VHACD::Vec2< T > -, VHACD::Vec3< T >
  • operator->() : Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser >
  • operator/() : VHACD::Vec3< T > , VHACD::Vec2< T >
  • operator/=() -: VHACD::Vec3< T > -, VHACD::Vec2< T > +: VHACD::Vec2< T > +, VHACD::Vec3< T >
  • operator<() -: Nv::Blast::EdgeFacetIntersectionData -, Nv::Blast::Edge +: VHACD::Vec3< T > , Nv::Blast::SegmentToIndex -, VHACD::Vec3< T > +, Nv::Blast::POINT2D +, Nv::Blast::Edge +, Nv::Blast::EdgeFacetIntersectionData
  • operator=() -: VHACD::SArray< T, N > -, VHACD::Vec2< T > -, Nv::Blast::ApexImporter::ApexImportTool +: VHACD::CircularList< T > , btAlignedObjectArray< T > +, Nv::Blast::ApexImporter::ApexImportTool +, VHACD::Vec3< T > +, btAlignedAllocator< T, Alignment > +, VHACD::SArray< T, N > , Nv::Blast::TrPrcTriangle -, VHACD::CircularList< T > , VHACD::ICHull -, VHACD::Vec3< T > +, VHACD::Vec2< T > , Nv::Blast::TrPrcTriangle2d -, btAlignedAllocator< T, Alignment >
  • operator==() : Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > -, btAlignedAllocator< T, Alignment > , Nv::Blast::TkType +, Nv::Blast::POINT2D +, btAlignedAllocator< T, Alignment >
  • operator>() : VHACD::Vec3< T >
  • operator>> : Nv::Blast::ExtIStream
  • operator[]() -: VHACD::Vec3< T > +: VHACD::SArray< T, N > +, VHACD::Vec2< T > , Nv::Blast::FixedArray< T > -, VHACD::Vec3< T > -, VHACD::SArray< T, N > +, VHACD::Vec3< T > +, btAlignedObjectArray< T > , Nv::Blast::FixedArray< T > , VHACD::Vec2< T > +, VHACD::Vec3< T > +, VHACD::SArray< T, N > , btAlignedObjectArray< T >
  • operator^() -: VHACD::Vec2< T > -, VHACD::Vec3< T > +: VHACD::Vec3< T > +, VHACD::Vec2< T >
  • other : btAlignedAllocator< T, Alignment >::btAlignedAllocator::rebind< O > diff --git a/docs/source_docs/files/functions_0x70.html b/docs/source_docs/files/functions_0x70.html index fbf2f4d..8c370e9 100644 --- a/docs/source_docs/files/functions_0x70.html +++ b/docs/source_docs/files/functions_0x70.html @@ -120,6 +120,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::BooleanEvaluator
  • performFastCutting() : Nv::Blast::BooleanEvaluator +
  • periodic +: Nv::Blast::CutoutSetImpl
  • PerlinNoise() : Nv::Blast::PerlinNoise
  • Physics @@ -131,7 +133,7 @@ Here is a list of all class members with links to the classes they belong to:
  • physxSDK() : Nv::Blast::ApexImporter::ApexDestruction
  • Pipeline() -: Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Pipeline +: Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Pipeline , Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Pipeline , Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Pipeline , Nv::Blast::Serialization::UUID::UUID::Pipeline @@ -144,17 +146,14 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline , Nv::Blast::Serialization::TkAsset::TkAsset::Pipeline , Nv::Blast::Serialization::Asset::Asset::Pipeline -, Nv::Blast::Serialization::TkAsset::TkAsset::Pipeline , Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Pipeline , Nv::Blast::Serialization::Asset::Asset::Pipeline -, Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Pipeline , Nv::Blast::Serialization::PxVec3::PxVec3::Pipeline , Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Pipeline -, Nv::Blast::Serialization::PxVec3::PxVec3::Pipeline -, Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Pipeline -, Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Pipeline
  • Pipelines -: Nv::Blast::Serialization::UUID::UUID::Pipeline +: Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Pipeline +, Nv::Blast::Serialization::UUID::UUID::Pipeline +, Nv::Blast::Serialization::PxVec3::PxVec3::Pipeline , Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Pipeline , Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Pipeline , Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Pipeline @@ -164,31 +163,33 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline , Nv::Blast::Serialization::TkAsset::TkAsset::Pipeline , Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Pipeline -, Nv::Blast::Serialization::PxVec3::PxVec3::Pipeline -, Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Pipeline , Nv::Blast::Serialization::Asset::Asset::Pipeline , Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Pipeline , Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Pipeline , Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Pipeline
  • plane -: Nv::Blast::Separation -, Nv::Blast::PlaneChunkIndexer +: Nv::Blast::PlaneChunkIndexer +, Nv::Blast::Separation
  • PlaneChunkIndexer() : Nv::Blast::PlaneChunkIndexer +
  • POINT2D() +: Nv::Blast::POINT2D
  • pointer : btAlignedAllocator< T, Alignment >
  • points -: Nv::Blast::TrPrcTriangle2d -, Nv::Blast::TrPrcTriangle +: Nv::Blast::TrPrcTriangle +, Nv::Blast::TrPrcTriangle2d +
  • polyVerts +: Nv::Blast::ConvexLoop
  • pop() : Nv::Blast::FixedPriorityQueue< Element, Comparator >
  • pop_back() : btAlignedObjectArray< T > -
  • PopBack() -: VHACD::SArray< T, N >
  • popBack() : Nv::Blast::FixedArray< T > , Nv::Blast::FixedQueue< T > +
  • PopBack() +: VHACD::SArray< T, N >
  • popFront() : Nv::Blast::FixedQueue< T >
  • pos0 @@ -200,15 +201,15 @@ Here is a list of all class members with links to the classes they belong to:
  • posIndex : Nv::Blast::ExporterMeshData
  • position -: NvBlastExtShearDamageDesc -, NvBlastExtImpactSpreadDamageDesc +: NvBlastExtImpactSpreadDamageDesc , NvBlastExtRadialDamageDesc +, NvBlastExtShearDamageDesc
  • position0 : NvBlastExtCapsuleRadialDamageDesc , NvBlastExtTriangleIntersectionDamageDesc
  • position1 -: NvBlastExtCapsuleRadialDamageDesc -, NvBlastExtTriangleIntersectionDamageDesc +: NvBlastExtTriangleIntersectionDamageDesc +, NvBlastExtCapsuleRadialDamageDesc
  • position2 : NvBlastExtTriangleIntersectionDamageDesc
  • positions @@ -216,22 +217,24 @@ Here is a list of all class members with links to the classes they belong to:
  • positionsCount : Nv::Blast::ExporterMeshData
  • postSplitUpdate() -: Nv::Blast::ExtPxFamily -, Nv::Blast::final +: Nv::Blast::final +, Nv::Blast::ExtPxFamily
  • Prev() : VHACD::CircularList< T >
  • Print() : VHACD::TMMesh
  • process() -: Nv::Blast::ExtGroupTaskManager +: Nv::Blast::TkGroup , Nv::Blast::final , Nv::Blast::TkGroupWorker -, Nv::Blast::TkGroup +
  • Process() +: VHACD::ICHull +
  • process() +: Nv::Blast::ExtGroupTaskManagerImpl
  • Process() : VHACD::ICHull
  • process() -: Nv::Blast::final -, Nv::Blast::ExtGroupTaskManagerImpl +: Nv::Blast::ExtGroupTaskManager
  • processedActorsCount : Nv::Blast::TkGroupStats
  • processResults() @@ -245,10 +248,9 @@ Here is a list of all class members with links to the classes they belong to: : btAlignedObjectArray< T >
  • pushBack() : Nv::Blast::FixedArray< T > +, Nv::Blast::FixedQueue< T >
  • PushBack() : VHACD::SArray< T, N > -
  • pushBack() -: Nv::Blast::FixedQueue< T >
  • pxAsset : Nv::Blast::ExtPxFamilyDesc
  • pxChunks diff --git a/docs/source_docs/files/functions_0x72.html b/docs/source_docs/files/functions_0x72.html index e64226b..e0b93ac 100644 --- a/docs/source_docs/files/functions_0x72.html +++ b/docs/source_docs/files/functions_0x72.html @@ -163,77 +163,81 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtSerializationInternal
  • reinitialize() : Nv::Blast::TkFamily +
  • Release() +: VHACD::VHACD +
  • release() +: Nv::Blast::SharedMemory +
  • Release() +: VHACD::IVHACD
  • release() : Nv::Blast::BlastBondGenerator , Nv::Blast::ConvexMeshBuilder +, Nv::Blast::TkFrameworkImpl +, Nv::Blast::CutoutSet , Nv::Blast::VoronoiSitesGenerator -, Nv::Blast::SharedMemory , Nv::Blast::FractureTool , Nv::Blast::Mesh , Nv::Blast::MeshCleaner , Nv::Blast::AuthoringResult , Nv::Blast::BlastBondGeneratorImpl +, Nv::Blast::ExtSerializer , Nv::Blast::CollisionHullImpl , Nv::Blast::ConvexMeshBuilderImpl -, Nv::Blast::Actor +, Nv::Blast::CutoutSetImpl +, Nv::Blast::final , Nv::Blast::VoronoiSitesGeneratorImpl , Nv::Blast::FractureToolImpl , Nv::Blast::MeshCleanerImpl -, Nv::Blast::ExtSerializer +, Nv::Blast::final , Nv::Blast::MeshImpl , VHACD::RaycastMesh , Nv::Blast::IMeshFileReader -, Nv::Blast::final , Nv::Blast::IMeshFileWriter , Nv::Blast::FbxFileReader , Nv::Blast::FbxFileWriter , Nv::Blast::ObjFileReader +, Nv::Blast::ExtImpactDamageManager , Nv::Blast::ObjFileWriter , Nv::Blast::ApexImporter::DefaultReleaser< T > , Nv::Blast::ApexImporter::ApexReleaser -, Nv::Blast::ExtPxStressSolver -, Nv::Blast::ApexImporter::ApexReleaser , Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > -, Nv::Blast::ExtImpactDamageManager , Nv::Blast::ExtPxAsset , Nv::Blast::ExtPxFamily , Nv::Blast::ExtPxManager +, Nv::Blast::ExtPxStressSolver , Nv::Blast::ExtGroupTaskManager , Nv::Blast::ExtSyncEvent , Nv::Blast::ExtSync -, Nv::Blast::final +, Nv::Blast::final , Nv::Blast::ExtGroupWorkerTask , Nv::Blast::ExtGroupTaskManagerImpl , Nv::Blast::ExtSerialization , NvBlastExtDamageAccelerator , Nv::Blast::final , Nv::Blast::ExtStressSolver +, Nv::Blast::Actor , Nv::Blast::TkFramework , Nv::Blast::TkObject , Nv::Blast::TkActorImpl -, Nv::Blast::TkFrameworkImpl , Nv::Blast::TkJointImpl , Nv::Blast::SharedBlock< T > , Nv::Blast::SharedBuffer< T > -
  • Release() -: VHACD::VHACD -, VHACD::IVHACD
  • releaseCollisionHulls() : Nv::Blast::AuthoringResult
  • releaseSyncBuffer() : Nv::Blast::ExtSync
  • remove() -: Nv::Blast::IndexDList< IndexType > +: btAlignedObjectArray< T > , Nv::Blast::DList -, btAlignedObjectArray< T > +, Nv::Blast::IndexDList< IndexType >
  • removeFromGroup() -: Nv::Blast::TkActorImpl -, Nv::Blast::TkActor +: Nv::Blast::TkActor +, Nv::Blast::TkActorImpl
  • removeFromList() : Nv::Blast::IndexDList< IndexType >
  • removeListener() -: Nv::Blast::TkEventQueue -, Nv::Blast::TkFamily +: Nv::Blast::TkFamily +, Nv::Blast::TkEventQueue
  • removeListHead() : Nv::Blast::IndexDList< IndexType >
  • removeReference() @@ -248,20 +252,20 @@ Here is a list of all class members with links to the classes they belong to:
  • replace() : Nv::Blast::EdgeToTriangles
  • replaceMaterialId() -: Nv::Blast::Mesh +: Nv::Blast::MeshImpl +, Nv::Blast::Mesh , Nv::Blast::FractureToolImpl , Nv::Blast::FractureTool -, Nv::Blast::MeshImpl
  • reportError() : Nv::Blast::ErrorCallback
  • requestBuffer() : Nv::Blast::ExtSerialization::ExtSerialization::BufferProvider
  • requiredMemorySize() -: Nv::Blast::FixedArray< T > +: Nv::Blast::FamilyGraph +, Nv::Blast::FixedBoolArray , Nv::Blast::FixedPriorityQueue< Element, Comparator > +, Nv::Blast::FixedArray< T > , Nv::Blast::FixedQueue< T > -, Nv::Blast::FixedBoolArray -, Nv::Blast::FamilyGraph , Nv::Blast::FixedBitmap
  • reserve() : Nv::Blast::SharedBuffer< T > @@ -277,21 +281,21 @@ Here is a list of all class members with links to the classes they belong to:
  • reserveNewTkActors() : Nv::Blast::SharedMemory
  • reset() -: Nv::Blast::FixedBoolArray -, Nv::Blast::TkEventQueue +: Nv::Blast::TkEventQueue +, Nv::Blast::FixedBoolArray +, Nv::Blast::FractureToolImpl +, Nv::Blast::PerlinNoise , Nv::Blast::SharedBuffer< T > -, Nv::Blast::SharedMemory -, Nv::Blast::FixedBitmap -, Nv::Blast::FractureTool +, Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > , Nv::Blast::Triangulator -, Nv::Blast::ExtStressSolver -, Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > , Nv::Blast::BooleanEvaluator -, Nv::Blast::PerlinNoise -, Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > -, Nv::Blast::FractureToolImpl -, Nv::Blast::ExtAtomicCounter +, Nv::Blast::FixedBitmap , Nv::Blast::MeshNoiser +, Nv::Blast::ExtAtomicCounter +, Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > +, Nv::Blast::ExtStressSolver +, Nv::Blast::FractureTool +, Nv::Blast::SharedMemory
  • resize() : btAlignedObjectArray< T >
  • Resize() @@ -311,8 +315,8 @@ Here is a list of all class members with links to the classes they belong to:
  • Reverse : Nv::Blast::DList::DList::It
  • RevertAlignToPrincipalAxes() -: VHACD::VoxelSet -, VHACD::TetrahedronSet +: VHACD::TetrahedronSet +, VHACD::VoxelSet , VHACD::PrimitiveSet
  • run() : Nv::Blast::ExtGroupWorkerTask diff --git a/docs/source_docs/files/functions_0x73.html b/docs/source_docs/files/functions_0x73.html index c369251..d080e25 100644 --- a/docs/source_docs/files/functions_0x73.html +++ b/docs/source_docs/files/functions_0x73.html @@ -108,6 +108,8 @@ Here is a list of all class members with links to the classes they belong to: : VHACD::Mesh
  • sc_eps : VHACD::ICHull +
  • scale +: Nv::Blast::CutoutConfiguration
  • scene : Nv::Blast::ExtPxSpawnSettings
  • ScopedResource() @@ -129,7 +131,8 @@ Here is a list of all class members with links to the classes they belong to:
  • serialize() : Nv::Blast::Actor
  • serializeIntoBuffer() -: Nv::Blast::ExtSerializer +: Nv::Blast::ExtSerializationCAPN< TObject, TSerializationReader, TSerializationBuilder > +, Nv::Blast::ExtSerializer , Nv::Blast::ExtSerialization , Nv::Blast::ExtSerializationCAPN< TObject, TSerializationReader, TSerializationBuilder >
  • serializeIntoBuilder() @@ -173,8 +176,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl
  • setChunks() -: Nv::Blast::Serialization::Asset::Asset::Builder -, Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Builder +: Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Builder +, Nv::Blast::Serialization::Asset::Asset::Builder
  • setConvexMesh() : Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder
  • setCount() @@ -206,6 +209,10 @@ Here is a list of all class members with links to the classes they belong to:
  • setID() : Nv::Blast::Serialization::Asset::Asset::Builder , Nv::Blast::TkIdentifiable +
  • setInteriorIndex() +: Nv::Blast::IMeshFileWriter +, Nv::Blast::FbxFileWriter +, Nv::Blast::ObjFileWriter
  • setInteriorMaterialId() : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl @@ -258,8 +265,8 @@ Here is a list of all class members with links to the classes they belong to:
  • setSerializationEncoding() : Nv::Blast::ExtSerialization
  • setSettings() -: Nv::Blast::ExtImpactDamageManager -, Nv::Blast::ExtStressSolver +: Nv::Blast::ExtStressSolver +, Nv::Blast::ExtImpactDamageManager
  • setSize() : Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Builder
  • setSmoothingGroup() @@ -269,16 +276,15 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl
  • setState() -: Nv::Blast::BBoxBasedAccelerator -, Nv::Blast::IntersectionTestingAccelerator +: Nv::Blast::DummyAccelerator +, Nv::Blast::SweepingAccelerator , Nv::Blast::BBoxBasedAccelerator +, Nv::Blast::IntersectionTestingAccelerator , Nv::Blast::DummyAccelerator , Nv::Blast::SpatialAccelerator -, Nv::Blast::DummyAccelerator -, Nv::Blast::SweepingAccelerator
  • setStencil() -: Nv::Blast::VoronoiSitesGenerator -, Nv::Blast::VoronoiSitesGeneratorImpl +: Nv::Blast::VoronoiSitesGeneratorImpl +, Nv::Blast::VoronoiSitesGenerator
  • setSubchunkCount() : Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder
  • setTransform() @@ -303,8 +309,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxVec3::PxVec3::Builder
  • setY() -: Nv::Blast::Serialization::PxQuat::PxQuat::Builder -, Nv::Blast::Serialization::PxVec3::PxVec3::Builder +: Nv::Blast::Serialization::PxVec3::PxVec3::Builder +, Nv::Blast::Serialization::PxQuat::PxQuat::Builder
  • setZ() : Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxVec3::PxVec3::Builder @@ -320,33 +326,33 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::SimplexNoise
  • simulationFilterData : Nv::Blast::ExtPxShapeDescTemplate +
  • size() +: Nv::Blast::FixedArray< T > +
  • Size() +: VHACD::SArray< T, N >
  • size : NvBlastDataBlock +, Nv::Blast::FixedQueue< T > , btAlignedObjectArray< T > -
  • Size() -: VHACD::SArray< T, N > -
  • size() -: Nv::Blast::FixedArray< T > , Nv::Blast::FixedPriorityQueue< Element, Comparator > -, Nv::Blast::FixedQueue< T >
  • skipObject() : Nv::Blast::ExtSerialization
  • slicing() -: Nv::Blast::FractureToolImpl -, Nv::Blast::FractureTool +: Nv::Blast::FractureToolImpl +, Nv::Blast::FractureTool
  • smoothingGroup -: Nv::Blast::Triangle -, Nv::Blast::TriangleIndexed +: Nv::Blast::TriangleIndexed +, Nv::Blast::Triangle , Nv::Blast::Facet
  • sortToCCW() : Nv::Blast::TriangleProcessor
  • spawn() -: Nv::Blast::final -, Nv::Blast::ExtPxFamily -
  • Split -: Nv::Blast::TkEvent +: Nv::Blast::ExtPxFamily +, Nv::Blast::final
  • split() : Nv::Blast::Actor +
  • Split +: Nv::Blast::TkEvent
  • splitRequiredScratch() : Nv::Blast::Actor
  • startProcess() @@ -370,14 +376,14 @@ Here is a list of all class members with links to the classes they belong to: : NvBlastDamageProgram
  • submeshCount : Nv::Blast::ExporterMeshData -
  • submeshNames -: Nv::Blast::ExporterMeshData +
  • submeshMats +: Nv::Blast::ExporterMeshData
  • submeshOffsets : Nv::Blast::ExporterMeshData
  • subscribe() -: Nv::Blast::ExtPxFamily +: Nv::Blast::ExtPxManager , Nv::Blast::final -, Nv::Blast::ExtPxManager +, Nv::Blast::ExtPxFamily , Nv::Blast::final
  • Subtype : Nv::Blast::TkJointUpdateEvent @@ -392,13 +398,13 @@ Here is a list of all class members with links to the classes they belong to:
  • SupportFlag : NvBlastChunkDesc
  • surfaceResolution -: Nv::Blast::SlicingConfiguration +: Nv::Blast::NoiseConfiguration
  • swap() : btAlignedObjectArray< T >
  • SweepingAccelerator() : Nv::Blast::SweepingAccelerator
  • syncFamily() -: Nv::Blast::ExtSync +: Nv::Blast::ExtSync diff --git a/docs/source_docs/files/functions_0x74.html b/docs/source_docs/files/functions_0x74.html index e6b490c..017a953 100644 --- a/docs/source_docs/files/functions_0x74.html +++ b/docs/source_docs/files/functions_0x74.html @@ -203,34 +203,34 @@ Here is a list of all class members with links to the classes they belong to: , Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder , Nv::Blast::Serialization::UUID::UUID::Reader
  • totalSize() -: Nv::Blast::Serialization::UUID::UUID::Reader -, Nv::Blast::Serialization::PxVec3::PxVec3::Reader +: Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Reader +, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader , Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Reader -, Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Reader , Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Reader , Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder +, Nv::Blast::Serialization::UUID::UUID::Reader , Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Reader -, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader -, Nv::Blast::Serialization::Asset::Asset::Reader , Nv::Blast::Serialization::Asset::Asset::Builder -, Nv::Blast::Serialization::TkAsset::TkAsset::Reader +, Nv::Blast::Serialization::Asset::Asset::Reader +, Nv::Blast::Serialization::PxVec3::PxVec3::Reader +, Nv::Blast::Serialization::PxTransform::PxTransform::Reader , Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Builder , Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Reader , Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Builder -, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder -, Nv::Blast::Serialization::PxQuat::PxQuat::Builder -, Nv::Blast::Serialization::PxTransform::PxTransform::Reader -, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder -, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder -, Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Builder +, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader , Nv::Blast::Serialization::PxTransform::PxTransform::Builder +, Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Builder +, Nv::Blast::Serialization::TkAsset::TkAsset::Reader +, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder +, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Reader +, Nv::Blast::Serialization::PxQuat::PxQuat::Reader , Nv::Blast::Serialization::UUID::UUID::Builder , Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader , Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Builder -, Nv::Blast::Serialization::PxQuat::PxQuat::Reader -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder -, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Reader +, Nv::Blast::Serialization::PxQuat::PxQuat::Builder +, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder , Nv::Blast::Serialization::TkAsset::TkAsset::Builder , Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Reader , Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder @@ -238,28 +238,29 @@ Here is a list of all class members with links to the classes they belong to:
  • tr : Nv::Blast::EdgeToTriangles
  • transform -: Nv::Blast::ExtPxSubchunk +: Nv::Blast::ExtSyncEventPhysicsSync::ExtSyncEventPhysicsSync::ActorData +, Nv::Blast::CutoutConfiguration , Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::SubchunkDesc -, Nv::Blast::ExtSyncEventPhysicsSync::ExtSyncEventPhysicsSync::ActorData +, Nv::Blast::ExtPxSubchunk
  • Triangle() -: Nv::Blast::Triangle +: Nv::Blast::Triangle
  • triangleBoundingBoxIntersection() : Nv::Blast::TriangleProcessor
  • TriangleIndexed() -: Nv::Blast::TriangleIndexed +: Nv::Blast::TriangleIndexed
  • TriangleProcessor() : Nv::Blast::TriangleProcessor
  • triangulate() : Nv::Blast::Triangulator
  • triangulate3d() -: FLOAT_MATH::fm_Triangulate +: FLOAT_MATH::fm_Triangulate
  • trId : Nv::Blast::PlaneChunkIndexer
  • trimCollisionGeometry() -: Nv::Blast::ConvexMeshBuilder -, Nv::Blast::ConvexMeshBuilderImpl +: Nv::Blast::ConvexMeshBuilderImpl +, Nv::Blast::ConvexMeshBuilder
  • TrPrcTriangle() -: Nv::Blast::TrPrcTriangle +: Nv::Blast::TrPrcTriangle
  • TrPrcTriangle2d() : Nv::Blast::TrPrcTriangle2d
  • TryLock() @@ -267,27 +268,28 @@ Here is a list of all class members with links to the classes they belong to:
  • tryRead() : Nv::Blast::ExtInputStream
  • type -: Nv::Blast::Array< T > -, Nv::Blast::HashSet< Key, HashFn > +: Nv::Blast::InlineArray< T, N > +
  • Type +: Nv::Blast::TkEvent +
  • type +: Nv::Blast::ExtSyncEvent +, Nv::Blast::TkEvent
  • Type : Nv::Blast::Serialization::PxConvexMeshGeometry
  • type -: Nv::Blast::TkEvent +: Nv::Blast::HashMap< Key, Value, HashFn >
  • Type -: Nv::Blast::Serialization::NvBlastDataBlock -, NvBlastMessage +: NvBlastMessage
  • type -: Nv::Blast::InlineArray< T, N > -, Nv::Blast::ExtSyncEvent +: Nv::Blast::HashSet< Key, HashFn >
  • Type : NvBlastDataBlock +, Nv::Blast::Serialization::NvBlastDataBlock
  • type -: Nv::Blast::HashMap< Key, Value, HashFn > -
  • Type -: Nv::Blast::TkEvent +: Nv::Blast::Array< T >
  • TypeCount -: Nv::Blast::TkEvent -, Nv::Blast::TkTypeIndex +: Nv::Blast::TkTypeIndex +, Nv::Blast::TkEvent diff --git a/docs/source_docs/files/functions_0x75.html b/docs/source_docs/files/functions_0x75.html index f908c45..73abf51 100644 --- a/docs/source_docs/files/functions_0x75.html +++ b/docs/source_docs/files/functions_0x75.html @@ -110,12 +110,15 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::ExtPxFamily , Nv::Blast::ExtPxManager , Nv::Blast::final +
  • Update() +: VHACD::IVHACD::IVHACD::IUserCallback
  • update() : Nv::Blast::ExtPxStressSolver , Nv::Blast::final , Nv::Blast::ExtStressSolver -
  • Update() -: VHACD::IVHACD::IVHACD::IUserCallback +
  • updateBaseMesh() +: Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl
  • updateJoint() : Nv::Blast::final
  • UpdateMinMax() @@ -127,20 +130,22 @@ Here is a list of all class members with links to the classes they belong to:
  • UpperSupport : Nv::Blast::Asset::Asset::ChunkAnnotation
  • userData -: NvBlastChunk -, Nv::Blast::TkActorData -, Nv::Blast::TkObject +: Nv::Blast::Triangle +, NvBlastChunkDesc +, NvBlastChunk , Nv::Blast::ExtPxAsset , Nv::Blast::TriangleIndexed
  • userdata +: NvBlastChunkFractureData +
  • userData +: Nv::Blast::TkObject +
  • userdata : NvBlastBondFractureData -, NvBlastChunkFractureData
  • userData -: NvBlastBond -, NvBlastChunkDesc -, Nv::Blast::Triangle -, Nv::Blast::ExtPxFamily +: Nv::Blast::TkActorData , Nv::Blast::Facet +, NvBlastBond +, Nv::Blast::ExtPxFamily
  • userIntData : Nv::Blast::TkIdentifiable
  • UUID() diff --git a/docs/source_docs/files/functions_0x76.html b/docs/source_docs/files/functions_0x76.html index 43595ff..bef7462 100644 --- a/docs/source_docs/files/functions_0x76.html +++ b/docs/source_docs/files/functions_0x76.html @@ -104,6 +104,7 @@ Here is a list of all class members with links to the classes they belong to: : FbxUtils
  • vertices : btConvexHullComputer +, Nv::Blast::Cutout
  • VHACD() : VHACD::VHACD
  • view() @@ -112,17 +113,19 @@ Here is a list of all class members with links to the classes they belong to: : NvBlastTimers
  • VisibleChunkIt() : Nv::Blast::Actor::Actor::VisibleChunkIt -
  • Volume -: VHACD::TetrahedronSet +
  • Volume() +: VHACD::Volume
  • volume -: NvBlastChunk -, NvBlastChunkDesc +: NvBlastChunkDesc
  • Volume : VHACD::VoxelSet -, VHACD::Volume +, VHACD::TetrahedronSet +
  • volume +: NvBlastChunk
  • voronoiFracturing() -: Nv::Blast::FractureTool -, Nv::Blast::FractureToolImpl +: Nv::Blast::FractureToolImpl +, Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl , Nv::Blast::FractureTool
  • VoronoiSitesGeneratorImpl() : Nv::Blast::VoronoiSitesGeneratorImpl diff --git a/docs/source_docs/files/functions_0x78.html b/docs/source_docs/files/functions_0x78.html index 05bbfd8..79e4b15 100644 --- a/docs/source_docs/files/functions_0x78.html +++ b/docs/source_docs/files/functions_0x78.html @@ -87,18 +87,19 @@ Here is a list of all class members with links to the classes they belong to:

    - x -

    diff --git a/docs/source_docs/files/functions_0x79.html b/docs/source_docs/files/functions_0x79.html index 009af39..5e86a8d 100644 --- a/docs/source_docs/files/functions_0x79.html +++ b/docs/source_docs/files/functions_0x79.html @@ -93,13 +93,14 @@ Here is a list of all class members with links to the classes they belong to: , NvcVec3i , NvcVec2i , NvcQuat +, NvcVec4
  • Y() : VHACD::Vec2< T >
  • y -: NvcVec3 -, NvcVec2 +: NvcVec2 , Nv::Blast::VSA::Vec3 -, NvcVec4 +, Nv::Blast::POINT2D +, NvcVec3
  • Y() : VHACD::Vec2< T >
  • y_slices diff --git a/docs/source_docs/files/functions_0x7e.html b/docs/source_docs/files/functions_0x7e.html index b5c4d01..4fba666 100644 --- a/docs/source_docs/files/functions_0x7e.html +++ b/docs/source_docs/files/functions_0x7e.html @@ -110,6 +110,8 @@ Here is a list of all class members with links to the classes they belong to: : Nv::Blast::CollisionHullImpl
  • ~ConvexMeshBuilder() : Nv::Blast::ConvexMeshBuilder +
  • ~CutoutSet() +: Nv::Blast::CutoutSet
  • ~ErrorCallback() : Nv::Blast::ErrorCallback
  • ~ExtDamageAcceleratorAABBTree() diff --git a/docs/source_docs/files/functions_func.html b/docs/source_docs/files/functions_func.html index bf635c2..f817b23 100644 --- a/docs/source_docs/files/functions_func.html +++ b/docs/source_docs/files/functions_func.html @@ -177,17 +177,17 @@ , VHACD::TetrahedronSet , VHACD::Volume
  • allocate() -: Nv::Blast::LocalBuffer< T > -, Nv::Blast::SharedMemory -, btAlignedObjectArray< T > -, Nv::Blast::SharedBuffer< T > +: Nv::Blast::SharedMemory
  • Allocate() : VHACD::SArray< T, N >
  • allocate() -: btAlignedAllocator< T, Alignment > -, Nv::Blast::Allocator +: Nv::Blast::Allocator +, Nv::Blast::LocalBuffer< T > +, btAlignedAllocator< T, Alignment > +, btAlignedObjectArray< T > , Nv::Blast::AllocatorCallback , Nv::Blast::SharedBlock< T > +, Nv::Blast::SharedBuffer< T >
  • Allocator() : Nv::Blast::Allocator
  • allocData() diff --git a/docs/source_docs/files/functions_func_0x63.html b/docs/source_docs/files/functions_func_0x63.html index bae2700..f213bc3 100644 --- a/docs/source_docs/files/functions_func_0x63.html +++ b/docs/source_docs/files/functions_func_0x63.html @@ -142,11 +142,11 @@ : Nv::Blast::CollisionHullImpl
  • CollisionParams() : Nv::Blast::CollisionParams +
  • compute() +: btConvexHullComputer
  • Compute() : VHACD::VHACD , VHACD::IVHACD -
  • compute() -: btConvexHullComputer
  • ComputeBB() : VHACD::PrimitiveSet , VHACD::VoxelSet @@ -183,10 +183,10 @@ , VHACD::VoxelSet , VHACD::TetrahedronSet
  • ComputeVolume() -: VHACD::Mesh +: VHACD::TetrahedronSet +, VHACD::Mesh , VHACD::PrimitiveSet , VHACD::VoxelSet -, VHACD::TetrahedronSet
  • construct() : btAlignedAllocator< T, Alignment >
  • Convert() @@ -200,64 +200,75 @@ : Nv::Blast::ConvexMeshBuilderImpl
  • cooking() : Nv::Blast::ApexImporter::ApexDestruction -
  • Copy() -: VHACD::TMMesh
  • copy() : btAlignedObjectArray< T > +
  • Copy() +: VHACD::TMMesh
  • copyFromArray() : btAlignedObjectArray< T >
  • CopyPoints() : VHACD::Mesh
  • create() -: Nv::Blast::ExtPxAsset -, Nv::Blast::ExtPxStressSolver -, Nv::Blast::ExtPxManager -, Nv::Blast::ExtGroupTaskManager +: Nv::Blast::Asset +, Nv::Blast::ExtPxAsset
  • Create() -: VHACD::PrimitiveSet +: VHACD::TetrahedronSet , VHACD::VoxelSet -, VHACD::TetrahedronSet
  • create() : Nv::Blast::ExtSync -, Nv::Blast::ExtPxAsset , Nv::Blast::ExtImpactDamageManager -, Nv::Blast::Asset +
  • Create() +: VHACD::PrimitiveSet +
  • create() +: Nv::Blast::ExtPxAsset +, Nv::Blast::final +, Nv::Blast::ExtPxAsset +, Nv::Blast::ExtPxManager +, Nv::Blast::ExtGroupTaskManager , Nv::Blast::Actor , Nv::Blast::TkActorImpl -, Nv::Blast::final +, Nv::Blast::ExtPxStressSolver , Nv::Blast::ExtStressSolver
  • createActor() : Nv::Blast::TkFrameworkImpl , Nv::Blast::TkFramework
  • createAsset() -: Nv::Blast::TkFrameworkImpl -, Nv::Blast::TkFramework -, Nv::Blast::TkFrameworkImpl +: Nv::Blast::TkFramework +, Nv::Blast::TkFrameworkImpl , Nv::Blast::TkFramework
  • createBondBetweenMeshes() -: Nv::Blast::BlastBondGeneratorImpl +: Nv::Blast::BlastBondGenerator +, Nv::Blast::BlastBondGeneratorImpl , Nv::Blast::BlastBondGenerator
  • createChunkMesh() -: Nv::Blast::FractureToolImpl -, Nv::Blast::FractureTool +: Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl
  • createFamily() -: Nv::Blast::ExtPxManager -, Nv::Blast::final +: Nv::Blast::final +, Nv::Blast::ExtPxManager
  • createGroup() -: Nv::Blast::TkFrameworkImpl -, Nv::Blast::TkFramework +: Nv::Blast::TkFramework +, Nv::Blast::TkFrameworkImpl
  • createJoint() -: Nv::Blast::TkFramework -, Nv::Blast::final +: Nv::Blast::TkFrameworkImpl , Nv::Blast::ExtPxManager -, Nv::Blast::TkFrameworkImpl +, Nv::Blast::TkFramework +, Nv::Blast::final
  • createNewMesh() : Nv::Blast::BooleanEvaluator
  • createRaycastMesh() -: VHACD::RaycastMesh +: VHACD::RaycastMesh
  • createRequiredScratch() : Nv::Blast::Actor , Nv::Blast::Asset +
  • cut() +: Nv::Blast::FractureToolImpl +, Nv::Blast::FractureTool +
  • cutout() +: Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl +
  • CutoutSetImpl() +: Nv::Blast::CutoutSetImpl diff --git a/docs/source_docs/files/functions_func_0x66.html b/docs/source_docs/files/functions_func_0x66.html index 5bf8560..737d691 100644 --- a/docs/source_docs/files/functions_func_0x66.html +++ b/docs/source_docs/files/functions_func_0x66.html @@ -128,8 +128,8 @@ : Nv::Blast::final , Nv::Blast::ExtDamageAcceleratorInternal
  • findIslands() -: Nv::Blast::FamilyGraph -, Nv::Blast::Actor +: Nv::Blast::Actor +, Nv::Blast::FamilyGraph
  • findIslandsRequiredScratch() : Nv::Blast::FamilyGraph
  • findLinearSearch() @@ -141,6 +141,12 @@ : Nv::Blast::TkFrameworkImpl
  • findSerializer() : Nv::Blast::ExtSerializationInternal +
  • fitAllUvToRect() +: Nv::Blast::FractureToolImpl +, Nv::Blast::FractureTool +
  • fitUvToRect() +: Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl
  • FixedArray() : Nv::Blast::FixedArray< T >
  • FixedBitmap() diff --git a/docs/source_docs/files/functions_func_0x67.html b/docs/source_docs/files/functions_func_0x67.html index b70ef9a..e99bbb5 100644 --- a/docs/source_docs/files/functions_func_0x67.html +++ b/docs/source_docs/files/functions_func_0x67.html @@ -161,6 +161,8 @@ , Nv::Blast::Triangulator
  • getBaseMeshIndexed() : Nv::Blast::Triangulator +
  • getBaseMeshNotFitted() +: Nv::Blast::Triangulator
  • getBlastFBXAxisSystem() : FbxUtils
  • getBlastFBXUnit() @@ -174,10 +176,10 @@ , Nv::Blast::Asset , Nv::Blast::TkAsset
  • getBondHealths() -: Nv::Blast::TkActorImpl +: Nv::Blast::TkActor +, Nv::Blast::TkActorImpl , Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader , Nv::Blast::Actor -, Nv::Blast::TkActor
  • getBondHealthsArray() : Nv::Blast::final
  • getBonds() @@ -267,8 +269,8 @@
  • getCollisionGeometryLayerName() : FbxUtils
  • GetConstraint() -: VHACD::IVHACD -, VHACD::VHACD +: VHACD::VHACD +, VHACD::IVHACD
  • getContiguousLowerSupportIndex() : Nv::Blast::Asset
  • GetConvexHull() @@ -278,6 +280,27 @@
  • getConvexMesh() : Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder +
  • getCutoutCount() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopCount() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopSize() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopVertexFlags() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutLoopVertexIndex() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutVertex() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl +
  • getCutoutVertexCount() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl
  • GetData() : VHACD::CircularListElement< T > , VHACD::CircularList< T > @@ -301,6 +324,9 @@ : Nv::Blast::ExtSerializer
  • GetDiagBB() : VHACD::Mesh +
  • getDimensions() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl
  • GetDistance() : VHACD::Vec3< T >
  • getDistance() @@ -484,25 +510,25 @@
  • getLastTickCount() : Nv::Blast::Time
  • getLeafChunkCount() -: Nv::Blast::TkAsset +: Nv::Blast::Actor , Nv::Blast::Serialization::Asset::Asset::Reader , Nv::Blast::Serialization::Asset::Asset::Builder -, Nv::Blast::Actor +, Nv::Blast::TkAsset
  • getLowerSupportChunkCount() : Nv::Blast::Asset
  • getLowerSupportChunkHealths() : Nv::Blast::Actor
  • getMaterial() -: Nv::Blast::final -, Nv::Blast::ExtPxFamily +: Nv::Blast::ExtPxFamily +, Nv::Blast::final
  • getMaterialCount() -: Nv::Blast::IMeshFileReader +: Nv::Blast::ObjFileReader +, Nv::Blast::IMeshFileReader , Nv::Blast::FbxFileReader -, Nv::Blast::ObjFileReader
  • getMaterialIds() -: Nv::Blast::FbxFileReader +: Nv::Blast::IMeshFileReader +, Nv::Blast::FbxFileReader , Nv::Blast::ObjFileReader -, Nv::Blast::IMeshFileReader
  • getMaterialName() : Nv::Blast::IMeshFileReader , Nv::Blast::FbxFileReader @@ -519,14 +545,14 @@
  • getMesh() : Nv::Blast::MeshNoiser
  • getMeshFlags() -: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder
  • getMeshOverlap() : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl
  • getMeshVolume() -: Nv::Blast::MeshImpl -, Nv::Blast::Mesh +: Nv::Blast::Mesh +, Nv::Blast::MeshImpl
  • GetMinBB() : VHACD::Mesh , VHACD::VoxelSet @@ -535,20 +561,22 @@ : VHACD::VoxelSet
  • getName() : Nv::Blast::ExtGroupWorkerTask -, Nv::Blast::ExtSerializer -, Nv::Blast::TkTypeImpl , Nv::Blast::TkType +, Nv::Blast::TkTypeImpl +, Nv::Blast::ExtSerializer
  • getNameInternal() : Nv::Blast::TkTypeImpl
  • GetNConvexHulls() -: VHACD::VHACD -, VHACD::IVHACD +: VHACD::IVHACD +, VHACD::VHACD
  • GetNEdges() : VHACD::TMMesh
  • GetNext() : VHACD::CircularListElement< T >
  • getNext() : Nv::Blast::DLink +
  • GetNext() +: VHACD::CircularListElement< T >
  • getNextEdgeOfFace() : btConvexHullComputer::btConvexHullComputer::Edge
  • getNextEdgeOfVertex() @@ -560,19 +588,19 @@ , Nv::Blast::BBoxBasedAccelerator , Nv::Blast::IntersectionTestingAccelerator
  • getNodeCount() -: Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder -, Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Reader +: Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Reader +, Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder
  • getNodeIndices() : Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Reader , Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder
  • GetNorm() -: VHACD::Vec2< T > -, VHACD::Vec3< T > +: VHACD::Vec3< T > +, VHACD::Vec2< T >
  • getNormal() : Nv::Blast::Triangle -, Nv::Blast::TrPrcTriangle -, Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Builder , Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Reader +, Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Builder +, Nv::Blast::TrPrcTriangle
  • getNormalizedDamage() : NvBlastExtMaterial
  • getNormalsArray() @@ -584,19 +612,19 @@
  • GetNPoints() : VHACD::Mesh
  • GetNPrimitives() -: VHACD::VoxelSet +: VHACD::PrimitiveSet +, VHACD::VoxelSet , VHACD::TetrahedronSet -, VHACD::PrimitiveSet
  • GetNPrimitivesInsideSurf() -: VHACD::PrimitiveSet +: VHACD::VoxelSet , VHACD::TetrahedronSet , VHACD::Volume -, VHACD::VoxelSet +, VHACD::PrimitiveSet
  • GetNPrimitivesOnSurf() -: VHACD::PrimitiveSet -, VHACD::VoxelSet +: VHACD::VoxelSet , VHACD::TetrahedronSet , VHACD::Volume +, VHACD::PrimitiveSet
  • GetNTriangles() : VHACD::TMMesh , VHACD::Mesh @@ -620,40 +648,44 @@ : Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline , Nv::Blast::Serialization::PxTransform::PxTransform::Reader , Nv::Blast::Serialization::PxTransform::PxTransform::Builder +
  • getParentChunkId() +: Nv::Blast::Triangulator
  • getParentChunkIndex() : Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Reader
  • getPayload() : Nv::Blast::TkEvent
  • getPhysics() -: Nv::Blast::final -, Nv::Blast::ExtPxManager +: Nv::Blast::ExtPxManager +, Nv::Blast::final
  • getPhysXActor() -: Nv::Blast::final -, Nv::Blast::ExtPxActor +: Nv::Blast::ExtPxActor +, Nv::Blast::final
  • GetPoint() -: VHACD::VoxelSet +: VHACD::Mesh +, VHACD::VoxelSet , VHACD::Mesh +, VHACD::VoxelSet
  • GetPoints() -: VHACD::VoxelSet -, VHACD::Mesh +: VHACD::Mesh +, VHACD::VoxelSet
  • GetPointsBuffer() : VHACD::Mesh
  • getPositionArray() -: Nv::Blast::IMeshFileReader -, Nv::Blast::FbxFileReader +: Nv::Blast::FbxFileReader +, Nv::Blast::IMeshFileReader , Nv::Blast::ObjFileReader
  • getPositionedMapping() : Nv::Blast::Triangulator -
  • GetPrev() -: VHACD::CircularListElement< T >
  • getPrev() : Nv::Blast::DLink +
  • GetPrev() +: VHACD::CircularListElement< T >
  • getPxActorCount() -: Nv::Blast::final -, Nv::Blast::ExtPxManager +: Nv::Blast::ExtPxManager +, Nv::Blast::final
  • getPxActorDesc() -: Nv::Blast::ExtPxFamily -, Nv::Blast::final +: Nv::Blast::final +, Nv::Blast::ExtPxFamily
  • getPxAsset() : Nv::Blast::final , Nv::Blast::ExtPxFamily @@ -661,9 +693,9 @@ : Nv::Blast::ExtPxFamily , Nv::Blast::final
  • getQ() -: Nv::Blast::Serialization::PxTransform::PxTransform::Reader +: Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline +, Nv::Blast::Serialization::PxTransform::PxTransform::Reader , Nv::Blast::Serialization::PxTransform::PxTransform::Builder -, Nv::Blast::Serialization::PxTransform::PxTransform::Pipeline
  • getRandomValue() : Nv::Blast::RandomGeneratorBase
  • getRenderGeometryLayerName() @@ -672,17 +704,18 @@ : btConvexHullComputer::btConvexHullComputer::Edge
  • getRotation() : Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Pipeline -, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder , Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader +, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder
  • GetSacle() : VHACD::TetrahedronSet +
  • getScale() +: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder +, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Pipeline +, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader
  • GetScale() : VHACD::VoxelSet
  • getScale() -: Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Reader -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader -, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Pipeline +: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader , Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder , Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Pipeline
  • getScene() @@ -695,14 +728,13 @@ : Nv::Blast::ExtStressSolver
  • getSize() : Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Builder +, Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Reader
  • GetSize() : VHACD::CircularList< T > -
  • getSize() -: Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Reader
  • getSmoothingGroups() : Nv::Blast::FbxFileReader -, Nv::Blast::IMeshFileReader , Nv::Blast::ObjFileReader +, Nv::Blast::IMeshFileReader
  • getSolver() : Nv::Blast::ExtPxStressSolver , Nv::Blast::final @@ -718,19 +750,19 @@
  • getStressErrorLinear() : Nv::Blast::ExtStressSolver
  • getSubchunkCount() -: Nv::Blast::final -, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Reader +: Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder , Nv::Blast::ExtPxAsset -, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder +, Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Reader +, Nv::Blast::final
  • getSubchunks() : Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader -, Nv::Blast::ExtPxAsset , Nv::Blast::final +, Nv::Blast::ExtPxAsset
  • getSubchunksArray() : Nv::Blast::final
  • getSubchunkShapes() -: Nv::Blast::ExtPxFamily -, Nv::Blast::final +: Nv::Blast::final +, Nv::Blast::ExtPxFamily
  • getSubsupportChunkHealths() : Nv::Blast::FamilyHeader , Nv::Blast::Actor @@ -757,26 +789,26 @@ , Nv::Blast::ExtPxFamily
  • getTransform() : Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Pipeline -, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder , Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Reader +, Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder
  • getTransformation() -: Nv::Blast::FractureToolImpl -, Nv::Blast::FractureTool +: Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl
  • GetTriangle() : VHACD::Mesh
  • getTriangleIntersection() : Nv::Blast::TriangleProcessor
  • GetTriangles() -: VHACD::TMMesh +: VHACD::Mesh +, VHACD::TMMesh , VHACD::Mesh -, VHACD::TMMesh
  • GetTrianglesBuffer() : VHACD::Mesh
  • getType() -: Nv::Blast::TkIdentifiable -, Nv::Blast::TkFramework +: Nv::Blast::TkFramework , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Reader +, Nv::Blast::TkIdentifiable , Nv::Blast::TkFrameworkImpl
  • getUniformInitialBondHealth() : Nv::Blast::Serialization::ExtPxAsset::ExtPxAsset::Reader @@ -790,9 +822,9 @@ : Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Reader , Nv::Blast::Serialization::NvBlastChunk::NvBlastChunk::Reader
  • getUvArray() -: Nv::Blast::ObjFileReader +: Nv::Blast::FbxFileReader , Nv::Blast::IMeshFileReader -, Nv::Blast::FbxFileReader +, Nv::Blast::ObjFileReader
  • getValue() : Nv::Blast::Serialization::UUID::UUID::Reader , Nv::Blast::Serialization::UUID::UUID::Builder @@ -803,6 +835,8 @@ , Nv::Blast::TkTypeImpl
  • getVersionInternal() : Nv::Blast::TkTypeImpl +
  • getVertex() +: Nv::Blast::Triangle
  • getVertexDouble() : FLOAT_MATH::fm_VertexIndex
  • getVertexFloat() @@ -810,13 +844,16 @@
  • GetVertices() : VHACD::TMMesh
  • getVertices() +: Nv::Blast::MeshImpl +
  • GetVertices() +: VHACD::TMMesh +
  • getVertices() : Nv::Blast::Mesh -, Nv::Blast::MeshImpl
  • getVerticesCount() -: Nv::Blast::FbxFileReader +: Nv::Blast::MeshImpl , Nv::Blast::IMeshFileReader , Nv::Blast::Mesh -, Nv::Blast::MeshImpl +, Nv::Blast::FbxFileReader , Nv::Blast::ObjFileReader
  • getVerticesDouble() : FLOAT_MATH::fm_VertexIndex @@ -827,8 +864,8 @@ , Nv::Blast::MeshImpl
  • getVisibleChunkCount() : Nv::Blast::TkActorImpl -, Nv::Blast::TkActor , Nv::Blast::Actor +, Nv::Blast::TkActor
  • getVisibleChunkIndices() : Nv::Blast::TkActorImpl , Nv::Blast::TkActor @@ -838,13 +875,13 @@ : Nv::Blast::VoronoiSitesGenerator , Nv::Blast::VoronoiSitesGeneratorImpl
  • GetVoxel() -: VHACD::Volume +: VHACD::Volume
  • GetVoxels() -: VHACD::VoxelSet +: VHACD::VoxelSet
  • getW() -: btVector4 +: Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxQuat::PxQuat::Reader -, Nv::Blast::Serialization::PxQuat::PxQuat::Builder +, btVector4
  • getWeldedVerticesCount() : Nv::Blast::Triangulator
  • getWordsCount() @@ -854,20 +891,20 @@
  • getWrittenBytes() : Nv::Blast::ExtKJPxOutputStream
  • getX() -: Nv::Blast::Serialization::PxQuat::PxQuat::Reader -, Nv::Blast::Serialization::PxVec3::PxVec3::Builder +: Nv::Blast::Serialization::PxVec3::PxVec3::Builder , Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxVec3::PxVec3::Reader +, Nv::Blast::Serialization::PxQuat::PxQuat::Reader
  • getY() -: Nv::Blast::Serialization::PxVec3::PxVec3::Builder -, Nv::Blast::Serialization::PxVec3::PxVec3::Reader +: Nv::Blast::Serialization::PxVec3::PxVec3::Reader , Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxQuat::PxQuat::Reader +, Nv::Blast::Serialization::PxVec3::PxVec3::Builder
  • getZ() : Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxQuat::PxQuat::Reader -, Nv::Blast::Serialization::PxVec3::PxVec3::Reader , Nv::Blast::Serialization::PxVec3::PxVec3::Builder +, Nv::Blast::Serialization::PxVec3::PxVec3::Reader
  • GraphNodeIt() : Nv::Blast::Actor::Actor::GraphNodeIt diff --git a/docs/source_docs/files/functions_func_0x69.html b/docs/source_docs/files/functions_func_0x69.html index 027c658..9ea0e43 100644 --- a/docs/source_docs/files/functions_func_0x69.html +++ b/docs/source_docs/files/functions_func_0x69.html @@ -197,11 +197,14 @@ : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl
  • isMeshContainOpenEdges() -: Nv::Blast::FractureTool -, Nv::Blast::FractureToolImpl +: Nv::Blast::FractureToolImpl +, Nv::Blast::FractureTool
  • isPending() : Nv::Blast::TkActorImpl , Nv::Blast::TkActor +
  • isPeriodic() +: Nv::Blast::CutoutSet +, Nv::Blast::CutoutSetImpl
  • isPointContainedInMesh() : Nv::Blast::BooleanEvaluator
  • isPointInside() @@ -225,11 +228,11 @@
  • isUsed() : Nv::Blast::SharedMemory
  • isValid() -: Nv::Blast::MeshImpl -, Nv::Blast::Mesh +: Nv::Blast::Mesh +, Nv::Blast::ApexImporter::ApexDestruction , Nv::Blast::ApexImporter::ApexImportTool , Nv::Blast::ExtAtomicCounter -, Nv::Blast::ApexImporter::ApexDestruction +, Nv::Blast::MeshImpl
  • It() : Nv::Blast::DList::DList::It
  • IteratorBase() diff --git a/docs/source_docs/files/functions_func_0x6f.html b/docs/source_docs/files/functions_func_0x6f.html index 9dc845b..83a5442 100644 --- a/docs/source_docs/files/functions_func_0x6f.html +++ b/docs/source_docs/files/functions_func_0x6f.html @@ -180,40 +180,45 @@ : VHACD::Vec2< T > , VHACD::Vec3< T >
  • operator/=() -: VHACD::Vec2< T > -, VHACD::Vec3< T > +: VHACD::Vec3< T > +, VHACD::Vec2< T >
  • operator<() -: Nv::Blast::EdgeFacetIntersectionData -, Nv::Blast::SegmentToIndex +: Nv::Blast::POINT2D , VHACD::Vec3< T > +, Nv::Blast::SegmentToIndex +, Nv::Blast::EdgeFacetIntersectionData , Nv::Blast::Edge
  • operator=() -: btAlignedAllocator< T, Alignment > +: btAlignedObjectArray< T > +, VHACD::Vec3< T > +, Nv::Blast::TrPrcTriangle , Nv::Blast::ApexImporter::ApexImportTool -, Nv::Blast::TrPrcTriangle2d , VHACD::Vec2< T > -, VHACD::CircularList< T > -, btAlignedObjectArray< T > , VHACD::ICHull -, VHACD::Vec3< T > -, Nv::Blast::TrPrcTriangle +, VHACD::CircularList< T > , VHACD::SArray< T, N > +, Nv::Blast::TrPrcTriangle2d +, btAlignedAllocator< T, Alignment >
  • operator==() : Nv::Blast::TkType , Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > +, Nv::Blast::POINT2D
  • operator>() : VHACD::Vec3< T >
  • operator[]() -: VHACD::SArray< T, N > +: Nv::Blast::FixedArray< T > , VHACD::Vec3< T > +, VHACD::SArray< T, N > +, btAlignedObjectArray< T > +, VHACD::Vec3< T > +, btAlignedObjectArray< T > , VHACD::Vec2< T > , Nv::Blast::FixedArray< T > , VHACD::SArray< T, N > -, btAlignedObjectArray< T > -, VHACD::Vec3< T > +, VHACD::Vec2< T >
  • operator^() -: VHACD::Vec2< T > -, VHACD::Vec3< T > +: VHACD::Vec3< T > +, VHACD::Vec2< T > diff --git a/docs/source_docs/files/functions_func_0x70.html b/docs/source_docs/files/functions_func_0x70.html index a1b21ae..335bfb6 100644 --- a/docs/source_docs/files/functions_func_0x70.html +++ b/docs/source_docs/files/functions_func_0x70.html @@ -138,15 +138,17 @@ , Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Pipeline
  • PlaneChunkIndexer() : Nv::Blast::PlaneChunkIndexer +
  • POINT2D() +: Nv::Blast::POINT2D
  • pop() : Nv::Blast::FixedPriorityQueue< Element, Comparator >
  • pop_back() : btAlignedObjectArray< T > -
  • PopBack() -: VHACD::SArray< T, N >
  • popBack() : Nv::Blast::FixedArray< T > , Nv::Blast::FixedQueue< T > +
  • PopBack() +: VHACD::SArray< T, N >
  • popFront() : Nv::Blast::FixedQueue< T >
  • postSplitUpdate() @@ -158,31 +160,28 @@ : VHACD::TMMesh
  • process() : Nv::Blast::ExtGroupTaskManagerImpl -, Nv::Blast::TkGroupWorker
  • Process() : VHACD::ICHull
  • process() -: Nv::Blast::TkGroup +: Nv::Blast::TkGroupWorker +, Nv::Blast::TkGroup , Nv::Blast::ExtGroupTaskManager -, Nv::Blast::final -
  • Process() -: VHACD::ICHull -
  • process() -: Nv::Blast::final +, Nv::Blast::final
  • processResults() : Nv::Blast::ExtDamageAcceleratorInternal::ExtDamageAcceleratorInternal::ResultCallback
  • protect() : Nv::Blast::TkEventQueue
  • push() -: Nv::Blast::ExtDamageAcceleratorInternal::ExtDamageAcceleratorInternal::ResultCallback -, Nv::Blast::FixedPriorityQueue< Element, Comparator > +: Nv::Blast::FixedPriorityQueue< Element, Comparator > +, Nv::Blast::ExtDamageAcceleratorInternal::ExtDamageAcceleratorInternal::ResultCallback
  • push_back() : btAlignedObjectArray< T > +
  • pushBack() +: Nv::Blast::FixedArray< T >
  • PushBack() : VHACD::SArray< T, N >
  • pushBack() : Nv::Blast::FixedQueue< T > -, Nv::Blast::FixedArray< T >
  • PxConvexMeshGeometry() : Nv::Blast::Serialization::PxConvexMeshGeometry
  • PxMeshScale() diff --git a/docs/source_docs/files/functions_func_0x72.html b/docs/source_docs/files/functions_func_0x72.html index 1cbbfb3..18e7d64 100644 --- a/docs/source_docs/files/functions_func_0x72.html +++ b/docs/source_docs/files/functions_func_0x72.html @@ -132,7 +132,11 @@
  • reinitialize() : Nv::Blast::TkFamily
  • release() -: Nv::Blast::FbxFileReader +: Nv::Blast::MeshImpl +, VHACD::RaycastMesh +, Nv::Blast::IMeshFileReader +, Nv::Blast::IMeshFileWriter +, Nv::Blast::FbxFileReader , Nv::Blast::FbxFileWriter , Nv::Blast::ObjFileReader , Nv::Blast::ObjFileWriter @@ -144,63 +148,61 @@ , Nv::Blast::ExtPxFamily , Nv::Blast::ExtPxManager , Nv::Blast::ExtPxStressSolver +, Nv::Blast::SharedBlock< T > +, Nv::Blast::TkJointImpl +, Nv::Blast::TkFrameworkImpl , Nv::Blast::ExtGroupTaskManager +, Nv::Blast::TkObject , Nv::Blast::ExtSyncEvent -
  • Release() -: VHACD::IVHACD -, VHACD::VHACD -
  • release() -: Nv::Blast::SharedMemory , Nv::Blast::ExtSync -, Nv::Blast::SharedBlock< T > , Nv::Blast::final -, Nv::Blast::TkObject -, Nv::Blast::TkFramework +, NvBlastExtDamageAccelerator , Nv::Blast::final , Nv::Blast::ExtGroupWorkerTask , Nv::Blast::ExtGroupTaskManagerImpl , Nv::Blast::ExtSerialization , Nv::Blast::ExtSerializer -, NvBlastExtDamageAccelerator -, Nv::Blast::ExtStressSolver +
  • Release() +: VHACD::VHACD +, VHACD::IVHACD +
  • release() +: Nv::Blast::ExtStressSolver , Nv::Blast::Actor , Nv::Blast::BlastBondGenerator +, Nv::Blast::TkFramework , Nv::Blast::ConvexMeshBuilder , Nv::Blast::TkActorImpl -, Nv::Blast::TkFrameworkImpl +, Nv::Blast::CutoutSet , Nv::Blast::VoronoiSitesGenerator -, Nv::Blast::TkJointImpl -, Nv::Blast::FractureTool , Nv::Blast::SharedBuffer< T > +, Nv::Blast::SharedMemory +, Nv::Blast::FractureTool , Nv::Blast::Mesh , Nv::Blast::MeshCleaner , Nv::Blast::AuthoringResult , Nv::Blast::BlastBondGeneratorImpl , Nv::Blast::CollisionHullImpl , Nv::Blast::ConvexMeshBuilderImpl +, Nv::Blast::CutoutSetImpl , Nv::Blast::VoronoiSitesGeneratorImpl , Nv::Blast::FractureToolImpl , Nv::Blast::MeshCleanerImpl -, Nv::Blast::MeshImpl -, VHACD::RaycastMesh -, Nv::Blast::IMeshFileReader -, Nv::Blast::IMeshFileWriter
  • releaseCollisionHulls() : Nv::Blast::AuthoringResult
  • releaseSyncBuffer() : Nv::Blast::ExtSync
  • remove() : Nv::Blast::DList -, Nv::Blast::IndexDList< IndexType > , btAlignedObjectArray< T > +, Nv::Blast::IndexDList< IndexType >
  • removeFromGroup() -: Nv::Blast::TkActorImpl -, Nv::Blast::TkActor +: Nv::Blast::TkActor +, Nv::Blast::TkActorImpl
  • removeFromList() : Nv::Blast::IndexDList< IndexType >
  • removeListener() -: Nv::Blast::TkFamily -, Nv::Blast::TkEventQueue +: Nv::Blast::TkEventQueue +, Nv::Blast::TkFamily
  • removeListHead() : Nv::Blast::IndexDList< IndexType >
  • removeReference() @@ -216,23 +218,23 @@ : Nv::Blast::EdgeToTriangles
  • replaceMaterialId() : Nv::Blast::FractureTool +, Nv::Blast::MeshImpl , Nv::Blast::FractureToolImpl , Nv::Blast::Mesh -, Nv::Blast::MeshImpl
  • reportError() : Nv::Blast::ErrorCallback
  • requestBuffer() : Nv::Blast::ExtSerialization::ExtSerialization::BufferProvider
  • requiredMemorySize() -: Nv::Blast::FixedBitmap -, Nv::Blast::FamilyGraph +: Nv::Blast::FixedQueue< T > +, Nv::Blast::FixedBitmap , Nv::Blast::FixedPriorityQueue< Element, Comparator > -, Nv::Blast::FixedArray< T > -, Nv::Blast::FixedQueue< T > , Nv::Blast::FixedBoolArray +, Nv::Blast::FamilyGraph +, Nv::Blast::FixedArray< T >
  • reserve() -: Nv::Blast::SharedBuffer< T > -, btAlignedObjectArray< T > +: btAlignedObjectArray< T > +, Nv::Blast::SharedBuffer< T >
  • reserveData() : Nv::Blast::TkEventQueue
  • reserveEvents() @@ -242,21 +244,20 @@
  • reserveNewTkActors() : Nv::Blast::SharedMemory
  • reset() -: Nv::Blast::SharedBuffer< T > +: Nv::Blast::SharedMemory , Nv::Blast::TkEventQueue -, Nv::Blast::FixedBoolArray +, Nv::Blast::SharedBuffer< T > , Nv::Blast::FractureToolImpl -, Nv::Blast::FractureTool , Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > -, Nv::Blast::BooleanEvaluator +, Nv::Blast::FractureTool +, Nv::Blast::MeshNoiser +, Nv::Blast::FixedBoolArray , Nv::Blast::Triangulator +, Nv::Blast::FixedBitmap , Nv::Blast::ExtAtomicCounter -, Nv::Blast::ApexImporter::ScopedResource< Releasable, Releaser > , Nv::Blast::ExtStressSolver -, Nv::Blast::FixedBitmap -, Nv::Blast::MeshNoiser +, Nv::Blast::BooleanEvaluator , Nv::Blast::PerlinNoise -, Nv::Blast::SharedMemory
  • resize() : btAlignedObjectArray< T >
  • Resize() @@ -272,9 +273,9 @@
  • returnWorker() : Nv::Blast::TkGroup
  • RevertAlignToPrincipalAxes() -: VHACD::TetrahedronSet +: VHACD::PrimitiveSet , VHACD::VoxelSet -, VHACD::PrimitiveSet +, VHACD::TetrahedronSet
  • run() : Nv::Blast::ExtGroupWorkerTask diff --git a/docs/source_docs/files/functions_func_0x73.html b/docs/source_docs/files/functions_func_0x73.html index 79723b5..7de4f49 100644 --- a/docs/source_docs/files/functions_func_0x73.html +++ b/docs/source_docs/files/functions_func_0x73.html @@ -197,6 +197,10 @@
  • setID() : Nv::Blast::Serialization::Asset::Asset::Builder , Nv::Blast::TkIdentifiable +
  • setInteriorIndex() +: Nv::Blast::IMeshFileWriter +, Nv::Blast::FbxFileWriter +, Nv::Blast::ObjFileWriter
  • setInteriorMaterialId() : Nv::Blast::FractureTool , Nv::Blast::FractureToolImpl @@ -219,11 +223,11 @@
  • setNodeCount() : Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder
  • setNodeIndices() -: Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder +: Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder
  • setNodeInfo() : Nv::Blast::ExtStressSolver
  • setNormal() -: Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Builder +: Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Builder
  • setP() : Nv::Blast::Serialization::PxTransform::PxTransform::Builder
  • setPlatformEnabled() @@ -231,8 +235,8 @@
  • SetPoint() : VHACD::Mesh
  • setPxActorDesc() -: Nv::Blast::ExtPxFamily -, Nv::Blast::final +: Nv::Blast::final +, Nv::Blast::ExtPxFamily
  • setPxShapeDescTemplate() : Nv::Blast::ExtPxFamily , Nv::Blast::final @@ -244,8 +248,8 @@
  • setRotation() : Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder
  • setScale() -: Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder -, Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder +: Nv::Blast::Serialization::PxMeshScale::PxMeshScale::Builder +, Nv::Blast::Serialization::PxConvexMeshGeometry::PxConvexMeshGeometry::Builder
  • setSerializationEncoding() : Nv::Blast::ExtSerialization
  • setSettings() @@ -260,17 +264,15 @@ : Nv::Blast::FractureToolImpl , Nv::Blast::FractureTool
  • setState() -: Nv::Blast::SweepingAccelerator -, Nv::Blast::IntersectionTestingAccelerator -, Nv::Blast::DummyAccelerator -, Nv::Blast::BBoxBasedAccelerator +: Nv::Blast::IntersectionTestingAccelerator , Nv::Blast::SweepingAccelerator -, Nv::Blast::SpatialAccelerator +, Nv::Blast::BBoxBasedAccelerator , Nv::Blast::DummyAccelerator -, Nv::Blast::BBoxBasedAccelerator +, Nv::Blast::SpatialAccelerator +, Nv::Blast::SweepingAccelerator
  • setStencil() -: Nv::Blast::VoronoiSitesGeneratorImpl -, Nv::Blast::VoronoiSitesGenerator +: Nv::Blast::VoronoiSitesGenerator +, Nv::Blast::VoronoiSitesGeneratorImpl
  • setSubchunkCount() : Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder
  • setTransform() @@ -285,8 +287,8 @@
  • setup() : Nv::Blast::ExtGroupWorkerTask
  • setValue() -: btVector4 -, Nv::Blast::Serialization::UUID::UUID::Builder +: Nv::Blast::Serialization::UUID::UUID::Builder +, btVector4
  • setW() : Nv::Blast::Serialization::PxQuat::PxQuat::Builder
  • setWorkerCount() @@ -298,8 +300,8 @@ : Nv::Blast::Serialization::PxQuat::PxQuat::Builder , Nv::Blast::Serialization::PxVec3::PxVec3::Builder
  • setZ() -: Nv::Blast::Serialization::PxQuat::PxQuat::Builder -, Nv::Blast::Serialization::PxVec3::PxVec3::Builder +: Nv::Blast::Serialization::PxVec3::PxVec3::Builder +, Nv::Blast::Serialization::PxQuat::PxQuat::Builder
  • SharedBlock() : Nv::Blast::SharedBlock< T >
  • SharedBuffer() @@ -310,17 +312,16 @@ : Nv::Blast::SimplexNoise
  • size() : Nv::Blast::FixedArray< T > -, Nv::Blast::FixedPriorityQueue< Element, Comparator > +, Nv::Blast::FixedQueue< T > , btAlignedObjectArray< T > +, Nv::Blast::FixedPriorityQueue< Element, Comparator >
  • Size() : VHACD::SArray< T, N > -
  • size() -: Nv::Blast::FixedQueue< T >
  • skipObject() : Nv::Blast::ExtSerialization
  • slicing() -: Nv::Blast::FractureToolImpl -, Nv::Blast::FractureTool +: Nv::Blast::FractureToolImpl +, Nv::Blast::FractureTool
  • sortToCCW() : Nv::Blast::TriangleProcessor
  • spawn() @@ -333,9 +334,9 @@
  • startProcess() : Nv::Blast::TkGroup
  • subscribe() -: Nv::Blast::final +: Nv::Blast::ExtPxManager +, Nv::Blast::final , Nv::Blast::ExtPxFamily -, Nv::Blast::ExtPxManager
  • swap() : btAlignedObjectArray< T >
  • SweepingAccelerator() diff --git a/docs/source_docs/files/functions_func_0x75.html b/docs/source_docs/files/functions_func_0x75.html index b733190..1429cf4 100644 --- a/docs/source_docs/files/functions_func_0x75.html +++ b/docs/source_docs/files/functions_func_0x75.html @@ -102,12 +102,16 @@ : Nv::Blast::ExtPxFamily , Nv::Blast::ExtPxManager , Nv::Blast::final +
  • update() +: Nv::Blast::ExtStressSolver +, Nv::Blast::final
  • Update() : VHACD::IVHACD::IVHACD::IUserCallback
  • update() : Nv::Blast::ExtPxStressSolver -, Nv::Blast::final -, Nv::Blast::ExtStressSolver +
  • updateBaseMesh() +: Nv::Blast::FractureTool +, Nv::Blast::FractureToolImpl
  • updateJoint() : Nv::Blast::final
  • UpdateMinMax() diff --git a/docs/source_docs/files/functions_func_0x7e.html b/docs/source_docs/files/functions_func_0x7e.html index 810c4e9..6e10fc4 100644 --- a/docs/source_docs/files/functions_func_0x7e.html +++ b/docs/source_docs/files/functions_func_0x7e.html @@ -108,6 +108,8 @@ : Nv::Blast::CollisionHullImpl
  • ~ConvexMeshBuilder() : Nv::Blast::ConvexMeshBuilder +
  • ~CutoutSet() +: Nv::Blast::CutoutSet
  • ~ErrorCallback() : Nv::Blast::ErrorCallback
  • ~ExtDamageAcceleratorAABBTree() diff --git a/docs/source_docs/files/functions_vars_0x61.html b/docs/source_docs/files/functions_vars_0x61.html index 35b8ba3..210e056 100644 --- a/docs/source_docs/files/functions_vars_0x61.html +++ b/docs/source_docs/files/functions_vars_0x61.html @@ -105,6 +105,8 @@
  • adjacentNodeIndices : NvBlastSupportGraph , NvBlastGraphShaderActor +
  • amplitude +: Nv::Blast::NoiseConfiguration
  • angle_variations : Nv::Blast::SlicingConfiguration
  • area @@ -123,9 +125,9 @@
  • assetToFractureChunkIdMap : Nv::Blast::AuthoringResult
  • attachPositions -: Nv::Blast::TkAssetJointDesc +: Nv::Blast::TkJointDesc +, Nv::Blast::TkAssetJointDesc , Nv::Blast::TkJointData -, Nv::Blast::TkJointDesc diff --git a/docs/source_docs/files/functions_vars_0x63.html b/docs/source_docs/files/functions_vars_0x63.html index 3ee67b3..f11bdf7 100644 --- a/docs/source_docs/files/functions_vars_0x63.html +++ b/docs/source_docs/files/functions_vars_0x63.html @@ -139,13 +139,13 @@ : Nv::Blast::ExtStressSolver::ExtStressSolver::DebugLine , Nv::Blast::DebugLine
  • column0 -: NvcMat33 -, NvcMat34 +: NvcMat34 +, NvcMat33 , NvcMat44
  • column1 -: NvcMat33 +: NvcMat34 , NvcMat44 -, NvcMat34 +, NvcMat33
  • column2 : NvcMat44 , NvcMat33 @@ -157,8 +157,14 @@ : NvBlastExtAssetUtilsBondDesc
  • contactOffset : Nv::Blast::ExtPxShapeDescTemplate +
  • convexLoops +: Nv::Blast::Cutout
  • coord : Nv::Blast::SegmentToIndex +
  • cutouts +: Nv::Blast::CutoutSetImpl +
  • cutoutSet +: Nv::Blast::CutoutConfiguration diff --git a/docs/source_docs/files/functions_vars_0x64.html b/docs/source_docs/files/functions_vars_0x64.html index 0bd6714..d0b3057 100644 --- a/docs/source_docs/files/functions_vars_0x64.html +++ b/docs/source_docs/files/functions_vars_0x64.html @@ -107,15 +107,19 @@
  • damageThresholdMin : Nv::Blast::ExtImpactSettings
  • data -: Nv::Blast::ExtProfileData +: Nv::Blast::ExtSyncEventPhysicsSync , NvBlastID -, Nv::Blast::ExtSyncEventPhysicsSync +, Nv::Blast::ExtProfileData
  • dataType : NvBlastDataBlock
  • deletedActor : NvBlastActorSplitEvent
  • density : Nv::Blast::ExtPxSpawnSettings +
  • diffuse_tex +: Nv::Blast::Materials +
  • dimensions +: Nv::Blast::CutoutSetImpl diff --git a/docs/source_docs/files/functions_vars_0x66.html b/docs/source_docs/files/functions_vars_0x66.html index 64e896a..1f3a9ba 100644 --- a/docs/source_docs/files/functions_vars_0x66.html +++ b/docs/source_docs/files/functions_vars_0x66.html @@ -104,13 +104,16 @@
  • firstSubchunkIndex : Nv::Blast::ExtPxChunk
  • flags -: Nv::Blast::ExtPxShapeDescTemplate +: NvBlastChunkDesc , Nv::Blast::ExtPxActorDescTemplate -, NvBlastChunkDesc +, Nv::Blast::PolyVert +, Nv::Blast::ExtPxShapeDescTemplate
  • formatVersion : NvBlastDataBlock
  • fracture : NvBlastTimers +
  • frequency +: Nv::Blast::NoiseConfiguration diff --git a/docs/source_docs/files/functions_vars_0x69.html b/docs/source_docs/files/functions_vars_0x69.html index d5c4885..f48f42d 100644 --- a/docs/source_docs/files/functions_vars_0x69.html +++ b/docs/source_docs/files/functions_vars_0x69.html @@ -86,6 +86,7 @@

    - i -

    diff --git a/docs/source_docs/files/functions_vars_0x74.html b/docs/source_docs/files/functions_vars_0x74.html index d64299b..e7969f8 100644 --- a/docs/source_docs/files/functions_vars_0x74.html +++ b/docs/source_docs/files/functions_vars_0x74.html @@ -96,9 +96,10 @@
  • tr : Nv::Blast::EdgeToTriangles
  • transform -: Nv::Blast::ExtSyncEventPhysicsSync::ExtSyncEventPhysicsSync::ActorData +: Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::SubchunkDesc , Nv::Blast::ExtPxSubchunk -, Nv::Blast::ExtPxAssetDesc::ExtPxAssetDesc::SubchunkDesc +, Nv::Blast::ExtSyncEventPhysicsSync::ExtSyncEventPhysicsSync::ActorData +, Nv::Blast::CutoutConfiguration
  • trId : Nv::Blast::PlaneChunkIndexer
  • type diff --git a/docs/source_docs/files/functions_vars_0x75.html b/docs/source_docs/files/functions_vars_0x75.html index 80be35c..dc90e1a 100644 --- a/docs/source_docs/files/functions_vars_0x75.html +++ b/docs/source_docs/files/functions_vars_0x75.html @@ -88,22 +88,21 @@ : NvBlastActorDesc
  • uniformInitialLowerSupportChunkHealth : NvBlastActorDesc +
  • userData +: Nv::Blast::TriangleIndexed +, NvBlastChunk +, NvBlastBond
  • userdata : NvBlastBondFractureData +, NvBlastChunkFractureData
  • userData -: Nv::Blast::ExtPxAsset -, Nv::Blast::ExtPxFamily -, Nv::Blast::TkObject +: Nv::Blast::TkObject , Nv::Blast::TkActorData +, Nv::Blast::Facet , NvBlastChunkDesc -, NvBlastBond , Nv::Blast::Triangle -, NvBlastChunk -
  • userdata -: NvBlastChunkFractureData -
  • userData -: Nv::Blast::Facet -, Nv::Blast::TriangleIndexed +, Nv::Blast::ExtPxFamily +, Nv::Blast::ExtPxAsset
  • userIntData : Nv::Blast::TkIdentifiable
  • uv diff --git a/docs/source_docs/files/functions_vars_0x76.html b/docs/source_docs/files/functions_vars_0x76.html index ecae0d9..710163f 100644 --- a/docs/source_docs/files/functions_vars_0x76.html +++ b/docs/source_docs/files/functions_vars_0x76.html @@ -87,7 +87,8 @@
  • v : Nv::Blast::VSA::Vec4
  • vertices -: btConvexHullComputer +: Nv::Blast::Cutout +, btConvexHullComputer
  • visibility : NvBlastTimers
  • volume diff --git a/docs/source_docs/files/functions_vars_0x78.html b/docs/source_docs/files/functions_vars_0x78.html index 9ed2fd3..bca462b 100644 --- a/docs/source_docs/files/functions_vars_0x78.html +++ b/docs/source_docs/files/functions_vars_0x78.html @@ -85,14 +85,15 @@

    - x -

    diff --git a/docs/source_docs/files/functions_vars_0x79.html b/docs/source_docs/files/functions_vars_0x79.html index 5ec36c6..a338938 100644 --- a/docs/source_docs/files/functions_vars_0x79.html +++ b/docs/source_docs/files/functions_vars_0x79.html @@ -85,14 +85,15 @@

    - y -

    diff --git a/docs/source_docs/files/globals_0x6e.html b/docs/source_docs/files/globals_0x6e.html index e534f2b..afce2e5 100644 --- a/docs/source_docs/files/globals_0x6e.html +++ b/docs/source_docs/files/globals_0x6e.html @@ -439,20 +439,26 @@ Here is a list of all file members with links to the files they belong to: : NvBlastExtAssetUtils.h
  • NvBlastExtAssetUtilsMergeAssets() : NvBlastExtAssetUtils.h +
  • NvBlastExtAuthoringBuildCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateBondGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateConvexMeshBuilder() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateFractureTool() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMesh() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMeshCleaner() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateMeshFromFacets() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateVoronoiSitesGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringFindAssetConnectingBonds() -: NvBlastExtAuthoring.h +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringProcessFracture() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringTransformCollisionHull() @@ -509,6 +515,8 @@ Here is a list of all file members with links to the files they belong to: : NvBlastExtDamageShaders.h
  • NvBlastExtTriangleIntersectionSubgraphShader() : NvBlastExtDamageShaders.h +
  • NvBlastExtUpdateGraphicsMesh() +: NvBlastExtAuthoring.h
  • NvBlastFamilyCreateFirstActor() : NvBlast.h
  • NvBlastFamilyDeserializeActor() diff --git a/docs/source_docs/files/globals_func_0x6e.html b/docs/source_docs/files/globals_func_0x6e.html index 8601417..9a2c8b2 100644 --- a/docs/source_docs/files/globals_func_0x6e.html +++ b/docs/source_docs/files/globals_func_0x6e.html @@ -167,20 +167,26 @@ : NvBlastExtAssetUtils.h
  • NvBlastExtAssetUtilsMergeAssets() : NvBlastExtAssetUtils.h +
  • NvBlastExtAuthoringBuildCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateBondGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateConvexMeshBuilder() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateCutoutSet() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateFractureTool() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMesh() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateMeshCleaner() : NvBlastExtAuthoring.h +
  • NvBlastExtAuthoringCreateMeshFromFacets() +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringCreateVoronoiSitesGenerator() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringFindAssetConnectingBonds() -: NvBlastExtAuthoring.h +: NvBlastExtAuthoring.h
  • NvBlastExtAuthoringProcessFracture() : NvBlastExtAuthoring.h
  • NvBlastExtAuthoringTransformCollisionHull() @@ -237,6 +243,8 @@ : NvBlastExtDamageShaders.h
  • NvBlastExtTriangleIntersectionSubgraphShader() : NvBlastExtDamageShaders.h +
  • NvBlastExtUpdateGraphicsMesh() +: NvBlastExtAuthoring.h
  • NvBlastFamilyCreateFirstActor() : NvBlast.h
  • NvBlastFamilyDeserializeActor() diff --git a/docs/source_docs/files/hierarchy.html b/docs/source_docs/files/hierarchy.html index eed7bc1..3ec6f7c 100644 --- a/docs/source_docs/files/hierarchy.html +++ b/docs/source_docs/files/hierarchy.html @@ -83,10 +83,17 @@
  • Nv::Blast::CollisionHull::CollisionHull::HullPolygon
  • Nv::Blast::CollisionParams +
  • Nv::Blast::ConvexLoop
  • Nv::Blast::ConvexMeshBuilder +
  • Nv::Blast::Cutout +
  • Nv::Blast::CutoutConfiguration +
  • Nv::Blast::CutoutSet +
  • Nv::Blast::DebugBuffer
  • Nv::Blast::DebugLine
  • Nv::Blast::ApexImporter::DefaultReleaser< T > @@ -274,17 +281,19 @@
  • Nv::Blast::LlObjectTypeID
  • Nv::Blast::LocalBuffer< T >
  • VHACD::Material -
  • VHACD::Mesh +
  • Nv::Blast::Materials
  • Nv::Blast::Mesh +
  • VHACD::Mesh
  • Nv::Blast::MeshCleaner
  • Nv::Blast::MeshNoiser
  • VHACD::Mutex +
  • Nv::Blast::NoiseConfiguration
  • NvBlastActor
    • Nv::Blast::Actor @@ -354,8 +363,8 @@
    • NvBlastID
    • NvBlastMessage
    • NvBlastSubgraphShaderActor -
    • Nv::Blast::Serialization::NvBlastSupportGraph
    • NvBlastSupportGraph +
    • Nv::Blast::Serialization::NvBlastSupportGraph
    • Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::_capnpPrivate
    • Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder
    • Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Pipeline @@ -378,6 +387,8 @@
    • Nv::Blast::PerlinNoise
    • VHACD::Plane
    • Nv::Blast::PlaneChunkIndexer +
    • Nv::Blast::POINT2D +
    • Nv::Blast::PolyVert
    • VHACD::PrimitiveSet
      • VHACD::TetrahedronSet @@ -443,8 +454,8 @@
      • Nv::Blast::Serialization::TkAsset::TkAsset::Builder
      • Nv::Blast::Serialization::TkAsset::TkAsset::Pipeline
      • Nv::Blast::Serialization::TkAsset::TkAsset::Reader -
      • Nv::Blast::TkAssetJointDesc
      • Nv::Blast::Serialization::TkAssetJointDesc +
      • Nv::Blast::TkAssetJointDesc
      • Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::_capnpPrivate
      • Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder
      • Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Pipeline diff --git a/docs/source_docs/files/namespace_nv_1_1_blast.html b/docs/source_docs/files/namespace_nv_1_1_blast.html index 8b5aa4d..43c28a5 100644 --- a/docs/source_docs/files/namespace_nv_1_1_blast.html +++ b/docs/source_docs/files/namespace_nv_1_1_blast.html @@ -87,10 +87,20 @@ struct  CollisionParams +struct  ConvexLoop + class  ConvexMeshBuilder class  ConvexMeshBuilderImpl +struct  Cutout + +struct  CutoutConfiguration + +class  CutoutSet + +struct  CutoutSetImpl + struct  DebugBuffer struct  DebugLine @@ -263,6 +273,8 @@ class  LocalBuffer +struct  Materials + class  Mesh class  MeshCleaner @@ -273,6 +285,8 @@ class  MeshNoiser +struct  NoiseConfiguration + class  ObjFileReader class  ObjFileWriter @@ -281,6 +295,10 @@ struct  PlaneChunkIndexer +struct  POINT2D + +struct  PolyVert + class  ProfilerCallback struct  ProfilerDetail @@ -429,6 +447,10 @@ int32_t atomicIncrement (volatile int32_t *val) +void convertTracesToIncremental (std::vector< std::vector< POINT2D > * > &traces) + +void createCutoutSet (Nv::Blast::CutoutSetImpl &cutoutSet, const uint8_t *pixelBuffer, uint32_t bufferWidth, uint32_t bufferHeight, float segmentationErrorThreshold, float snapThreshold, bool periodic, bool expandGaps) + template<typename T > void createIndexStartLookup (T *lookup, T indexBase, T indexRange, T *indexSource, T indexCount, T indexByteStride) @@ -453,6 +475,8 @@ MeshgetCuttingBox (const physx::PxVec3 &point, const physx::PxVec3 &normal, float size, int64_t id, int32_t interiorMaterialId) +MeshgetCuttingCylinder (uint32_t pointCount, const physx::PxVec3 *points, const physx::PxTransform &transform, float height, int64_t id, int32_t interiorMaterialId) + NV_INLINE const NvBlastIDgetFamilyID (const TkFamilyImpl *family) NV_INLINE const NvBlastIDgetFamilyID (const TkActor *actor) @@ -734,6 +758,91 @@ Returns the aligned value.

        + +

        + +

        +
        + + + + + + + + + +
        void Nv::Blast::convertTracesToIncremental (std::vector< std::vector< POINT2D > * > &  traces  ) 
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        void Nv::Blast::createCutoutSet (Nv::Blast::CutoutSetImpl cutoutSet,
        const uint8_t *  pixelBuffer,
        uint32_t  bufferWidth,
        uint32_t  bufferHeight,
        float  segmentationErrorThreshold,
        float  snapThreshold,
        bool  periodic,
        bool  expandGaps 
        )
        +
        +
        + +

        +

        @@ -1304,6 +1413,68 @@ Create cutting box at some particular position.

        Parameters:
        + +

        + +

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Mesh* Nv::Blast::getCuttingCylinder (uint32_t  pointCount,
        const physx::PxVec3 *  points,
        const physx::PxTransform &  transform,
        float  height,
        int64_t  id,
        int32_t  interiorMaterialId 
        )
        +
        +
        + +

        +Create cutting cylinder (extrusion of specified loop) at some particular position.

        Parameters:
        + + + + + + +
        [in] pointCount Number of points in loop
        [in] points Array of points for loop
        [in] transform Cutting cylinder transform
        [in] height Cutting cylinder height
        [in] id Cutting cylinder ID
        +
        +

        diff --git a/docs/source_docs/files/namespacemembers_0x63.html b/docs/source_docs/files/namespacemembers_0x63.html index 81455ba..f0a96a9 100644 --- a/docs/source_docs/files/namespacemembers_0x63.html +++ b/docs/source_docs/files/namespacemembers_0x63.html @@ -85,6 +85,10 @@ Here is a list of all namespace members with links to the namespace documentatio : VHACD

      • ComputeVolume4() : VHACD +
      • convertTracesToIncremental() +: Nv::Blast +
      • createCutoutSet() +: Nv::Blast
      • createIndexStartLookup() : Nv::Blast
      • CreateVHACD() diff --git a/docs/source_docs/files/namespacemembers_0x67.html b/docs/source_docs/files/namespacemembers_0x67.html index c3fcd34..ac1a7fe 100644 --- a/docs/source_docs/files/namespacemembers_0x67.html +++ b/docs/source_docs/files/namespacemembers_0x67.html @@ -77,6 +77,8 @@ Here is a list of all namespace members with links to the namespace documentatio : Nv::Blast
      • getCuttingBox() : Nv::Blast +
      • getCuttingCylinder() +: Nv::Blast
      • getFamilyID() : Nv::Blast
      • getFamilyMemorySize() diff --git a/docs/source_docs/files/namespacemembers_func_0x63.html b/docs/source_docs/files/namespacemembers_func_0x63.html index 8774dbe..e4050bd 100644 --- a/docs/source_docs/files/namespacemembers_func_0x63.html +++ b/docs/source_docs/files/namespacemembers_func_0x63.html @@ -81,6 +81,10 @@ : VHACD
      • ComputeVolume4() : VHACD +
      • convertTracesToIncremental() +: Nv::Blast +
      • createCutoutSet() +: Nv::Blast
      • createIndexStartLookup() : Nv::Blast
      • CreateVHACD() diff --git a/docs/source_docs/files/namespacemembers_func_0x67.html b/docs/source_docs/files/namespacemembers_func_0x67.html index 0be56e4..25a1fa3 100644 --- a/docs/source_docs/files/namespacemembers_func_0x67.html +++ b/docs/source_docs/files/namespacemembers_func_0x67.html @@ -73,6 +73,8 @@ : Nv::Blast
      • getCuttingBox() : Nv::Blast +
      • getCuttingCylinder() +: Nv::Blast
      • getFamilyID() : Nv::Blast
      • getFamilyMemorySize() diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_bond_generation_config-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_bond_generation_config-members.html index 83614c5..c43409e 100644 --- a/docs/source_docs/files/struct_nv_1_1_blast_1_1_bond_generation_config-members.html +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_bond_generation_config-members.html @@ -45,6 +45,7 @@ BondGenMode enum nameNv::Blast::BondGenerationConfig bondModeNv::Blast::BondGenerationConfig EXACT enum valueNv::Blast::BondGenerationConfig + maxSeparationNv::Blast::BondGenerationConfig

        diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop-members.html new file mode 100644 index 0000000..fca623e --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop-members.html @@ -0,0 +1,51 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + +

        + + +
        +

        Nv::Blast::ConvexLoop Member List

        This is the complete list of members for Nv::Blast::ConvexLoop, including all inherited members.

        + +
        polyVertsNv::Blast::ConvexLoop

        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop.html new file mode 100644 index 0000000..2636195 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_convex_loop.html @@ -0,0 +1,79 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::ConvexLoop Struct Reference + + + + + + + + +
        +

        Nv::Blast::ConvexLoop Struct Reference

        #include <NvBlastExtAuthoringCutoutImpl.h> +

        + +

        +List of all members. + + + + +

        Public Attributes

        std::vector< PolyVertpolyVerts
        +


        Member Data Documentation

        + +
        +
        + + + + +
        std::vector<PolyVert> Nv::Blast::ConvexLoop::polyVerts
        +
        +
        + +

        + +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout-members.html new file mode 100644 index 0000000..7d430a0 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout-members.html @@ -0,0 +1,52 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + + + + +
        +

        Nv::Blast::Cutout Member List

        This is the complete list of members for Nv::Blast::Cutout, including all inherited members.

        + + +
        convexLoopsNv::Blast::Cutout
        verticesNv::Blast::Cutout

        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout.html new file mode 100644 index 0000000..3dbaf88 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout.html @@ -0,0 +1,96 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::Cutout Struct Reference + + + + + + + + +
        +

        Nv::Blast::Cutout Struct Reference

        #include <NvBlastExtAuthoringCutoutImpl.h> +

        + +

        +List of all members. + + + + + + +

        Public Attributes

        std::vector< ConvexLoopconvexLoops
        std::vector< physx::PxVec3 > vertices
        +


        Member Data Documentation

        + +
        +
        + + + + +
        std::vector<ConvexLoop> Nv::Blast::Cutout::convexLoops
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + +
        std::vector<physx::PxVec3> Nv::Blast::Cutout::vertices
        +
        +
        + +

        + +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration-members.html new file mode 100644 index 0000000..2eb0bbf --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration-members.html @@ -0,0 +1,55 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + + + + + + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration.html new file mode 100644 index 0000000..fa9c4a8 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_configuration.html @@ -0,0 +1,148 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::CutoutConfiguration Struct Reference + + + + + + + + +
        +

        Nv::Blast::CutoutConfiguration Struct Reference

        #include <NvBlastExtAuthoringFractureTool.h> +

        + +

        +List of all members. + + + + + + + + + + + + +

        Public Attributes

        CutoutSetcutoutSet = nullptr
        bool isRelativeTransform = true
        NoiseConfiguration noise
        physx::PxVec2 scale = physx::PxVec2(-1, -1)
        physx::PxTransform transform = physx::PxTransform(physx::PxIdentity)
        +


        Detailed Description

        +Cutout fracturing configuration

        Member Data Documentation

        + +
        + +
        + +

        +Set of grouped convex loop patterns for cutout in normal direction. Not required for PLANE_ONLY mode +

        +

        + +

        + +
        + +

        +If relative transform is set - position will be displacement vector from chunk's center. Otherwise from global origin. +

        +

        + +

        + +
        + +

        +Noise parameters for cutout surface, see NoiseConfiguration. +

        +

        + +

        +
        + + + + +
        physx::PxVec2 Nv::Blast::CutoutConfiguration::scale = physx::PxVec2(-1, -1)
        +
        +
        + +

        +Scale for pattern. Unscaled pattern has size (1, 1). For negative scale pattern will be placed at the center of chunk and scaled with max distance between points of its AABB +

        +

        + +

        +
        + + + + +
        physx::PxTransform Nv::Blast::CutoutConfiguration::transform = physx::PxTransform(physx::PxIdentity)
        +
        +
        + +

        +Transform for initial pattern position and orientation. By default 2d pattern lies in XY plane (Y is up) the center of pattern is (0, 0) +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl-members.html new file mode 100644 index 0000000..f46a637 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl-members.html @@ -0,0 +1,65 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + + + + +
        +

        Nv::Blast::CutoutSetImpl Member List

        This is the complete list of members for Nv::Blast::CutoutSetImpl, including all inherited members.

        + + + + + + + + + + + + + + + +
        cutoutsNv::Blast::CutoutSetImpl
        CutoutSetImpl()Nv::Blast::CutoutSetImpl [inline]
        dimensionsNv::Blast::CutoutSetImpl
        getCutoutCount() const Nv::Blast::CutoutSetImpl [inline, virtual]
        getCutoutLoopCount(uint32_t cutoutIndex) const Nv::Blast::CutoutSetImpl [inline, virtual]
        getCutoutLoopSize(uint32_t cutoutIndex, uint32_t loopIndex) const Nv::Blast::CutoutSetImpl [inline, virtual]
        getCutoutLoopVertexFlags(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const Nv::Blast::CutoutSetImpl [inline, virtual]
        getCutoutLoopVertexIndex(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const Nv::Blast::CutoutSetImpl [inline, virtual]
        getCutoutVertex(uint32_t cutoutIndex, uint32_t vertexIndex) const Nv::Blast::CutoutSetImpl [inline, virtual]
        getCutoutVertexCount(uint32_t cutoutIndex) const Nv::Blast::CutoutSetImpl [inline, virtual]
        getDimensions() const Nv::Blast::CutoutSetImpl [inline, virtual]
        isPeriodic() const Nv::Blast::CutoutSetImpl [inline, virtual]
        periodicNv::Blast::CutoutSetImpl
        release()Nv::Blast::CutoutSetImpl [inline, virtual]
        ~CutoutSet()Nv::Blast::CutoutSet [inline, protected, virtual]

        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.html new file mode 100644 index 0000000..e288012 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.html @@ -0,0 +1,430 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::CutoutSetImpl Struct Reference + + + + + + + + +
        +

        Nv::Blast::CutoutSetImpl Struct Reference

        #include <NvBlastExtAuthoringCutoutImpl.h> +

        +

        +Inheritance diagram for Nv::Blast::CutoutSetImpl:
        +
        + +

        + +Nv::Blast::CutoutSet + +
        + +

        +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        Public Member Functions

         CutoutSetImpl ()
        uint32_t getCutoutCount () const
        uint32_t getCutoutLoopCount (uint32_t cutoutIndex) const
        uint32_t getCutoutLoopSize (uint32_t cutoutIndex, uint32_t loopIndex) const
        uint32_t getCutoutLoopVertexFlags (uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const
        uint32_t getCutoutLoopVertexIndex (uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const
        const physx::PxVec3 & getCutoutVertex (uint32_t cutoutIndex, uint32_t vertexIndex) const
        uint32_t getCutoutVertexCount (uint32_t cutoutIndex) const
        const physx::PxVec2 & getDimensions () const
        bool isPeriodic () const
        void release ()

        Public Attributes

        std::vector< Cutoutcutouts
        physx::PxVec2 dimensions
        bool periodic
        +


        Constructor & Destructor Documentation

        + +
        +
        + + + + + + + + +
        Nv::Blast::CutoutSetImpl::CutoutSetImpl (  )  [inline]
        +
        +
        + +

        + +

        +

        +


        Member Function Documentation

        + +
        +
        + + + + + + + + +
        uint32_t Nv::Blast::CutoutSetImpl::getCutoutCount (  )  const [inline, virtual]
        +
        +
        + +

        +Returns the number of cutouts in the set. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + + +
        uint32_t Nv::Blast::CutoutSetImpl::getCutoutLoopCount (uint32_t  cutoutIndex  )  const [inline, virtual]
        +
        +
        + +

        +Applies to the cutout indexed by cutoutIndex: Returns the number of loops in this cutout. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + + + + + + + + + + + +
        uint32_t Nv::Blast::CutoutSetImpl::getCutoutLoopSize (uint32_t  coutoutIndex,
        uint32_t  loopIndex 
        ) const [inline, virtual]
        +
        +
        + +

        +Applies to the cutout indexed by cutoutIndex: Returns the number of vertices in the loop indexed by loopIndex. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        uint32_t Nv::Blast::CutoutSetImpl::getCutoutLoopVertexFlags (uint32_t  cutoutIndex,
        uint32_t  loopIndex,
        uint32_t  vertexNum 
        ) const [inline, virtual]
        +
        +
        + +

        +Applies to the cutout indexed by cutoutIndex: Returns the flags of the vertex indexed by vertexNum, in the loop indexed by loopIndex. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        uint32_t Nv::Blast::CutoutSetImpl::getCutoutLoopVertexIndex (uint32_t  cutoutIndex,
        uint32_t  loopIndex,
        uint32_t  vertexNum 
        ) const [inline, virtual]
        +
        +
        + +

        +Applies to the cutout indexed by cutoutIndex: Returns the vertex index of the vertex indexed by vertexNum, in the loop indexed by loopIndex. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + + + + + + + + + + + +
        const physx::PxVec3& Nv::Blast::CutoutSetImpl::getCutoutVertex (uint32_t  cutoutIndex,
        uint32_t  vertexIndex 
        ) const [inline, virtual]
        +
        +
        + +

        +Applies to the cutout indexed by cutoutIndex: Returns the vertex indexed by vertexIndex. (Only the X and Y coordinates are used.) +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + + +
        uint32_t Nv::Blast::CutoutSetImpl::getCutoutVertexCount (uint32_t  cutoutIndex  )  const [inline, virtual]
        +
        +
        + +

        +Applies to the cutout indexed by cutoutIndex: Returns the number of vertices in the cutout. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + +
        const physx::PxVec2& Nv::Blast::CutoutSetImpl::getDimensions (  )  const [inline, virtual]
        +
        +
        + +

        +The dimensions of the fracture map used to create the cutout set. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + +
        bool Nv::Blast::CutoutSetImpl::isPeriodic (  )  const [inline, virtual]
        +
        +
        + +

        +Whether or not this cutout set is to be tiled. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        + +

        +
        + + + + + + + + +
        void Nv::Blast::CutoutSetImpl::release (  )  [inline, virtual]
        +
        +
        + +

        +Serialization Releases all memory and deletes itself. +

        Implements Nv::Blast::CutoutSet.

        + +
        +

        +


        Member Data Documentation

        + +
        +
        + + + + +
        std::vector<Cutout> Nv::Blast::CutoutSetImpl::cutouts
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + +
        physx::PxVec2 Nv::Blast::CutoutSetImpl::dimensions
        +
        +
        + +

        + +

        +

        + +

        + +
        + +

        + +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.png b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.png new file mode 100644 index 0000000..5b7040c Binary files /dev/null and b/docs/source_docs/files/struct_nv_1_1_blast_1_1_cutout_set_impl.png differ diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data-members.html index 899293f..7d124db 100644 --- a/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data-members.html +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data-members.html @@ -52,7 +52,7 @@ positionsNv::Blast::ExporterMeshData positionsCountNv::Blast::ExporterMeshData submeshCountNv::Blast::ExporterMeshData - submeshNamesNv::Blast::ExporterMeshData + submeshMatsNv::Blast::ExporterMeshData submeshOffsetsNv::Blast::ExporterMeshData texIndexNv::Blast::ExporterMeshData uvsNv::Blast::ExporterMeshData diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data.html index af3ff1f..64c8855 100644 --- a/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data.html +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_exporter_mesh_data.html @@ -71,7 +71,7 @@ uint32_t submeshCount -const char ** submeshNames +MaterialssubmeshMats uint32_t * submeshOffsets @@ -248,12 +248,12 @@ Hull offsets. Contains meshCount + 1 element. First hull for i-th mesh: hulls[hu

        - +

        diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_materials-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_materials-members.html new file mode 100644 index 0000000..0a40964 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_materials-members.html @@ -0,0 +1,52 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + + + + +
        +

        Nv::Blast::Materials Member List

        This is the complete list of members for Nv::Blast::Materials, including all inherited members.

        + + +
        diffuse_texNv::Blast::Materials
        nameNv::Blast::Materials

        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_materials.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_materials.html new file mode 100644 index 0000000..b175289 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_materials.html @@ -0,0 +1,96 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::Materials Struct Reference + + + + + + + + +
        +

        Nv::Blast::Materials Struct Reference

        #include <NvBlastExtExporter.h> +

        + +

        +List of all members. + + + + + + +

        Public Attributes

        const char * diffuse_tex
        const char * name
        +


        Member Data Documentation

        + +
        +
        + + + + +
        const char* Nv::Blast::Materials::diffuse_tex
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + +
        const char* Nv::Blast::Materials::name
        +
        +
        + +

        + +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration-members.html new file mode 100644 index 0000000..3012f95 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration-members.html @@ -0,0 +1,54 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + + + + +
        +

        Nv::Blast::NoiseConfiguration Member List

        This is the complete list of members for Nv::Blast::NoiseConfiguration, including all inherited members.

        + + + + +
        amplitudeNv::Blast::NoiseConfiguration
        frequencyNv::Blast::NoiseConfiguration
        octaveNumberNv::Blast::NoiseConfiguration
        surfaceResolutionNv::Blast::NoiseConfiguration

        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration.html new file mode 100644 index 0000000..30798df --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_noise_configuration.html @@ -0,0 +1,131 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::NoiseConfiguration Struct Reference + + + + + + + + +
        +

        Nv::Blast::NoiseConfiguration Struct Reference

        #include <NvBlastExtAuthoringFractureTool.h> +

        + +

        +List of all members. + + + + + + + + + + +

        Public Attributes

        float amplitude = 0.f
        float frequency = 1.f
        uint32_t octaveNumber = 1
        uint32_t surfaceResolution = 1
        +


        Member Data Documentation

        + +
        + +
        + +

        +Noisy slicing configutaion:

        +Amplitude of cutting surface noise. If it is 0 - noise is disabled. +

        +

        + +

        + +
        + +

        +Frequencey of cutting surface noise. +

        +

        + +

        + +
        + +

        +Octave number in slicing surface noise. +

        +

        + +

        + +
        + +

        +Cutting surface resolution. +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d-members.html new file mode 100644 index 0000000..8e5be68 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d-members.html @@ -0,0 +1,56 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + + + + +
        +

        Nv::Blast::POINT2D Member List

        This is the complete list of members for Nv::Blast::POINT2D, including all inherited members.

        + + + + + + +
        operator<(const POINT2D &other) const Nv::Blast::POINT2D [inline]
        operator==(const POINT2D &other) const Nv::Blast::POINT2D [inline]
        POINT2D()Nv::Blast::POINT2D [inline]
        POINT2D(int32_t _x, int32_t _y)Nv::Blast::POINT2D [inline]
        xNv::Blast::POINT2D
        yNv::Blast::POINT2D

        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d.html new file mode 100644 index 0000000..5b7774b --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_p_o_i_n_t2_d.html @@ -0,0 +1,195 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::POINT2D Struct Reference + + + + + + + + +
        +

        Nv::Blast::POINT2D Struct Reference

        #include <NvBlastExtAuthoringCutoutImpl.h> +

        + +

        +List of all members. + + + + + + + + + + + + + + + +

        Public Member Functions

        bool operator< (const POINT2D &other) const
        bool operator== (const POINT2D &other) const
         POINT2D (int32_t _x, int32_t _y)
         POINT2D ()

        Public Attributes

        int32_t x
        int32_t y
        +


        Constructor & Destructor Documentation

        + +
        +
        + + + + + + + + +
        Nv::Blast::POINT2D::POINT2D (  )  [inline]
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + + + + + + + + + + + + + + + +
        Nv::Blast::POINT2D::POINT2D (int32_t  _x,
        int32_t  _y 
        ) [inline]
        +
        +
        + +

        + +

        +

        +


        Member Function Documentation

        + +
        +
        + + + + + + + + + +
        bool Nv::Blast::POINT2D::operator< (const POINT2D other  )  const [inline]
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + + + + + + +
        bool Nv::Blast::POINT2D::operator== (const POINT2D other  )  const [inline]
        +
        +
        + +

        + +

        +

        +


        Member Data Documentation

        + +
        +
        + + + + +
        int32_t Nv::Blast::POINT2D::x
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + +
        int32_t Nv::Blast::POINT2D::y
        +
        +
        + +

        + +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert-members.html new file mode 100644 index 0000000..5d41f07 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert-members.html @@ -0,0 +1,52 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Member List + + + + + + + + +
        +

        Nv::Blast::PolyVert Member List

        This is the complete list of members for Nv::Blast::PolyVert, including all inherited members.

        + + +
        flagsNv::Blast::PolyVert
        indexNv::Blast::PolyVert

        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert.html new file mode 100644 index 0000000..9165305 --- /dev/null +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_poly_vert.html @@ -0,0 +1,96 @@ + + + NVIDIA(R) Blast(R) SDK 1.1 Source Reference: Nv::Blast::PolyVert Struct Reference + + + + + + + + +
        +

        Nv::Blast::PolyVert Struct Reference

        #include <NvBlastExtAuthoringCutoutImpl.h> +

        + +

        +List of all members. + + + + + + +

        Public Attributes

        uint16_t flags
        uint16_t index
        +


        Member Data Documentation

        + +
        +
        + + + + +
        uint16_t Nv::Blast::PolyVert::flags
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + +
        uint16_t Nv::Blast::PolyVert::index
        +
        +
        + +

        + +

        +

        +


        The documentation for this struct was generated from the following file: +
        + + + + diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration-members.html index dcb3c0b..a49a767 100644 --- a/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration-members.html +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration-members.html @@ -42,11 +42,8 @@

        Nv::Blast::SlicingConfiguration Member List

        This is the complete list of members for Nv::Blast::SlicingConfiguration, including all inherited members.

        - - - + - diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration.html index 49e70aa..c8d7826 100644 --- a/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration.html +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_slicing_configuration.html @@ -51,16 +51,10 @@ - - - - - + - - @@ -84,50 +78,19 @@ Angle variation, value in [0, 1]

        - +

        angle_variationsNv::Blast::SlicingConfiguration
        noiseAmplitudeNv::Blast::SlicingConfiguration
        noiseFrequencyNv::Blast::SlicingConfiguration
        noiseOctaveNumberNv::Blast::SlicingConfiguration
        noiseNv::Blast::SlicingConfiguration
        offset_variationsNv::Blast::SlicingConfiguration
        surfaceResolutionNv::Blast::SlicingConfiguration
        x_slicesNv::Blast::SlicingConfiguration
        y_slicesNv::Blast::SlicingConfiguration
        z_slicesNv::Blast::SlicingConfiguration

        Public Attributes

        float angle_variations = 0.f
        float noiseAmplitude = 0.f
        float noiseFrequency = 1.f
        uint32_t noiseOctaveNumber = 1
        NoiseConfiguration noise
        float offset_variations = 0.f
        uint32_t surfaceResolution = 1
        int32_t x_slices = 1
        int32_t y_slices = 1
        - +
        float Nv::Blast::SlicingConfiguration::noiseAmplitude = 0.f NoiseConfiguration Nv::Blast::SlicingConfiguration::noise

        -Noisy slicing configutaion:

        -Amplitude of cutting surface noise. If it is 0 - noise is disabled. -

        -

        - -

        - -
        - -

        -Frequencey of cutting surface noise. -

        -

        - -

        - -
        -

        -Octave number in slicing surface noise.

        @@ -145,21 +108,6 @@ Octave number in slicing surface noise. Offset variation, value in [0, 1]

        - -

        - -
        - -

        -Cutting surface resolution. -

        -

        diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle-members.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle-members.html index 33e41d9..b1da3b8 100644 --- a/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle-members.html +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle-members.html @@ -45,6 +45,8 @@ bNv::Blast::Triangle cNv::Blast::Triangle getNormal() const Nv::Blast::Triangle [inline] + getVertex(uint32_t index)Nv::Blast::Triangle [inline] + getVertex(uint32_t index) const Nv::Blast::Triangle [inline] materialIdNv::Blast::Triangle smoothingGroupNv::Blast::Triangle Triangle()Nv::Blast::Triangle [inline] diff --git a/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle.html b/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle.html index 7588dd1..a6cae4f 100644 --- a/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle.html +++ b/docs/source_docs/files/struct_nv_1_1_blast_1_1_triangle.html @@ -51,6 +51,10 @@

        Public Member Functions

        physx::PxVec3 getNormal () const +const VertexgetVertex (uint32_t index) const + +VertexgetVertex (uint32_t index) +  Triangle (Vertex a, Vertex b, Vertex c)  Triangle () @@ -143,6 +147,46 @@

        +

        +

        + +

        +
        + + + + + + + + + +
        const Vertex& Nv::Blast::Triangle::getVertex (uint32_t  index  )  const [inline]
        +
        +
        + +

        + +

        +

        + +

        +
        + + + + + + + + + +
        Vertex& Nv::Blast::Triangle::getVertex (uint32_t  index  )  [inline]
        +
        +
        + +

        +


        Member Data Documentation

        diff --git a/docs/source_docs/files/tree.html b/docs/source_docs/files/tree.html index b3c608e..3ad94a3 100644 --- a/docs/source_docs/files/tree.html +++ b/docs/source_docs/files/tree.html @@ -198,8 +198,13 @@

        |o*Nv::Blast::CollisionHull::CollisionHull::HullPolygon

        |o*Nv::Blast::CollisionHullImpl

        |o*Nv::Blast::CollisionParams

        +

        |o*Nv::Blast::ConvexLoop

        |o*Nv::Blast::ConvexMeshBuilder

        |o*Nv::Blast::ConvexMeshBuilderImpl

        +

        |o*Nv::Blast::Cutout

        +

        |o*Nv::Blast::CutoutConfiguration

        +

        |o*Nv::Blast::CutoutSet

        +

        |o*Nv::Blast::CutoutSetImpl

        |o*Nv::Blast::DebugBuffer

        |o*Nv::Blast::DebugLine

        |o*Nv::Blast::ApexImporter::DefaultReleaser< T >

        @@ -324,13 +329,15 @@

        |o*Nv::Blast::LlObjectTypeID

        |o*Nv::Blast::LocalBuffer< T >

        |o*VHACD::Material

        -

        |o*VHACD::Mesh

        +

        |o*Nv::Blast::Materials

        |o*Nv::Blast::Mesh

        +

        |o*VHACD::Mesh

        |o*Nv::Blast::MeshCleaner

        |o*Nv::Blast::MeshCleanerImpl

        |o*Nv::Blast::MeshImpl

        |o*Nv::Blast::MeshNoiser

        |o*VHACD::Mutex

        +

        |o*Nv::Blast::NoiseConfiguration

        |o*NvBlastActor

        |o*NvBlastActorDesc

        |o*NvBlastActorSplitEvent

        @@ -374,8 +381,8 @@

        |o*NvBlastID

        |o*NvBlastMessage

        |o*NvBlastSubgraphShaderActor

        -

        |o*Nv::Blast::Serialization::NvBlastSupportGraph

        |o*NvBlastSupportGraph

        +

        |o*Nv::Blast::Serialization::NvBlastSupportGraph

        |o*Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::_capnpPrivate

        |o*Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder

        |o*Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Pipeline

        @@ -400,6 +407,8 @@

        |o*Nv::Blast::PerlinNoise

        |o*VHACD::Plane

        |o*Nv::Blast::PlaneChunkIndexer

        +

        |o*Nv::Blast::POINT2D

        +

        |o*Nv::Blast::PolyVert

        |o*VHACD::PrimitiveSet

        |o*Nv::Blast::ProfilerCallback

        |o*Nv::Blast::ProfilerDetail

        @@ -460,8 +469,8 @@

        |o*Nv::Blast::Serialization::TkAsset::TkAsset::Pipeline

        |o*Nv::Blast::Serialization::TkAsset::TkAsset::Reader

        |o*Nv::Blast::TkAssetDesc

        -

        |o*Nv::Blast::TkAssetJointDesc

        |o*Nv::Blast::Serialization::TkAssetJointDesc

        +

        |o*Nv::Blast::TkAssetJointDesc

        |o*Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::_capnpPrivate

        |o*Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder

        |o*Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Pipeline

        @@ -566,20 +575,27 @@

        |o*Nv::Blast::CollisionHull::CollisionHull::HullPolygon

        |o*Nv::Blast::CollisionParams

        +

        |o*Nv::Blast::ConvexLoop

        |o+Nv::Blast::ConvexMeshBuilder

        +

        |o*Nv::Blast::Cutout

        +

        |o*Nv::Blast::CutoutConfiguration

        +

        |o+Nv::Blast::CutoutSet

        +

        |o*Nv::Blast::DebugBuffer

        |o*Nv::Blast::DebugLine

        |o*Nv::Blast::ApexImporter::DefaultReleaser< T >

        -

        |o+Nv::Blast::DLink

        -
        +

        |o+Nv::Blast::DLink

        +

        |o*Nv::Blast::DList

        -

        |o+Nv::Blast::DList::DList::It

        -
        +

        |o+Nv::Blast::DList::DList::It

        +

        |o*Nv::Blast::Edge

        @@ -594,8 +610,8 @@

        |o*Nv::Blast::ExtDamageAcceleratorInternal::ExtDamageAcceleratorInternal::QueryBondData

        |o*Nv::Blast::ExtDamageAcceleratorInternal::ExtDamageAcceleratorInternal::ResultCallback

        |o*Nv::Blast::ExtForceMode

        -

        |o+Nv::Blast::ExtGroupTaskManager

        -
        +

        |o+Nv::Blast::ExtGroupTaskManager

        +

        |o*Nv::Blast::ExtGroupWorkerTask

        @@ -607,13 +623,13 @@

        |o*Nv::Blast::ExtKJPxOutputStream

        |o*Nv::Blast::ExtOutputStream

        |o*Nv::Blast::ExtProfileData

        -

        |o+Nv::Blast::ExtPxActor

        -
        +

        |o+Nv::Blast::ExtPxActor

        +

        |o*Nv::Blast::ExtPxActorDescTemplate

        -

        |o+Nv::Blast::ExtPxAsset

        -
        +

        |o+Nv::Blast::ExtPxAsset

        +

        |o*Nv::Blast::Serialization::ExtPxAsset

        @@ -629,24 +645,24 @@

        |o*Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Builder

        |o*Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Pipeline

        |o*Nv::Blast::Serialization::ExtPxChunk::ExtPxChunk::Reader

        -

        |o+Nv::Blast::ExtPxFamily

        -
        +

        |o+Nv::Blast::ExtPxFamily

        +

        |o*Nv::Blast::ExtPxFamilyDesc

        -

        |o+Nv::Blast::ExtPxListener

        -
        +

        |o+Nv::Blast::ExtPxListener

        + -

        |o+Nv::Blast::ExtPxManager

        -
        +

        |o+Nv::Blast::ExtPxManager

        +

        |o*Nv::Blast::ExtPxObjectTypeID

        |o*Nv::Blast::ExtPxShapeDescTemplate

        |o*Nv::Blast::ExtPxSpawnSettings

        -

        |o+Nv::Blast::ExtPxStressSolver

        -
        +

        |o+Nv::Blast::ExtPxStressSolver

        +

        |o*Nv::Blast::ExtPxSubchunk

        @@ -655,8 +671,8 @@

        |o*Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Builder

        |o*Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Pipeline

        |o*Nv::Blast::Serialization::ExtPxSubchunk::ExtPxSubchunk::Reader

        -

        |o+Nv::Blast::ExtSerialization

        -
        +

        |o+Nv::Blast::ExtSerialization

        +

        |o*Nv::Blast::ExtSerialization::ExtSerialization::BufferProvider

        @@ -667,18 +683,18 @@

        |o*Nv::Blast::ExtStressSolver::ExtStressSolver::DebugBuffer

        |o*Nv::Blast::ExtStressSolver::ExtStressSolver::DebugLine

        |o*Nv::Blast::ExtStressSolverSettings

        -

        |o+Nv::Blast::ExtSyncEvent

        -
        -

        ||o+Nv::Blast::ExtSyncEventInstance< ExtSyncEventFamilySync, ExtSyncEventType::FamilySync >

        -
        +

        |o+Nv::Blast::ExtSyncEvent

        +
        +

        ||o+Nv::Blast::ExtSyncEventInstance< ExtSyncEventFamilySync, ExtSyncEventType::FamilySync >

        + -

        ||o+Nv::Blast::ExtSyncEventInstance< ExtSyncEventFracture, ExtSyncEventType::Fracture >

        -
        +

        ||o+Nv::Blast::ExtSyncEventInstance< ExtSyncEventFracture, ExtSyncEventType::Fracture >

        + -

        ||o+Nv::Blast::ExtSyncEventInstance< ExtSyncEventPhysicsSync, ExtSyncEventType::Physics >

        -
        +

        ||o+Nv::Blast::ExtSyncEventInstance< ExtSyncEventPhysicsSync, ExtSyncEventType::Physics >

        +

        ||\*Nv::Blast::ExtSyncEventInstance< T, eventType >

        @@ -697,24 +713,24 @@

        |o*FLOAT_MATH::fm_Tesselate

        |o*FLOAT_MATH::fm_Triangulate

        |o*FLOAT_MATH::fm_VertexIndex

        -

        |o+Nv::Blast::FractureTool

        -
        +

        |o+Nv::Blast::FractureTool

        +

        |o*physx::shdfnd::Hash< NvBlastID >

        |o*Nv::Blast::HashMap< Key, Value, HashFn >

        |o*Nv::Blast::HashSet< Key, HashFn >

        |o*VHACD::ICHull

        -

        |o+Nv::Blast::IMeshFileReader

        -
        -

        ||o+Nv::Blast::IFbxFileReader

        -
        +

        |o+Nv::Blast::IMeshFileReader

        + -

        |o+Nv::Blast::IMeshFileWriter

        -
        +

        |o+Nv::Blast::IMeshFileWriter

        + @@ -723,28 +739,28 @@

        |o*Nv::Blast::IndexDList< IndexType >

        |o*Nv::Blast::InlineArray< T, N >

        |o*Nv::Blast::IteratorBase< T >

        -

        |o+Nv::Blast::IteratorBase< IndexType >

        -
        +

        |o+Nv::Blast::IteratorBase< IndexType >

        + -

        |o+Nv::Blast::IteratorBase< uint32_t >

        -
        -

        ||o+Nv::Blast::DListIt< uint32_t >

        -
        +

        |o+Nv::Blast::IteratorBase< uint32_t >

        +
        +

        ||o+Nv::Blast::DListIt< uint32_t >

        + -

        ||o+Nv::Blast::LListIt< uint32_t >

        -
        +

        ||o+Nv::Blast::LListIt< uint32_t >

        + -

        ||\+Nv::Blast::ChunkDepthFirstIt

        - -

        |o+VHACD::IVHACD

        -
        +

        |o+VHACD::IVHACD

        +

        |o*VHACD::IVHACD::IVHACD::Constraint

        @@ -757,34 +773,36 @@

        |o*Nv::Blast::LlObjectTypeID

        |o*Nv::Blast::LocalBuffer< T >

        |o*VHACD::Material

        -

        |o*VHACD::Mesh

        -

        |o+Nv::Blast::Mesh

        -
        +

        |o*Nv::Blast::Materials

        +

        |o+Nv::Blast::Mesh

        + -

        |o+Nv::Blast::MeshCleaner

        -
        +

        |o*VHACD::Mesh

        +

        |o+Nv::Blast::MeshCleaner

        +

        |o*Nv::Blast::MeshNoiser

        |o*VHACD::Mutex

        -

        |o+NvBlastActor

        -
        +

        |o*Nv::Blast::NoiseConfiguration

        +

        |o+NvBlastActor

        + -

        |o+NvBlastActorDesc

        -
        +

        |o+NvBlastActorDesc

        +

        |o*NvBlastActorSplitEvent

        -

        |o+NvBlastAsset

        -
        +

        |o+NvBlastAsset

        + -

        |o+NvBlastAssetDesc

        -
        -

        ||\+Nv::Blast::TkAssetDesc

        -
        +

        |o+NvBlastAssetDesc

        + @@ -794,8 +812,8 @@

        |o*Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Builder

        |o*Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Pipeline

        |o*Nv::Blast::Serialization::NvBlastBond::NvBlastBond::Reader

        -

        |o+NvBlastBondDesc

        -
        +

        |o+NvBlastBondDesc

        +

        |o*NvBlastBondFractureData

        @@ -808,8 +826,8 @@

        |o*NvBlastChunkDesc

        |o*NvBlastChunkFractureData

        |o*NvBlastDamageProgram

        -

        |o+NvBlastDataBlock

        -
        +

        |o+NvBlastDataBlock

        +

        |o*Nv::Blast::Serialization::NvBlastDataBlock

        @@ -818,10 +836,10 @@

        |o*Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Pipeline

        |o*Nv::Blast::Serialization::NvBlastDataBlock::NvBlastDataBlock::Reader

        |o*NvBlastExtCapsuleRadialDamageDesc

        -

        |o+NvBlastExtDamageAccelerator

        -
        -

        ||\+Nv::Blast::ExtDamageAcceleratorInternal

        -
        +

        |o+NvBlastExtDamageAccelerator

        + @@ -837,8 +855,8 @@

        |o*NvBlastID

        |o*NvBlastMessage

        |o*NvBlastSubgraphShaderActor

        -

        |o*Nv::Blast::Serialization::NvBlastSupportGraph

        |o*NvBlastSupportGraph

        +

        |o*Nv::Blast::Serialization::NvBlastSupportGraph

        |o*Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::_capnpPrivate

        |o*Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Builder

        |o*Nv::Blast::Serialization::NvBlastSupportGraph::NvBlastSupportGraph::Pipeline

        @@ -861,13 +879,15 @@

        |o*Nv::Blast::PerlinNoise

        |o*VHACD::Plane

        |o*Nv::Blast::PlaneChunkIndexer

        -

        |o+VHACD::PrimitiveSet

        -
        +

        |o*Nv::Blast::POINT2D

        +

        |o*Nv::Blast::PolyVert

        +

        |o+VHACD::PrimitiveSet

        + -

        |o+Nv::Blast::ProfilerCallback

        -
        +

        |o+Nv::Blast::ProfilerCallback

        +

        |o*Nv::Blast::ProfilerDetail

        @@ -908,8 +928,8 @@

        |o*Nv::Blast::SharedMemory

        |o*Nv::Blast::SimplexNoise

        |o*Nv::Blast::SlicingConfiguration

        -

        |o+Nv::Blast::SpatialAccelerator

        -
        +

        |o+Nv::Blast::SpatialAccelerator

        +

        ||o*Nv::Blast::BBoxBasedAccelerator

        ||o*Nv::Blast::DummyAccelerator

        ||o*Nv::Blast::IntersectionTestingAccelerator

        @@ -926,55 +946,55 @@

        |o*Nv::Blast::Serialization::TkAsset::TkAsset::Builder

        |o*Nv::Blast::Serialization::TkAsset::TkAsset::Pipeline

        |o*Nv::Blast::Serialization::TkAsset::TkAsset::Reader

        -

        |o*Nv::Blast::TkAssetJointDesc

        |o*Nv::Blast::Serialization::TkAssetJointDesc

        +

        |o*Nv::Blast::TkAssetJointDesc

        |o*Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::_capnpPrivate

        |o*Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Builder

        |o*Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Pipeline

        |o*Nv::Blast::Serialization::TkAssetJointDesc::TkAssetJointDesc::Reader

        |o*Nv::Blast::TkEvent

        -

        |o+Nv::Blast::TkEventListener

        -
        +

        |o+Nv::Blast::TkEventListener

        +

        |o*Nv::Blast::TkEventQueue

        |o*Nv::Blast::TkFractureCommands

        |o*Nv::Blast::TkFractureEvents

        -

        |o+Nv::Blast::TkFramework

        -
        +

        |o+Nv::Blast::TkFramework

        +

        |o*Nv::Blast::TkGroupDesc

        |o*Nv::Blast::TkGroupStats

        -

        |o+Nv::Blast::TkGroupWorker

        -
        +

        |o+Nv::Blast::TkGroupWorker

        +

        |o*Nv::Blast::TkJointData

        |o*Nv::Blast::TkJointDesc

        |o*Nv::Blast::TkJointUpdateEvent

        -

        |o+Nv::Blast::TkObject

        -
        -

        ||o+Nv::Blast::TkActor

        -
        +

        |o+Nv::Blast::TkObject

        +
        +

        ||o+Nv::Blast::TkActor

        + -

        ||o+Nv::Blast::TkIdentifiable

        -
        +

        ||o+Nv::Blast::TkIdentifiable

        + -

        ||\+Nv::Blast::TkJoint

        -

        |o*Nv::Blast::TkObjectTypeID

        |o*Nv::Blast::TkSplitEvent

        -

        |o+Nv::Blast::TkType

        -
        +

        |o+Nv::Blast::TkType

        +

        |o*Nv::Blast::TkTypeIndex

        @@ -1000,8 +1020,8 @@

        |o*Nv::Blast::VSA::Vec4

        |o*Nv::Blast::Vertex

        |o*VHACD::Volume

        -

        |o+Nv::Blast::VoronoiSitesGenerator

        -

        o*Class Members

        -

        o+Namespace List

        -
        +

        o+Namespace List

        +

        |o*capnp

        |o*capnp::schemas

        |o*fbxsdk

        @@ -1031,8 +1051,8 @@

        |\*VHACD

        o*Namespace Members

        -

        o+File List

        -
        +

        o+File List

        +

        |o*sdk/common/NvBlastArray.h

        |o*sdk/common/NvBlastAssert.h

        |o*sdk/common/NvBlastAtomic.h

        @@ -1056,6 +1076,7 @@

        |o*sdk/extensions/authoring/include/NvBlastExtAuthoring.h

        |o*sdk/extensions/authoring/include/NvBlastExtAuthoringBondGenerator.h

        |o*sdk/extensions/authoring/include/NvBlastExtAuthoringCollisionBuilder.h

        +

        |o*sdk/extensions/authoring/include/NvBlastExtAuthoringCutout.h

        |o*sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h

        |o*sdk/extensions/authoring/include/NvBlastExtAuthoringMesh.h

        |o*sdk/extensions/authoring/include/NvBlastExtAuthoringMeshCleaner.h

        @@ -1065,6 +1086,7 @@

        |o*sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.h

        |o*sdk/extensions/authoring/source/NvBlastExtAuthoringBooleanTool.h

        |o*sdk/extensions/authoring/source/NvBlastExtAuthoringCollisionBuilderImpl.h

        +

        |o*sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h

        |o*sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h

        |o*sdk/extensions/authoring/source/NvBlastExtAuthoringInternalCommon.h

        |o*sdk/extensions/authoring/source/NvBlastExtAuthoringMeshCleanerImpl.h

        diff --git a/samples/SampleBase/blast/BlastModel.cpp b/samples/SampleBase/blast/BlastModel.cpp index 3477cda..bfe50e8 100644 --- a/samples/SampleBase/blast/BlastModel.cpp +++ b/samples/SampleBase/blast/BlastModel.cpp @@ -104,6 +104,86 @@ BlastModelPtr BlastModel::loadFromFbxFile(const char* path) } +void loadMeshes(std::vector& meshes, tinyobj::mesh_t mesh) +{ + // Check if all faces are triangles + bool allTriangles = true; + for (uint32_t i = 0; i < mesh.num_vertices.size(); ++i) + { + if (mesh.num_vertices[i] != 3) + { + allTriangles = false; + break; + } + } + if (!allTriangles) return; + + std::map matIdToMesh; + for (int32_t mt : mesh.material_ids) + { + auto it = matIdToMesh.find(mt); + if (it == matIdToMesh.end()) + { + meshes.push_back(BlastModel::Chunk::Mesh()); + matIdToMesh[mt] = uint32_t(meshes.size()) - 1; + } + } + + std::vector oldVertices(mesh.positions.size() / 3); + std::vector oldIndexToNew; + + for (uint32_t i = 0; i < oldVertices.size(); ++i) + { + oldVertices[i].position.x = mesh.positions[i * 3]; + oldVertices[i].position.y = mesh.positions[i * 3 + 1]; + oldVertices[i].position.z = mesh.positions[i * 3 + 2]; + + oldVertices[i].normal.x = mesh.normals[i * 3]; + oldVertices[i].normal.y = mesh.normals[i * 3 + 1]; + oldVertices[i].normal.z = mesh.normals[i * 3 + 2]; + + oldVertices[i].uv.x = mesh.texcoords[i * 2]; + oldVertices[i].uv.y = mesh.texcoords[i * 2 + 1]; + } + + for (auto matmapping : matIdToMesh) + { + int32_t mid = matmapping.first; + auto sampleMesh = &meshes[matmapping.second]; + sampleMesh->materialIndex = (mid >= 0)? mid : 0; + oldIndexToNew.assign(oldVertices.size(), -1); + + PxVec3 emin(FLT_MAX, FLT_MAX, FLT_MAX); + PxVec3 emax(FLT_MIN, FLT_MIN, FLT_MIN); + + + for (uint32_t i = 0; i < mesh.indices.size() / 3; i++) + { + if (mesh.material_ids[i] != mid) continue; + for (int32_t vi = 2; vi >= 0; --vi) + { + int32_t idx = mesh.indices[i * 3 + vi]; + if (oldIndexToNew[idx] == -1) + { + oldIndexToNew[idx] = (uint32_t)sampleMesh->mesh.vertices.size(); + sampleMesh->mesh.vertices.push_back(oldVertices[idx]); + + emin = emin.minimum(sampleMesh->mesh.vertices.back().position); + emax = emax.maximum(sampleMesh->mesh.vertices.back().position); + } + sampleMesh->mesh.indices.push_back(oldIndexToNew[idx]); + + // assign extents + sampleMesh->mesh.extents = (emax - emin) * 0.5f; + + // get the center + sampleMesh->mesh.center = emin + sampleMesh->mesh.extents; + } + } + } +} + + BlastModelPtr BlastModel::loadFromFileTinyLoader(const char* path) { std::shared_ptr model = std::shared_ptr(new BlastModel()); @@ -153,94 +233,18 @@ BlastModelPtr BlastModel::loadFromFileTinyLoader(const char* path) for (uint32_t m = 0; m < shapes.size(); m++) { tinyobj::shape_t& pMesh = shapes[m]; - uint32_t materialIndex; + int32_t materialIndex = 0; // This is actually not set uint32_t chunkIndex; - sscanf(pMesh.name.data(), "%d_%d", &chunkIndex, &materialIndex); - if (model->chunks.size() <= chunkIndex) + int32_t sc = sscanf(pMesh.name.data(), "%d_%d", &chunkIndex, &materialIndex); + if (sc == 0) { - model->chunks.resize(chunkIndex + 1); - } - model->chunks[chunkIndex].meshes.push_back(Chunk::Mesh()); - Chunk::Mesh& mesh = model->chunks[chunkIndex].meshes.back(); - - mesh.materialIndex = materialIndex; - SimpleMesh& chunkMesh = mesh.mesh; - - PxVec3 emin(FLT_MAX, FLT_MAX, FLT_MAX); - PxVec3 emax(FLT_MIN, FLT_MIN, FLT_MIN); - - - - // create an index buffer - chunkMesh.indices.resize(pMesh.mesh.indices.size()); - - // Check if all faces are triangles - bool allTriangles = true; - for (uint32_t i = 0; i < pMesh.mesh.num_vertices.size(); ++i) - { - if (pMesh.mesh.num_vertices[i] != 3) - { - allTriangles = false; - break; - } - } - - if (pMesh.mesh.indices.size() > 0 && allTriangles) - { - for (uint32_t i = 0; i < pMesh.mesh.indices.size(); i += 3) - { - chunkMesh.indices[i] = (uint32_t)pMesh.mesh.indices[i + 2]; - chunkMesh.indices[i + 1] = (uint32_t)pMesh.mesh.indices[i + 1]; - chunkMesh.indices[i + 2] = (uint32_t)pMesh.mesh.indices[i]; - } + return nullptr; } - // create vertex buffer - chunkMesh.vertices.resize(pMesh.mesh.positions.size() / 3); - // copy positions - uint32_t indexer = 0; - for (uint32_t i = 0; i < pMesh.mesh.positions.size() / 3; i++) - { - chunkMesh.vertices[i].position.x = pMesh.mesh.positions[indexer]; - chunkMesh.vertices[i].position.y = pMesh.mesh.positions[indexer + 1]; - chunkMesh.vertices[i].position.z = pMesh.mesh.positions[indexer + 2]; - indexer += 3; - // calc min/max - emin = emin.minimum(chunkMesh.vertices[i].position); - emax = emax.maximum(chunkMesh.vertices[i].position); - } - - // copy normals - if (pMesh.mesh.normals.size() > 0) - { - indexer = 0; - for (uint32_t i = 0; i < pMesh.mesh.normals.size() / 3; i++) - { - chunkMesh.vertices[i].normal.x = pMesh.mesh.normals[indexer]; - chunkMesh.vertices[i].normal.y = pMesh.mesh.normals[indexer + 1]; - chunkMesh.vertices[i].normal.z = pMesh.mesh.normals[indexer + 2]; - - indexer += 3; - } - } - - // copy uv - if (pMesh.mesh.texcoords.size() > 0) + if (model->chunks.size() <= chunkIndex) { - indexer = 0; - for (uint32_t i = 0; i < pMesh.mesh.texcoords.size() / 2; i++) - { - chunkMesh.vertices[i].uv.x = pMesh.mesh.texcoords[indexer]; - chunkMesh.vertices[i].uv.y = pMesh.mesh.texcoords[indexer + 1]; - indexer += 2; - } + model->chunks.resize(chunkIndex + 1); } - - // assign extents - chunkMesh.extents = (emax - emin) * 0.5f; - - // get the center - chunkMesh.center = emin + chunkMesh.extents; - + loadMeshes(model->chunks.back().meshes, pMesh.mesh); } } diff --git a/samples/SampleBase/ui/CommonUIController.cpp b/samples/SampleBase/ui/CommonUIController.cpp index f9e218b..280bf46 100644 --- a/samples/SampleBase/ui/CommonUIController.cpp +++ b/samples/SampleBase/ui/CommonUIController.cpp @@ -353,7 +353,7 @@ void CommonUIController::drawUI() addParam(PxVisualizationParameter::eBODY_MASS_AXES, "Body Mass Axes"); addParam(PxVisualizationParameter::eBODY_LIN_VELOCITY, "Body Lin Velocity"); addParam(PxVisualizationParameter::eBODY_ANG_VELOCITY, "Body Ang Velocity"); - addParam(PxVisualizationParameter::eBODY_JOINT_GROUPS, "Body Joint"); + //addParam(PxVisualizationParameter::eBODY_JOINT_GROUPS, "Body Joint"); addParam(PxVisualizationParameter::eCONTACT_POINT, "Contact Point"); addParam(PxVisualizationParameter::eCONTACT_NORMAL, "Contact Normal"); addParam(PxVisualizationParameter::eCONTACT_ERROR, "Contact Error"); diff --git a/samples/compiler/cmake/windows/SampleBase-AT.cmake b/samples/compiler/cmake/windows/SampleBase-AT.cmake index 98d980b..80fa0a5 100644 --- a/samples/compiler/cmake/windows/SampleBase-AT.cmake +++ b/samples/compiler/cmake/windows/SampleBase-AT.cmake @@ -2,6 +2,6 @@ ADD_CUSTOM_COMMAND(TARGET SampleBase POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${PXSHAREDSDK_DLLS} ${PHYSXSDK_DLLS} ${SHADOW_LIB_DLL} ${HBAO_PLUS_DLL} ${D3DCOMPILER_DLL} + ${PXSHAREDSDK_DLLS} ${PHYSXSDK_DLLS} ${SHADOW_LIB_DLL} ${HBAO_PLUS_DLL} ${D3DCOMPILER_DLL} ${NVTOOLSEXT_DLL} ${BL_EXE_OUTPUT_DIR} ) diff --git a/sdk/compiler/cmake/NvBlastExtAuthoring.cmake b/sdk/compiler/cmake/NvBlastExtAuthoring.cmake index 00ecfc1..c0818c2 100644 --- a/sdk/compiler/cmake/NvBlastExtAuthoring.cmake +++ b/sdk/compiler/cmake/NvBlastExtAuthoring.cmake @@ -29,8 +29,9 @@ SET(PUBLIC_FILES ${AUTHORING_EXT_INCLUDE_DIR}/NvBlastExtAuthoringFractureTool.h ${AUTHORING_EXT_INCLUDE_DIR}/NvBlastExtAuthoringMesh.h ${AUTHORING_EXT_INCLUDE_DIR}/NvBlastExtAuthoringTypes.h - ${AUTHORING_EXT_INCLUDE_DIR}/NvBlastExtAuthoring.h + ${AUTHORING_EXT_INCLUDE_DIR}/NvBlastExtAuthoring.h ${AUTHORING_EXT_INCLUDE_DIR}/NvBlastExtAuthoringMeshCleaner.h + ${AUTHORING_EXT_INCLUDE_DIR}/NvBlastExtAuthoringCutout.h ) SET(EXT_AUTHORING_FILES @@ -60,6 +61,8 @@ SET(EXT_AUTHORING_FILES ${AUTHORING_EXT_SOURCE_DIR}/NvBlastExtAuthoring.cpp ${AUTHORING_EXT_SOURCE_DIR}/NvBlastExtAuthoringMeshCleanerImpl.h ${AUTHORING_EXT_SOURCE_DIR}/NvBlastExtAuthoringMeshCleanerImpl.cpp + ${AUTHORING_EXT_SOURCE_DIR}/NvBlastExtAuthoringCutoutImpl.h + ${AUTHORING_EXT_SOURCE_DIR}/NvBlastExtAuthoringCutoutImpl.cpp ) SET(VHACD_SOURCE_FILES diff --git a/sdk/compiler/cmake/modules/FindApexSDK.cmake b/sdk/compiler/cmake/modules/FindApexSDK.cmake index 9910236..cc45e53 100644 --- a/sdk/compiler/cmake/modules/FindApexSDK.cmake +++ b/sdk/compiler/cmake/modules/FindApexSDK.cmake @@ -7,9 +7,10 @@ include(FindPackageHandleStandardArgs) # Find the includes -# TODO: Do the version stuff properly! find_path(APEXSDK_PATH include/Apex.h PATHS + $ENV{PM_Apex_PATH} + $ENV{PM_PhysX_PATH}/APEX_1.4 # multipack ${GW_DEPS_ROOT}/$ENV{PM_Apex_NAME}/${ApexSDK_FIND_VERSION} ${GW_DEPS_ROOT}/Apex/${ApexSDK_FIND_VERSION} ) @@ -33,14 +34,14 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") # What compiler version do we want? if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18.0.0.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0.0) - SET(VS_STR "vc12") + SET(VS_STR "VS2013") elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.0.0.0) - SET(VS_STR "vc14") + SET(VS_STR "VS2015") else() MESSAGE(FATAL_ERROR "Failed to find compatible PxSharedSDK - Only supporting VS2013 and VS2015") endif() - SET(LIB_PATH ${APEXSDK_PATH}/lib/${VS_STR}${APEX_ARCH_FOLDER}-cmake${PHYSX_CRT_SUFFIX}) + SET(LIB_PATH ${APEXSDK_PATH}/lib/${VS_STR}${APEX_ARCH_FOLDER}-cmake${PHYSX_CRT_SUFFIX} ${APEXSDK_PATH}/lib/${VS_STR}${APEX_ARCH_FOLDER}-NoPhysX ${APEXSDK_PATH}/../Lib/${APEX_ARCH_FOLDER}/${VS_STR} ${APEXSDK_PATH}/../Lib) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll") elseif(TARGET_BUILD_PLATFORM STREQUAL "PS4") @@ -58,232 +59,232 @@ elseif(TARGET_BUILD_PLATFORM STREQUAL "linux") endif() find_library(APEXCLOTHING_LIB - NAMES APEX_Clothing${APEX_ARCH_FILE} + NAMES APEX_Clothing APEX_Clothing${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXDESTRUCTIBLE_LIB - NAMES APEX_Destructible${APEX_ARCH_FILE} + NAMES APEX_Destructible APEX_Destructible${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLEGACY_LIB - NAMES APEX_Legacy${APEX_ARCH_FILE} + NAMES APEX_Legacy APEX_Legacy${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLOADER_LIB - NAMES APEX_Loader${APEX_ARCH_FILE} + NAMES APEX_Loader APEX_Loader${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXCOMMON_LIB - NAMES APEXCommon${APEX_ARCH_FILE} + NAMES APEXCommon APEXCommon${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXFRAMEWORK_LIB - NAMES APEXFramework${APEX_ARCH_FILE} + NAMES APEXFramework APEXFramework${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXSHARED_LIB - NAMES APEXShared${APEX_ARCH_FILE} + NAMES APEXShared APEXShared${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXCLOTHING_LIB_DEBUG - NAMES APEX_ClothingDEBUG${APEX_ARCH_FILE} + NAMES APEX_ClothingDEBUG APEX_ClothingDEBUG${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXDESTRUCTIBLE_LIB_DEBUG - NAMES APEX_DestructibleDEBUG${APEX_ARCH_FILE} + NAMES APEX_DestructibleDEBUG APEX_DestructibleDEBUG${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLEGACY_LIB_DEBUG - NAMES APEX_LegacyDEBUG${APEX_ARCH_FILE} + NAMES APEX_LegacyDEBUG APEX_LegacyDEBUG${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLOADER_LIB_DEBUG - NAMES APEX_LoaderDEBUG${APEX_ARCH_FILE} + NAMES APEX_LoaderDEBUG APEX_LoaderDEBUG${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXCOMMON_LIB_DEBUG - NAMES APEXCommonDEBUG${APEX_ARCH_FILE} + NAMES APEXCommonDEBUG APEXCommonDEBUG${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXFRAMEWORK_LIB_DEBUG - NAMES APEXFrameworkDEBUG${APEX_ARCH_FILE} + NAMES APEXFrameworkDEBUG APEXFrameworkDEBUG${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXSHARED_LIB_DEBUG - NAMES APEXSharedDEBUG${APEX_ARCH_FILE} + NAMES APEXSharedDEBUG APEXSharedDEBUG${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXCLOTHING_LIB_CHECKED - NAMES APEX_ClothingCHECKED${APEX_ARCH_FILE} + NAMES APEX_ClothingCHECKED APEX_ClothingCHECKED${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXDESTRUCTIBLE_LIB_CHECKED - NAMES APEX_DestructibleCHECKED${APEX_ARCH_FILE} + NAMES APEX_DestructibleCHECKED APEX_DestructibleCHECKED${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLEGACY_LIB_CHECKED - NAMES APEX_LegacyCHECKED${APEX_ARCH_FILE} + NAMES APEX_LegacyCHECKED APEX_LegacyCHECKED${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLOADER_LIB_CHECKED - NAMES APEX_LoaderCHECKED${APEX_ARCH_FILE} + NAMES APEX_LoaderCHECKED APEX_LoaderCHECKED${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXCOMMON_LIB_CHECKED - NAMES APEXCommonCHECKED${APEX_ARCH_FILE} + NAMES APEXCommonCHECKED APEXCommonCHECKED${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXFRAMEWORK_LIB_CHECKED - NAMES APEXFrameworkCHECKED${APEX_ARCH_FILE} + NAMES APEXFrameworkCHECKED APEXFrameworkCHECKED${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXSHARED_LIB_CHECKED - NAMES APEXSharedCHECKED${APEX_ARCH_FILE} + NAMES APEXSharedCHECKED APEXSharedCHECKED${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXCLOTHING_LIB_PROFILE - NAMES APEX_ClothingPROFILE${APEX_ARCH_FILE} + NAMES APEX_ClothingPROFILE APEX_ClothingPROFILE${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXDESTRUCTIBLE_LIB_PROFILE - NAMES APEX_DestructiblePROFILE${APEX_ARCH_FILE} + NAMES APEX_DestructiblePROFILE APEX_DestructiblePROFILE${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLEGACY_LIB_PROFILE - NAMES APEX_LegacyPROFILE${APEX_ARCH_FILE} + NAMES APEX_LegacyPROFILE APEX_LegacyPROFILE${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXLOADER_LIB_PROFILE - NAMES APEX_LoaderPROFILE${APEX_ARCH_FILE} + NAMES APEX_LoaderPROFILE APEX_LoaderPROFILE${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXCOMMON_LIB_PROFILE - NAMES APEXCommonPROFILE${APEX_ARCH_FILE} + NAMES APEXCommonPROFILE APEXCommonPROFILE${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXFRAMEWORK_LIB_PROFILE - NAMES APEXFrameworkPROFILE${APEX_ARCH_FILE} + NAMES APEXFrameworkPROFILE APEXFrameworkPROFILE${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(APEXSHARED_LIB_PROFILE - NAMES APEXSharedPROFILE${APEX_ARCH_FILE} + NAMES APEXSharedPROFILE APEXSharedPROFILE${APEX_ARCH_FILE} PATHS ${LIB_PATH} ) if (TARGET_BUILD_PLATFORM STREQUAL "Windows") - SET(DLL_PATH ${APEXSDK_PATH}/bin/${VS_STR}${APEX_ARCH_FOLDER}-cmake${APEX_CRT_SUFFIX}) + SET(DLL_PATH ${APEXSDK_PATH}/bin/${VS_STR}${APEX_ARCH_FOLDER}-cmake${APEX_CRT_SUFFIX} ${APEXSDK_PATH}/bin/${VS_STR}${APEX_ARCH_FOLDER}-NoPhysX ${APEXSDK_PATH}/../Bin/${APEX_ARCH_FOLDER}/${VS_STR} ${APEXSDK_PATH}/../Bin) - find_library(APEXCLOTHING_DLL - NAMES APEX_Clothing${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) - find_library(APEXDESTRUCTIBLE_DLL - NAMES APEX_Destructible${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) +# find_library(APEXCLOTHING_DLL +# NAMES APEX_Clothing APEX_Clothing${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) +# find_library(APEXDESTRUCTIBLE_DLL +# NAMES APEX_Destructible APEX_Destructible${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) find_library(APEXLEGACY_DLL - NAMES APEX_Legacy${APEX_ARCH_FILE} + NAMES APEX_Legacy APEX_Legacy${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXLOADER_DLL - NAMES APEX_Loader${APEX_ARCH_FILE} + NAMES APEX_Loader APEX_Loader${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXFRAMEWORK_DLL - NAMES APEXFramework${APEX_ARCH_FILE} + NAMES APEXFramework APEXFramework${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) - find_library(APEXCLOTHING_DLL_DEBUG - NAMES APEX_ClothingDEBUG${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) - find_library(APEXDESTRUCTIBLE_DLL_DEBUG - NAMES APEX_DestructibleDEBUG${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) +# find_library(APEXCLOTHING_DLL_DEBUG +# NAMES APEX_ClothingDEBUG APEX_ClothingDEBUG${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) +# find_library(APEXDESTRUCTIBLE_DLL_DEBUG +# NAMES APEX_DestructibleDEBUG APEX_DestructibleDEBUG${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) find_library(APEXLEGACY_DLL_DEBUG - NAMES APEX_LegacyDEBUG${APEX_ARCH_FILE} + NAMES APEX_LegacyDEBUG APEX_LegacyDEBUG${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXLOADER_DLL_DEBUG - NAMES APEX_LoaderDEBUG${APEX_ARCH_FILE} + NAMES APEX_LoaderDEBUG APEX_LoaderDEBUG${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXFRAMEWORK_DLL_DEBUG - NAMES APEXFrameworkDEBUG${APEX_ARCH_FILE} + NAMES APEXFrameworkDEBUG APEXFrameworkDEBUG${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) - find_library(APEXCLOTHING_DLL_CHECKED - NAMES APEX_ClothingCHECKED${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) - find_library(APEXDESTRUCTIBLE_DLL_CHECKED - NAMES APEX_DestructibleCHECKED${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) +# find_library(APEXCLOTHING_DLL_CHECKED +# NAMES APEX_ClothingCHECKED APEX_ClothingCHECKED${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) +# find_library(APEXDESTRUCTIBLE_DLL_CHECKED +# NAMES APEX_DestructibleCHECKED APEX_DestructibleCHECKED${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) find_library(APEXLEGACY_DLL_CHECKED - NAMES APEX_LegacyCHECKED${APEX_ARCH_FILE} + NAMES APEX_LegacyCHECKED APEX_LegacyCHECKED${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXLOADER_DLL_CHECKED - NAMES APEX_LoaderCHECKED${APEX_ARCH_FILE} + NAMES APEX_LoaderCHECKED APEX_LoaderCHECKED${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXFRAMEWORK_DLL_CHECKED - NAMES APEXFrameworkCHECKED${APEX_ARCH_FILE} + NAMES APEXFrameworkCHECKED APEXFrameworkCHECKED${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) - find_library(APEXCLOTHING_DLL_PROFILE - NAMES APEX_ClothingPROFILE${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) - find_library(APEXDESTRUCTIBLE_DLL_PROFILE - NAMES APEX_DestructiblePROFILE${APEX_ARCH_FILE} - PATHS ${DLL_PATH} - ) +# find_library(APEXCLOTHING_DLL_PROFILE +# NAMES APEX_ClothingPROFILE APEX_ClothingPROFILE${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) +# find_library(APEXDESTRUCTIBLE_DLL_PROFILE +# NAMES APEX_DestructiblePROFILE APEX_DestructiblePROFILE${APEX_ARCH_FILE} +# PATHS ${DLL_PATH} +# ) find_library(APEXLEGACY_DLL_PROFILE - NAMES APEX_LegacyPROFILE${APEX_ARCH_FILE} + NAMES APEX_LegacyPROFILE APEX_LegacyPROFILE${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXLOADER_DLL_PROFILE - NAMES APEX_LoaderPROFILE${APEX_ARCH_FILE} + NAMES APEX_LoaderPROFILE APEX_LoaderPROFILE${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) find_library(APEXFRAMEWORK_DLL_PROFILE - NAMES APEXFrameworkPROFILE${APEX_ARCH_FILE} + NAMES APEXFrameworkPROFILE APEXFrameworkPROFILE${APEX_ARCH_FILE} PATHS ${DLL_PATH} ) SET(DLL_VAR_LIST - APEXCLOTHING_DLL - APEXDESTRUCTIBLE_DLL + #APEXCLOTHING_DLL + #APEXDESTRUCTIBLE_DLL APEXLEGACY_DLL APEXLOADER_DLL APEXFRAMEWORK_DLL - APEXCLOTHING_DLL_DEBUG - APEXDESTRUCTIBLE_DLL_DEBUG + #APEXCLOTHING_DLL_DEBUG + #APEXDESTRUCTIBLE_DLL_DEBUG APEXLEGACY_DLL_DEBUG APEXLOADER_DLL_DEBUG APEXFRAMEWORK_DLL_DEBUG - APEXCLOTHING_DLL_CHECKED - APEXDESTRUCTIBLE_DLL_CHECKED + #APEXCLOTHING_DLL_CHECKED + #APEXDESTRUCTIBLE_DLL_CHECKED APEXLEGACY_DLL_CHECKED APEXLOADER_DLL_CHECKED APEXFRAMEWORK_DLL_CHECKED - APEXCLOTHING_DLL_PROFILE - APEXDESTRUCTIBLE_DLL_PROFILE + #APEXCLOTHING_DLL_PROFILE + #APEXDESTRUCTIBLE_DLL_PROFILE APEXLEGACY_DLL_PROFILE APEXLOADER_DLL_PROFILE APEXFRAMEWORK_DLL_PROFILE @@ -295,32 +296,32 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(APEXSDK DEFAULT_MSG APEXSDK_PATH - APEXCLOTHING_LIB - APEXDESTRUCTIBLE_LIB + #APEXCLOTHING_LIB + #APEXDESTRUCTIBLE_LIB APEXLEGACY_LIB APEXLOADER_LIB APEXCOMMON_LIB APEXFRAMEWORK_LIB APEXSHARED_LIB - APEXCLOTHING_LIB_DEBUG - APEXDESTRUCTIBLE_LIB_DEBUG + #APEXCLOTHING_LIB_DEBUG + #APEXDESTRUCTIBLE_LIB_DEBUG APEXLEGACY_LIB_DEBUG APEXLOADER_LIB_DEBUG APEXCOMMON_LIB_DEBUG APEXFRAMEWORK_LIB_DEBUG APEXSHARED_LIB_DEBUG - APEXCLOTHING_LIB_CHECKED - APEXDESTRUCTIBLE_LIB_CHECKED + #APEXCLOTHING_LIB_CHECKED + #APEXDESTRUCTIBLE_LIB_CHECKED APEXLEGACY_LIB_CHECKED APEXLOADER_LIB_CHECKED APEXCOMMON_LIB_CHECKED APEXFRAMEWORK_LIB_CHECKED APEXSHARED_LIB_CHECKED - APEXCLOTHING_LIB_PROFILE - APEXDESTRUCTIBLE_LIB_PROFILE + #APEXCLOTHING_LIB_PROFILE + #APEXDESTRUCTIBLE_LIB_PROFILE APEXLEGACY_LIB_PROFILE APEXLOADER_LIB_PROFILE APEXCOMMON_LIB_PROFILE @@ -347,41 +348,41 @@ if (APEXSDK_FOUND) ${APEXSDK_PATH}/shared/general/RenderDebug/public ) - SET(APEXSDK_LIBS_RELEASE ${APEXCLOTHING_LIB} ${APEXDESTRUCTIBLE_LIB} ${APEXLEGACY_LIB} ${APEXLOADER_LIB} ${APEXCOMMON_LIB} ${APEXFRAMEWORK_LIB} ${APEXSHARED_LIB} + SET(APEXSDK_LIBS_RELEASE ${APEXLEGACY_LIB} ${APEXLOADER_LIB} ${APEXCOMMON_LIB} ${APEXFRAMEWORK_LIB} ${APEXSHARED_LIB} CACHE STRING "" ) - SET(APEXSDK_LIBS_DEBUG ${APEXCLOTHING_LIB_DEBUG} ${APEXDESTRUCTIBLE_LIB_DEBUG} ${APEXLEGACY_LIB_DEBUG} ${APEXLOADER_LIB_DEBUG} ${APEXCOMMON_LIB_DEBUG} ${APEXFRAMEWORK_LIB_DEBUG} ${APEXSHARED_LIB_DEBUG} + SET(APEXSDK_LIBS_DEBUG ${APEXLEGACY_LIB_DEBUG} ${APEXLOADER_LIB_DEBUG} ${APEXCOMMON_LIB_DEBUG} ${APEXFRAMEWORK_LIB_DEBUG} ${APEXSHARED_LIB_DEBUG} CACHE STRING "" ) - SET(APEXSDK_LIBS_CHECKED ${APEXCLOTHING_LIB_CHECKED} ${APEXDESTRUCTIBLE_LIB_CHECKED} ${APEXLEGACY_LIB_CHECKED} ${APEXLOADER_LIB_CHECKED} ${APEXCOMMON_LIB_CHECKED} ${APEXFRAMEWORK_LIB_CHECKED} ${APEXSHARED_LIB_CHECKED} + SET(APEXSDK_LIBS_CHECKED ${APEXLEGACY_LIB_CHECKED} ${APEXLOADER_LIB_CHECKED} ${APEXCOMMON_LIB_CHECKED} ${APEXFRAMEWORK_LIB_CHECKED} ${APEXSHARED_LIB_CHECKED} CACHE STRING "" ) - SET(APEXSDK_LIBS_PROFILE ${APEXCLOTHING_LIB_PROFILE} ${APEXDESTRUCTIBLE_LIB_PROFILE} ${APEXLEGACY_LIB_PROFILE} ${APEXLOADER_LIB_PROFILE} ${APEXCOMMON_LIB_PROFILE} ${APEXFRAMEWORK_LIB_PROFILE} ${APEXSHARED_LIB_PROFILE} + SET(APEXSDK_LIBS_PROFILE ${APEXLEGACY_LIB_PROFILE} ${APEXLOADER_LIB_PROFILE} ${APEXCOMMON_LIB_PROFILE} ${APEXFRAMEWORK_LIB_PROFILE} ${APEXSHARED_LIB_PROFILE} CACHE STRING "" ) SET(APEXSDK_DLLS - ${APEXCLOTHING_DLL} - ${APEXDESTRUCTIBLE_DLL} + #${APEXCLOTHING_DLL} + #${APEXDESTRUCTIBLE_DLL} ${APEXLEGACY_DLL} ${APEXLOADER_DLL} ${APEXFRAMEWORK_DLL} - ${APEXCLOTHING_DLL_DEBUG} - ${APEXDESTRUCTIBLE_DLL_DEBUG} + #${APEXCLOTHING_DLL_DEBUG} + #${APEXDESTRUCTIBLE_DLL_DEBUG} ${APEXLEGACY_DLL_DEBUG} ${APEXLOADER_DLL_DEBUG} ${APEXFRAMEWORK_DLL_DEBUG} - ${APEXCLOTHING_DLL_CHECKED} - ${APEXDESTRUCTIBLE_DLL_CHECKED} + #${APEXCLOTHING_DLL_CHECKED} + #${APEXDESTRUCTIBLE_DLL_CHECKED} ${APEXLEGACY_DLL_CHECKED} ${APEXLOADER_DLL_CHECKED} ${APEXFRAMEWORK_DLL_CHECKED} - ${APEXCLOTHING_DLL_PROFILE} - ${APEXDESTRUCTIBLE_DLL_PROFILE} + #${APEXCLOTHING_DLL_PROFILE} + #${APEXDESTRUCTIBLE_DLL_PROFILE} ${APEXLEGACY_DLL_PROFILE} ${APEXLOADER_DLL_PROFILE} ${APEXFRAMEWORK_DLL_PROFILE} diff --git a/sdk/compiler/cmake/modules/FindBoostMultiprecision.cmake b/sdk/compiler/cmake/modules/FindBoostMultiprecision.cmake index 84373ab..cea6142 100644 --- a/sdk/compiler/cmake/modules/FindBoostMultiprecision.cmake +++ b/sdk/compiler/cmake/modules/FindBoostMultiprecision.cmake @@ -8,6 +8,7 @@ INCLUDE(FindPackageHandleStandardArgs) #TODO: Proper version support FIND_PATH( BOOSTMULTIPRECISION_PATH boost/multiprecision PATHS + $ENV{PM_BoostMultiprecision_PATH} ${GW_DEPS_ROOT}/BoostMultiprecision/${BoostMultiprecision_FIND_VERSION} ) diff --git a/sdk/compiler/cmake/modules/FindCapnProtoSDK.cmake b/sdk/compiler/cmake/modules/FindCapnProtoSDK.cmake index 9e2cd60..1813e87 100644 --- a/sdk/compiler/cmake/modules/FindCapnProtoSDK.cmake +++ b/sdk/compiler/cmake/modules/FindCapnProtoSDK.cmake @@ -9,7 +9,9 @@ include(FindPackageHandleStandardArgs) # TODO: Do the version stuff properly! find_path(CAPNPROTOSDK_PATH src/capnp/message.h - PATHS ${GW_DEPS_ROOT}/$ENV{PM_CapnProto_NAME}/${CapnProtoSDK_FIND_VERSION} + PATHS + $ENV{PM_CapnProto_PATH} + ${GW_DEPS_ROOT}/$ENV{PM_CapnProto_NAME}/${CapnProtoSDK_FIND_VERSION} ) if (TARGET_BUILD_PLATFORM STREQUAL "Windows") diff --git a/sdk/compiler/cmake/modules/FindFBXSDK.cmake b/sdk/compiler/cmake/modules/FindFBXSDK.cmake index 7e1bfb4..5b6b0a4 100644 --- a/sdk/compiler/cmake/modules/FindFBXSDK.cmake +++ b/sdk/compiler/cmake/modules/FindFBXSDK.cmake @@ -10,7 +10,9 @@ include(FindPackageHandleStandardArgs) # TODO: Do the version stuff properly! find_path(FBXSDK_PATH include/fbxsdk.h - PATHS ${GW_DEPS_ROOT}/FBXSDK/${FBXSDK_FIND_VERSION} + PATHS + $ENV{PM_FBXSDK_PATH} + ${GW_DEPS_ROOT}/FBXSDK/${FBXSDK_FIND_VERSION} ) if (STATIC_WINCRT) diff --git a/sdk/compiler/cmake/modules/FindGoogleTestNV.cmake b/sdk/compiler/cmake/modules/FindGoogleTestNV.cmake index 50e7edd..7f2dde4 100644 --- a/sdk/compiler/cmake/modules/FindGoogleTestNV.cmake +++ b/sdk/compiler/cmake/modules/FindGoogleTestNV.cmake @@ -8,7 +8,9 @@ include(FindPackageHandleStandardArgs) # TODO: Do the version stuff properly! find_path(GOOGLETEST_PATH include/gtest/gtest.h - PATHS ${GW_DEPS_ROOT}/$ENV{PM_googletest_NAME}/${GoogleTestNV_FIND_VERSION} + PATHS + $ENV{PM_googletest_PATH} + ${GW_DEPS_ROOT}/$ENV{PM_googletest_NAME}/${GoogleTestNV_FIND_VERSION} ) if (TARGET_BUILD_PLATFORM STREQUAL "Windows") diff --git a/sdk/compiler/cmake/modules/FindPhysXSDK.cmake b/sdk/compiler/cmake/modules/FindPhysXSDK.cmake index 4b9176f..0194edb 100644 --- a/sdk/compiler/cmake/modules/FindPhysXSDK.cmake +++ b/sdk/compiler/cmake/modules/FindPhysXSDK.cmake @@ -6,9 +6,10 @@ include(FindPackageHandleStandardArgs) MESSAGE("Looking for PhysXSDK ${PhysXSDK_FIND_VERSION} Cached path: ${PHYSXSDK_PATH}") -# TODO: Do the version stuff properly! find_path(PHYSXSDK_PATH Include/PxActor.h PATHS + $ENV{PM_PhysX_PATH} + $ENV{PM_PhysX_PATH}/PhysX_3.4 ${GW_DEPS_ROOT}/$ENV{PM_PhysX_NAME}/${PhysXSDK_FIND_VERSION} ${GW_DEPS_ROOT}/PhysX/${PhysXSDK_FIND_VERSION} ) @@ -32,26 +33,26 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") # What compiler version do we want? if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18.0.0.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0.0) - SET(VS_STR "vc12") + SET(VS_STR "VS2013") elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.0.0.0) - SET(VS_STR "vc14") + SET(VS_STR "VS2015") else() MESSAGE(FATAL_ERROR "Failed to find compatible PxSharedSDK - Only supporting VS2013 and VS2015") endif() - SET(LIB_PATH ${PHYSXSDK_PATH}/lib/${VS_STR}${PHYSX_ARCH_FOLDER}-cmake${PHYSX_CRT_SUFFIX}) + SET(LIB_PATH ${PHYSXSDK_PATH}/lib/${VS_STR}${PHYSX_ARCH_FOLDER}-cmake${PHYSX_CRT_SUFFIX} ${PHYSXSDK_PATH}/lib/${VS_STR}${PHYSX_ARCH_FOLDER} ${PHYSXSDK_PATH}/../Lib/${PHYSX_ARCH_FOLDER}/${VS_STR} ${PHYSXSDK_PATH}/../Lib) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll") elseif(TARGET_BUILD_PLATFORM STREQUAL "PS4") - SET(LIB_PATH ${PHYSXSDK_PATH}/lib/vc14ps4-cmake) + SET(LIB_PATH ${PHYSXSDK_PATH}/lib/vc14ps4-cmake ${PHYSXSDK_PATH}/../Lib) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") elseif(TARGET_BUILD_PLATFORM STREQUAL "XboxOne") - SET(LIB_PATH ${PHYSXSDK_PATH}/lib/vc14xboxone-cmake) - SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") - SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") + SET(LIB_PATH ${PHYSXSDK_PATH}/lib/vc14xboxone-cmake ${PHYSXSDK_PATH}/../lib) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib") + SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") elseif(TARGET_BUILD_PLATFORM STREQUAL "linux") - SET(LIB_PATH ${PHYSXSDK_PATH}/lib/linux64-cmake) + SET(LIB_PATH ${PHYSXSDK_PATH}/lib/linux64-cmake ${PHYSXSDK_PATH}/../Lib) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") SET(PHYSX_ARCH_FILE "_x64") @@ -60,11 +61,11 @@ endif() # Now find all of the PhysX libs in the lib directory find_library(PHYSX3_LIB - NAMES PhysX3${PHYSX_ARCH_FILE} + NAMES PhysX3 PhysX3${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3EXTENSIONS_LIB - NAMES PhysX3Extensions${PHYSX_ARCH_FILE} + NAMES PhysX3Extensions PhysX3Extensions${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3CHARACTERKINEMATIC_LIB @@ -80,130 +81,130 @@ find_library(PHYSX3COOKING_LIB PATHS ${LIB_PATH} ) find_library(LOWLEVEL_LIB - NAMES LowLevel${PHYSX_ARCH_FILE} + NAMES LowLevel LowLevel${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELAABB_LIB - NAMES LowLevelAABB${PHYSX_ARCH_FILE} + NAMES LowLevelAABB LowLevelAABB${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELCLOTH_LIB - NAMES LowLevelCloth${PHYSX_ARCH_FILE} + NAMES LowLevelCloth LowLevelCloth${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELDYNAMICS_LIB - NAMES LowLevelDynamics${PHYSX_ARCH_FILE} + NAMES LowLevelDynamics LowLevelDynamics${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELPARTICLES_LIB - NAMES LowLevelParticles${PHYSX_ARCH_FILE} + NAMES LowLevelParticles LowLevelParticles${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(SCENEQUERY_LIB - NAMES SceneQuery${PHYSX_ARCH_FILE} + NAMES SceneQuery SceneQuery${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(SIMULATIONCONTROLLER_LIB - NAMES SimulationController${PHYSX_ARCH_FILE} + NAMES SimulationController SimulationController${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3_LIB_DEBUG - NAMES PhysX3DEBUG${PHYSX_ARCH_FILE} + NAMES PhysX3DEBUG PhysX3DEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3EXTENSIONS_LIB_DEBUG - NAMES PhysX3ExtensionsDEBUG${PHYSX_ARCH_FILE} + NAMES PhysX3ExtensionsDEBUG PhysX3ExtensionsDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3CHARACTERKINEMATIC_LIB_DEBUG - NAMES PhysX3CharacterKinematicDEBUG${PHYSX_ARCH_FILE} + NAMES PhysX3CharacterKinematicDEBUG PhysX3CharacterKinematicDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3COMMON_LIB_DEBUG - NAMES PhysX3CommonDEBUG${PHYSX_ARCH_FILE} + NAMES PhysX3CommonDEBUG PhysX3CommonDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3COOKING_LIB_DEBUG - NAMES PhysX3CookingDEBUG${PHYSX_ARCH_FILE} + NAMES PhysX3CookingDEBUG PhysX3CookingDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVEL_LIB_DEBUG - NAMES LowLevelDEBUG${PHYSX_ARCH_FILE} + NAMES LowLevelDEBUG LowLevelDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELAABB_LIB_DEBUG - NAMES LowLevelAABBDEBUG${PHYSX_ARCH_FILE} + NAMES LowLevelAABBDEBUG LowLevelAABBDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELCLOTH_LIB_DEBUG - NAMES LowLevelClothDEBUG${PHYSX_ARCH_FILE} + NAMES LowLevelClothDEBUG LowLevelClothDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELDYNAMICS_LIB_DEBUG - NAMES LowLevelDynamicsDEBUG${PHYSX_ARCH_FILE} + NAMES LowLevelDynamicsDEBUG LowLevelDynamicsDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELPARTICLES_LIB_DEBUG - NAMES LowLevelParticlesDEBUG${PHYSX_ARCH_FILE} + NAMES LowLevelParticlesDEBUG LowLevelParticlesDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(SCENEQUERY_LIB_DEBUG - NAMES SceneQueryDEBUG${PHYSX_ARCH_FILE} + NAMES SceneQueryDEBUG SceneQueryDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(SIMULATIONCONTROLLER_LIB_DEBUG - NAMES SimulationControllerDEBUG${PHYSX_ARCH_FILE} + NAMES SimulationControllerDEBUG SimulationControllerDEBUG${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3_LIB_CHECKED - NAMES PhysX3CHECKED${PHYSX_ARCH_FILE} + NAMES PhysX3CHECKED PhysX3CHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3EXTENSIONS_LIB_CHECKED - NAMES PhysX3ExtensionsCHECKED${PHYSX_ARCH_FILE} + NAMES PhysX3ExtensionsCHECKED PhysX3ExtensionsCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3CHARACTERKINEMATIC_LIB_CHECKED - NAMES PhysX3CharacterKinematicCHECKED${PHYSX_ARCH_FILE} + NAMES PhysX3CharacterKinematicCHECKED PhysX3CharacterKinematicCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3COMMON_LIB_CHECKED - NAMES PhysX3CommonCHECKED${PHYSX_ARCH_FILE} + NAMES PhysX3CommonCHECKED PhysX3CommonCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PHYSX3COOKING_LIB_CHECKED - NAMES PhysX3CookingCHECKED${PHYSX_ARCH_FILE} + NAMES PhysX3CookingCHECKED PhysX3CookingCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVEL_LIB_CHECKED - NAMES LowLevelCHECKED${PHYSX_ARCH_FILE} + NAMES LowLevelCHECKED LowLevelCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELAABB_LIB_CHECKED - NAMES LowLevelAABBCHECKED${PHYSX_ARCH_FILE} + NAMES LowLevelAABBCHECKED LowLevelAABBCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELCLOTH_LIB_CHECKED - NAMES LowLevelClothCHECKED${PHYSX_ARCH_FILE} + NAMES LowLevelClothCHECKED LowLevelClothCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELDYNAMICS_LIB_CHECKED - NAMES LowLevelDynamicsCHECKED${PHYSX_ARCH_FILE} + NAMES LowLevelDynamicsCHECKED LowLevelDynamicsCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(LOWLEVELPARTICLES_LIB_CHECKED - NAMES LowLevelParticlesCHECKED${PHYSX_ARCH_FILE} + NAMES LowLevelParticlesCHECKED LowLevelParticlesCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(SCENEQUERY_LIB_CHECKED - NAMES SceneQueryCHECKED${PHYSX_ARCH_FILE} + NAMES SceneQueryCHECKED SceneQueryCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(SIMULATIONCONTROLLER_LIB_CHECKED - NAMES SimulationControllerCHECKED${PHYSX_ARCH_FILE} + NAMES SimulationControllerCHECKED SimulationControllerCHECKED${PHYSX_ARCH_FILE} PATHS ${LIB_PATH} ) @@ -268,16 +269,12 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") ) - SET(DLL_PATH ${PHYSXSDK_PATH}/bin/${VS_STR}${PHYSX_ARCH_FOLDER}-cmake${PHYSX_CRT_SUFFIX}) + SET(DLL_PATH ${PHYSXSDK_PATH}/bin/${VS_STR}${PHYSX_ARCH_FOLDER}-cmake${PHYSX_CRT_SUFFIX} ${PHYSXSDK_PATH}/bin/${VS_STR}${PHYSX_ARCH_FOLDER} ${PHYSXSDK_PATH}/../Bin/${PHYSX_ARCH_FOLDER}/${VS_STR} ${PHYSXSDK_PATH}/../Bin) find_library(PHYSX3_DLL NAMES PhysX3${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} ) - find_library(PHYSX3CHARACTERKINEMATIC_DLL - NAMES PhysX3CharacterKinematic${PHYSX_ARCH_FILE} - PATHS ${DLL_PATH} - ) find_library(PHYSX3COMMON_DLL NAMES PhysX3Common${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} @@ -296,10 +293,6 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") NAMES PhysX3DEBUG${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} ) - find_library(PHYSX3CHARACTERKINEMATIC_DLL_DEBUG - NAMES PhysX3CharacterKinematicDEBUG${PHYSX_ARCH_FILE} - PATHS ${DLL_PATH} - ) find_library(PHYSX3COMMON_DLL_DEBUG NAMES PhysX3CommonDEBUG${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} @@ -318,10 +311,6 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") NAMES PhysX3PROFILE${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} ) - find_library(PHYSX3CHARACTERKINEMATIC_DLL_PROFILE - NAMES PhysX3CharacterKinematicPROFILE${PHYSX_ARCH_FILE} - PATHS ${DLL_PATH} - ) find_library(PHYSX3COMMON_DLL_PROFILE NAMES PhysX3CommonPROFILE${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} @@ -340,10 +329,6 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") NAMES PhysX3CHECKED${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} ) - find_library(PHYSX3CHARACTERKINEMATIC_DLL_CHECKED - NAMES PhysX3CharacterKinematicCHECKED${PHYSX_ARCH_FILE} - PATHS ${DLL_PATH} - ) find_library(PHYSX3COMMON_DLL_CHECKED NAMES PhysX3CommonCHECKED${PHYSX_ARCH_FILE} PATHS ${DLL_PATH} @@ -361,30 +346,26 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") # Create this list to check for found dlls below SET(DLL_VAR_LIST PHYSX3_DLL - PHYSX3CHARACTERKINEMATIC_DLL - PHYSX3COMMON_DLL + PHYSX3COMMON_DLL PHYSX3COOKING_DLL PHYSX3_DLL_DEBUG - PHYSX3CHARACTERKINEMATIC_DLL_DEBUG - PHYSX3COMMON_DLL_DEBUG + PHYSX3COMMON_DLL_DEBUG PHYSX3COOKING_DLL_DEBUG PHYSX3_DLL_PROFILE - PHYSX3CHARACTERKINEMATIC_DLL_PROFILE - PHYSX3COMMON_DLL_PROFILE + PHYSX3COMMON_DLL_PROFILE PHYSX3COOKING_DLL_PROFILE PHYSX3_DLL_CHECKED - PHYSX3CHARACTERKINEMATIC_DLL_CHECKED - PHYSX3COMMON_DLL_CHECKED + PHYSX3COMMON_DLL_CHECKED PHYSX3COOKING_DLL_CHECKED ) endif() if (TARGET_BUILD_PLATFORM STREQUAL "linux") - SET(BIN_PATH ${PHYSXSDK_PATH}/bin/linux64-cmake) + SET(BIN_PATH ${PHYSXSDK_PATH}/bin/linux64-cmake ${PHYSXSDK_PATH}/../Bin) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so") find_library(PHYSX3_LIB diff --git a/sdk/compiler/cmake/modules/FindPxSharedSDK.cmake b/sdk/compiler/cmake/modules/FindPxSharedSDK.cmake index 0f67f5c..ff18af3 100644 --- a/sdk/compiler/cmake/modules/FindPxSharedSDK.cmake +++ b/sdk/compiler/cmake/modules/FindPxSharedSDK.cmake @@ -7,9 +7,11 @@ include(FindPackageHandleStandardArgs) # Find the includes -# TODO: Do the version stuff properly! +# Always try explicit PATH variable first find_path(PXSHAREDSDK_PATH include/foundation/Px.h PATHS + $ENV{PM_PxShared_PATH} + $ENV{PM_PhysX_PATH}/PxShared # multipack ${GW_DEPS_ROOT}/$ENV{PM_PxShared_NAME}/${PxSharedSDK_FIND_VERSION} ${GW_DEPS_ROOT}/PxShared/${PxSharedSDK_FIND_VERSION} ) @@ -33,37 +35,37 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") # What compiler version do we want? if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18.0.0.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0.0) - SET(VS_STR "vc12") + SET(VS_STR "VS2013") elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.0.0.0) - SET(VS_STR "vc14") + SET(VS_STR "VS2015") else() MESSAGE(FATAL_ERROR "Failed to find compatible PxSharedSDK - Only supporting VS2013 and VS2015") endif() - SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/${VS_STR}${PXSHARED_ARCH_FOLDER}-cmake${PXSHARED_CRT_SUFFIX}) + SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/${VS_STR}${PXSHARED_ARCH_FOLDER}-cmake${PXSHARED_CRT_SUFFIX} ${PXSHAREDSDK_PATH}/lib/${VS_STR}${PXSHARED_ARCH_FOLDER} ${PXSHAREDSDK_PATH}/../lib/${PXSHARED_ARCH_FOLDER}/${VS_STR} ${PXSHAREDSDK_PATH}/../lib) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll") elseif(TARGET_BUILD_PLATFORM STREQUAL "PS4") - SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/vc14ps4-cmake) + SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/vc14ps4-cmake ${PXSHAREDSDK_PATH}/../lib) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") elseif(TARGET_BUILD_PLATFORM STREQUAL "XboxOne") - SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/vc14xboxone-cmake) - SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") - SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") + SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/vc14xboxone-cmake ${PXSHAREDSDK_PATH}/../Lib) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib") + SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") elseif(TARGET_BUILD_PLATFORM STREQUAL "linux") - SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/linux64-cmake) + SET(LIB_PATH ${PXSHAREDSDK_PATH}/lib/linux64-cmake ${PXSHAREDSDK_PATH}/../Lib) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") SET(PXSHARED_ARCH_FILE "_x64") endif() -# Now find all of the PhysX libs in the lib directory +# Now find all of the PxShared libs in the lib directory find_library(PSFASTXML_LIB - NAMES PsFastXml${PXSHARED_ARCH_FILE} + NAMES PsFastXml PsFastXml${PXSHARED_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PXFOUNDATION_LIB @@ -75,12 +77,12 @@ find_library(PXPVDSDK_LIB PATHS ${LIB_PATH} ) find_library(PXTASK_LIB - NAMES PxTask${PXSHARED_ARCH_FILE} + NAMES PxTask PxTask${PXSHARED_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PSFASTXML_LIB_DEBUG - NAMES PsFastXmlDEBUG${PXSHARED_ARCH_FILE} + NAMES PsFastXmlDEBUG PsFastXmlDEBUG${PXSHARED_ARCH_FILE} PATHS ${LIB_PATH} ) find_library(PXFOUNDATION_LIB_DEBUG @@ -92,7 +94,7 @@ find_library(PXPVDSDK_LIB_DEBUG PATHS ${LIB_PATH} ) find_library(PXTASK_LIB_DEBUG - NAMES PxTaskDEBUG${PXSHARED_ARCH_FILE} + NAMES PxTaskDEBUG PxTaskDEBUG${PXSHARED_ARCH_FILE} PATHS ${LIB_PATH} ) @@ -131,7 +133,7 @@ find_library(PXTASK_LIB_PROFILE ) if (TARGET_BUILD_PLATFORM STREQUAL "Windows") - SET(DLL_PATH ${PXSHAREDSDK_PATH}/bin/${VS_STR}${PXSHARED_ARCH_FOLDER}-cmake${PXSHARED_CRT_SUFFIX}) + SET(DLL_PATH ${PXSHAREDSDK_PATH}/bin/${VS_STR}${PXSHARED_ARCH_FOLDER}-cmake${PXSHARED_CRT_SUFFIX} ${PXSHAREDSDK_PATH}/bin/${VS_STR}${PXSHARED_ARCH_FOLDER} ${PXSHAREDSDK_PATH}/../bin/${PXSHARED_ARCH_FOLDER}/${VS_STR} ${PXSHAREDSDK_PATH}/../bin) find_library(PXFOUNDATION_DLL NAMES PxFoundation${PXSHARED_ARCH_FILE} @@ -187,7 +189,7 @@ if (TARGET_BUILD_PLATFORM STREQUAL "Windows") endif() if (TARGET_BUILD_PLATFORM STREQUAL "linux") - SET(BIN_PATH ${PXSHAREDSDK_PATH}/bin/linux64-cmake) + SET(BIN_PATH ${PXSHAREDSDK_PATH}/bin/linux64-cmake ${PXSHAREDSDK_PATH}/../Bin) SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so") find_library(PXFOUNDATION_LIB diff --git a/sdk/extensions/authoring/include/NvBlastExtAuthoring.h b/sdk/extensions/authoring/include/NvBlastExtAuthoring.h index dd49677..d3ca85c 100644 --- a/sdk/extensions/authoring/include/NvBlastExtAuthoring.h +++ b/sdk/extensions/authoring/include/NvBlastExtAuthoring.h @@ -43,6 +43,7 @@ namespace Nv { class Mesh; class VoronoiSitesGenerator; + class CutoutSet; class FractureTool; class ConvexMeshBuilder; class BlastBondGenerator; @@ -70,6 +71,22 @@ User should call release() after usage. NVBLAST_API Nv::Blast::Mesh* NvBlastExtAuthoringCreateMesh(const physx::PxVec3* positions, const physx::PxVec3* normals, const physx::PxVec2* uv, uint32_t verticesCount, const uint32_t* indices, uint32_t indicesCount); +/** +Constructs mesh object from array of vertices, edges and facets. +User should call release() after usage. + +\param[in] vertices Array for Nv::Blast::Vertex +\param[in] edges Array for Nv::Blast::Edge +\param[in] facets Array for Nv::Blast::Facet +\param[in] verticesCount Number of vertices in mesh +\param[in] edgesCount Number of edges in mesh +\param[in] facetsCount Number of facets in mesh + +\return pointer to Nv::Blast::Mesh if it was created succefully otherwise return nullptr +*/ +NVBLAST_API Nv::Blast::Mesh* NvBlastExtAuthoringCreateMeshFromFacets(const void* vertices, const void* edges, const void* facets, + uint32_t verticesCount, uint32_t edgesCount, uint32_t facetsCount); + /** Voronoi sites should not be generated outside of the fractured mesh, so VoronoiSitesGenerator should be supplied with fracture mesh. @@ -80,6 +97,27 @@ should be supplied with fracture mesh. NVBLAST_API Nv::Blast::VoronoiSitesGenerator* NvBlastExtAuthoringCreateVoronoiSitesGenerator(Nv::Blast::Mesh* mesh, Nv::Blast::RandomGeneratorBase* rng); +/** Instantiates a blank CutoutSet */ +NVBLAST_API Nv::Blast::CutoutSet* NvBlastExtAuthoringCreateCutoutSet(); + +/** +Builds a cutout set (which must have been initially created by createCutoutSet()). +Uses a bitmap described by pixelBuffer, bufferWidth, and bufferHeight. Each pixel is represented +by one byte in the buffer. + +\param cutoutSet the CutoutSet to build +\param pixelBuffer pointer to be beginning of the pixel buffer +\param bufferWidth the width of the buffer in pixels +\param bufferHeight the height of the buffer in pixels +\param segmentationErrorThreshold Reduce the number of vertices on curve untill segmentation error is smaller then specified. By default set it to 0.001. +\param snapThreshold the pixel distance at which neighboring cutout vertices and segments may be fudged into alignment. By default set it to 1. +\param periodic whether or not to use periodic boundary conditions when creating cutouts from the map +\param expandGaps expand cutout regions to gaps or keep it as is + +*/ +NVBLAST_API void NvBlastExtAuthoringBuildCutoutSet(Nv::Blast::CutoutSet& cutoutSet, const uint8_t* pixelBuffer, + uint32_t bufferWidth, uint32_t bufferHeight, float segmentationErrorThreshold, float snapThreshold, bool periodic, bool expandGaps); + /** Create FractureTool object. \return Pointer to create FractureTool. User's code should release it after usage. @@ -145,6 +183,16 @@ Performs pending fractures and generates fractured asset, render and collision g NVBLAST_API Nv::Blast::AuthoringResult* NvBlastExtAuthoringProcessFracture(Nv::Blast::FractureTool& fTool, Nv::Blast::BlastBondGenerator& bondGenerator, Nv::Blast::ConvexMeshBuilder& collisionBuilder, const Nv::Blast::CollisionParams& collisionParam, int32_t defaultSupportDepth = -1); +/** +Updates graphics mesh only + +\param[in] fTool Fracture tool created by NvBlastExtAuthoringCreateFractureTool +\param[out] ares AuthoringResult object which contains chunks, for which rendermeshes will be updated (e.g. to tweak UVs). +*/ +NVBLAST_API void NvBlastExtUpdateGraphicsMesh(Nv::Blast::FractureTool& fTool, Nv::Blast::AuthoringResult& ares); + + + /** Creates MeshCleaner object @@ -173,7 +221,7 @@ descriptor arrays returned. The user must free this memory after use with NVBLAS \param[in] chunkHulls For each component, an array of CollisionHull* specifying the collision geometry for the chunks in that component. \param[in] componentCount The size of the components and relativeTransforms arrays. \param[out] newBondDescs Descriptors of type NvBlastExtAssetUtilsBondDesc for new bonds between components. - +\param[in] maxSeparation Maximal distance between chunks which can be connected by bond. \return the number of bonds in newBondDescs */ NVBLAST_API uint32_t NvBlastExtAuthoringFindAssetConnectingBonds @@ -185,7 +233,8 @@ NVBLAST_API uint32_t NvBlastExtAuthoringFindAssetConnectingBonds const uint32_t** convexHullOffsets, const Nv::Blast::CollisionHull*** chunkHulls, uint32_t componentCount, - NvBlastExtAssetUtilsBondDesc*& newBondDescs + NvBlastExtAssetUtilsBondDesc*& newBondDescs, + float maxSeparation = 0.0f ); #endif // ifndef NVBLASTAUTHORING_H diff --git a/sdk/extensions/authoring/include/NvBlastExtAuthoringBondGenerator.h b/sdk/extensions/authoring/include/NvBlastExtAuthoringBondGenerator.h index 0151ed9..bd25098 100644 --- a/sdk/extensions/authoring/include/NvBlastExtAuthoringBondGenerator.h +++ b/sdk/extensions/authoring/include/NvBlastExtAuthoringBondGenerator.h @@ -56,10 +56,12 @@ struct PlaneChunkIndexer; Bond interface generation configuration EXACT - common surface will be searched AVERAGE - Inerface is approximated by projections or intersecitons with midplane + maxSeparation - for AVERAGE mode. Maximum distance between chunks and midplane used in decision whether create bond or chunks are too far from each other. */ struct BondGenerationConfig { enum BondGenMode { EXACT, AVERAGE }; + float maxSeparation; BondGenMode bondMode; }; @@ -164,7 +166,7 @@ public: \return Number of created bonds */ virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* convexHullOffset, const CollisionHull** chunkHulls, - const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs) = 0; + const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, float maxSeparation) = 0; }; } // namespace Blast diff --git a/sdk/extensions/authoring/include/NvBlastExtAuthoringCutout.h b/sdk/extensions/authoring/include/NvBlastExtAuthoringCutout.h new file mode 100644 index 0000000..7a26393 --- /dev/null +++ b/sdk/extensions/authoring/include/NvBlastExtAuthoringCutout.h @@ -0,0 +1,106 @@ +// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, +// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Information and code furnished is believed to be accurate and reliable. +// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such +// information or for any infringement of patents or other rights of third parties that may +// result from its use. No license is granted by implication or otherwise under any patent +// or patent rights of NVIDIA Corporation. Details are subject to change without notice. +// This code supersedes and replaces all information previously supplied. +// NVIDIA Corporation products are not authorized for use as critical +// components in life support devices or systems without express written approval of +// NVIDIA Corporation. +// +// Copyright (c) 2016-2017 NVIDIA Corporation. All rights reserved. + +#ifndef NVBLASTAUTHORINGCUTOUT_H +#define NVBLASTAUTHORINGCUTOUT_H + +#include "NvBlastExtAuthoringTypes.h" + + +namespace Nv +{ +namespace Blast +{ + +/** +Interface to a "cutout set," used with chippable fracturing. A cutout set is created from a bitmap. The +result is turned into cutouts which are applied to the mesh. For example, a bitmap which looks like a brick +pattern will generate a cutout for each "brick," forming the cutout set. + +Each cutout is a 2D entity, meant to be projected onto various faces of a mesh. They are represented +by a set of 2D vertices, which form closed loops. More than one loop may represent a single cutout, if +the loops are forced to be convex. Otherwise, a cutout is represented by a single loop. +*/ +class CutoutSet +{ +public: + /** Returns the number of cutouts in the set. */ + virtual uint32_t getCutoutCount() const = 0; + + /** + Applies to the cutout indexed by cutoutIndex: + Returns the number of vertices in the cutout. + */ + virtual uint32_t getCutoutVertexCount(uint32_t cutoutIndex) const = 0; + + /** + Applies to the cutout indexed by cutoutIndex: + Returns the number of loops in this cutout. + */ + virtual uint32_t getCutoutLoopCount(uint32_t cutoutIndex) const = 0; + + /** + Applies to the cutout indexed by cutoutIndex: + Returns the vertex indexed by vertexIndex. (Only the X and Y coordinates are used.) + */ + virtual const physx::PxVec3& getCutoutVertex(uint32_t cutoutIndex, uint32_t vertexIndex) const = 0; + + /** + Applies to the cutout indexed by cutoutIndex: + Returns the number of vertices in the loop indexed by loopIndex. + */ + virtual uint32_t getCutoutLoopSize(uint32_t coutoutIndex, uint32_t loopIndex) const = 0; + + /** + Applies to the cutout indexed by cutoutIndex: + Returns the vertex index of the vertex indexed by vertexNum, in the loop + indexed by loopIndex. + */ + virtual uint32_t getCutoutLoopVertexIndex(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const = 0; + + /** + Applies to the cutout indexed by cutoutIndex: + Returns the flags of the vertex indexed by vertexNum, in the loop + indexed by loopIndex. + */ + virtual uint32_t getCutoutLoopVertexFlags(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const = 0; + + /** + Whether or not this cutout set is to be tiled. + */ + virtual bool isPeriodic() const = 0; + + /** + The dimensions of the fracture map used to create the cutout set. + */ + virtual const physx::PxVec2& getDimensions() const = 0; + + /** Serialization */ + //virtual void serialize(physx::PxFileBuf& stream) const = 0; + //virtual void deserialize(physx::PxFileBuf& stream) = 0; + + /** Releases all memory and deletes itself. */ + virtual void release() = 0; + +protected: + /** Protected destructor. Use the release() method. */ + virtual ~CutoutSet() {} +}; + +} // namespace Blast +} // namespace Nv + + +#endif // idndef NVBLASTAUTHORINGCUTOUT_H diff --git a/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h b/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h index 2c8eef4..e926005 100644 --- a/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h +++ b/sdk/extensions/authoring/include/NvBlastExtAuthoringFractureTool.h @@ -39,6 +39,7 @@ namespace Blast class SpatialAccelerator; class Triangulator; class Mesh; +class CutoutSet; /* Chunk data, chunk with chunkId == 0 is always source mesh. @@ -49,53 +50,97 @@ struct ChunkInfo int32_t parent; int32_t chunkId; bool isLeaf; + bool isChanged; }; +/* + Noise fracturing configuration for chunks's faces +*/ +struct NoiseConfiguration +{ + /** + Noisy slicing configutaion: + + Amplitude of cutting surface noise. If it is 0 - noise is disabled. + */ + float amplitude = 0.f; + + /** + Frequencey of cutting surface noise. + */ + float frequency = 1.f; + + /** + Octave number in slicing surface noise. + */ + uint32_t octaveNumber = 1; + + /** + Cutting surface resolution. + */ + uint32_t surfaceResolution = 1; +}; /* Slicing fracturing configuration */ struct SlicingConfiguration { - /** + /** Number of slices in each direction */ int32_t x_slices = 1, y_slices = 1, z_slices = 1; - - /** + + /** Offset variation, value in [0, 1] */ float offset_variations = 0.f; - - /** + + /** Angle variation, value in [0, 1] */ float angle_variations = 0.f; + /* + Noise parameters for faces between sliced chunks + */ + NoiseConfiguration noise; +}; + +/** + Cutout fracturing configuration +*/ +struct CutoutConfiguration +{ /** - Noisy slicing configutaion: + Set of grouped convex loop patterns for cutout in normal direction. + Not required for PLANE_ONLY mode + */ + CutoutSet* cutoutSet = nullptr; - Amplitude of cutting surface noise. If it is 0 - noise is disabled. + /** + Transform for initial pattern position and orientation. + By default 2d pattern lies in XY plane (Y is up) the center of pattern is (0, 0) */ - float noiseAmplitude = 0.f; - + physx::PxTransform transform = physx::PxTransform(physx::PxIdentity); + /** - Frequencey of cutting surface noise. + Scale for pattern. Unscaled pattern has size (1, 1). + For negative scale pattern will be placed at the center of chunk and scaled with max distance between points of its AABB */ - float noiseFrequency = 1.f; + physx::PxVec2 scale = physx::PxVec2(-1, -1); /** - Octave number in slicing surface noise. + If relative transform is set - position will be displacement vector from chunk's center. Otherwise from global origin. */ - uint32_t noiseOctaveNumber = 1; + bool isRelativeTransform = true; /** - Cutting surface resolution. + Noise parameters for cutout surface, see NoiseConfiguration. */ - uint32_t surfaceResolution = 1; + NoiseConfiguration noise; }; - /** Class for voronoi sites generation inside supplied mesh. */ @@ -159,11 +204,13 @@ public: \param[in] center Center of sphere */ virtual void generateInSphere(const uint32_t count, const float radius, const physx::PxVec3& center) = 0; + /** Set stencil mesh. With stencil mesh sites are generated only inside both of fracture and stencil meshes. \param[in] stencil Stencil mesh. */ virtual void setStencil(const Mesh* stencil) = 0; + /** Removes stencil mesh */ @@ -269,7 +316,33 @@ public: \return If 0, fracturing is successful. */ - virtual int32_t slicing(uint32_t chunkId, SlicingConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) = 0; + virtual int32_t slicing(uint32_t chunkId, const SlicingConfiguration& conf, bool replaceChunk, RandomGeneratorBase* rnd) = 0; + + /** + Cut chunk with plane. + \param[in] chunkId Chunk to fracture + \param[in] normal Plane normal + \param[in] position Point on plane + \param[in] noise Noise configuration for plane-chunk intersection, see NoiseConfiguration. + \param[in] replaceChunk if 'true', newly generated chunks will replace source chunk, if 'false', newly generated chunks will be at next depth level, source chunk will be parent for them. + Case replaceChunk == true && chunkId == 0 considered as wrong input parameters + \param[in] rnd User supplied random number generator + + \return If 0, fracturing is successful. + */ + virtual int32_t cut(uint32_t chunkId, const physx::PxVec3& normal, const physx::PxVec3& position, const NoiseConfiguration& noise, bool replaceChunk, RandomGeneratorBase* rnd) = 0; + + /** + Cutout fracture for specified chunk. + \param[in] chunkId Chunk to fracture + \param[in] conf Cutout parameters, see CutoutConfiguration. + \param[in] replaceChunk if 'true', newly generated chunks will replace source chunk, if 'false', newly generated chunks will be at next depth level, source chunk will be parent for them. + Case replaceChunk == true && chunkId == 0 considered as wrong input parameters + \param[in] rnd User supplied random number generator + + \return If 0, fracturing is successful. + */ + virtual int32_t cutout(uint32_t chunkId, CutoutConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) = 0; /** @@ -277,6 +350,9 @@ public: */ virtual void finalizeFracturing() = 0; + /** + Returns overall number of chunks in fracture. + */ virtual uint32_t getChunkCount() const = 0; /** @@ -301,6 +377,15 @@ public: */ virtual uint32_t getBaseMesh(int32_t chunkIndex, Triangle*& output) = 0; + /** + Update chunk base mesh + \note Doesn't allocates output array, Triangle* output should be preallocated by user + \param[in] chunkIndex Chunk index + \param[out] output Array of triangles to be filled + \return number of triangles in base mesh + */ + virtual uint32_t updateBaseMesh(int32_t chunkIndex, Triangle* output) = 0; + /** Return index of chunk with specified chunkId \param[in] chunkId Chunk ID @@ -330,7 +415,6 @@ public: */ virtual uint32_t getChunksIdAtDepth(uint32_t depth, int32_t*& chunkIds) = 0; - /** Get result geometry without noise as vertex and index buffers, where index buffers contain series of triplets which represent triangles. @@ -368,7 +452,28 @@ public: */ virtual bool deleteAllChildrenOfChunk(int32_t chunkId) = 0; + /** + Optimize chunk hierarhy for better runtime performance. + It tries to unite chunks to groups of some size in order to transform flat hierarchy (all chunks are children of single root) + to tree like hieracrhy with limited number of children for each chunk. + \param[in] maxAtLevel If number of children of some chunk less then maxAtLevel then it would be considered as already optimized and skipped. + \param[in] maxGroupSize Max number of children for processed chunks. + */ virtual void uniteChunks(uint32_t maxAtLevel, uint32_t maxGroupSize) = 0; + + /** + Rescale interior uv coordinates of given chunk to fit square of given size. + \param[in] side Size of square side + \param[in] chunkId Chunk ID for which UVs should be scaled. + */ + virtual void fitUvToRect(float side, uint32_t chunkId) = 0; + + /** + Rescale interior uv coordinates of all existing chunks to fit square of given size, relative sizes will be preserved. + \param[in] side Size of square side + */ + virtual void fitAllUvToRect(float side) = 0; + }; } // namespace Blast diff --git a/sdk/extensions/authoring/include/NvBlastExtAuthoringTypes.h b/sdk/extensions/authoring/include/NvBlastExtAuthoringTypes.h index 512beca..b81ed25 100644 --- a/sdk/extensions/authoring/include/NvBlastExtAuthoringTypes.h +++ b/sdk/extensions/authoring/include/NvBlastExtAuthoringTypes.h @@ -90,6 +90,14 @@ struct Triangle { return ((b.p - a.p).cross(c.p - a.p)); } + inline Vertex& getVertex(uint32_t index) + { + return (&a)[index]; + } + inline const Vertex& getVertex(uint32_t index) const + { + return (&a)[index]; + } }; diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoring.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoring.cpp index b024bb7..13654e2 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoring.cpp +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoring.cpp @@ -14,6 +14,7 @@ #include "NvBlastExtAuthoringFractureToolImpl.h" #include "NvBlastExtAuthoringCollisionBuilderImpl.h" #include "NvBlastExtAuthoringBondGeneratorImpl.h" +#include "NvBlastExtAuthoringCutoutImpl.h" #include "NvBlastTypes.h" #include "NvBlastIndexFns.h" #include "NvBlast.h" @@ -35,6 +36,11 @@ Mesh* NvBlastExtAuthoringCreateMesh(const PxVec3* position, const PxVec3* normal return new MeshImpl(position, normals, uv, verticesCount, indices, indicesCount); } +Mesh* NvBlastExtAuthoringCreateMeshFromFacets(const void* vertices, const void* edges, const void* facets, uint32_t verticesCount, uint32_t edgesCount, uint32_t facetsCount) +{ + return new MeshImpl((Vertex*)vertices, (Edge*)edges, (Facet*)facets, verticesCount, edgesCount, facetsCount); +} + MeshCleaner* NvBlastExtAuthoringCreateMeshCleaner() { return new MeshCleanerImpl; @@ -45,6 +51,17 @@ VoronoiSitesGenerator* NvBlastExtAuthoringCreateVoronoiSitesGenerator(Mesh* mesh return new VoronoiSitesGeneratorImpl(mesh, rng); } +CutoutSet* NvBlastExtAuthoringCreateCutoutSet() +{ + return new CutoutSetImpl(); +} + +void NvBlastExtAuthoringBuildCutoutSet(CutoutSet& cutoutSet, const uint8_t* pixelBuffer, uint32_t bufferWidth, uint32_t bufferHeight, + float segmentationErrorThreshold, float snapThreshold, bool periodic, bool expandGaps) +{ + ::createCutoutSet(*(CutoutSetImpl*)&cutoutSet, pixelBuffer, bufferWidth, bufferHeight, segmentationErrorThreshold, snapThreshold, periodic, expandGaps); +} + FractureTool* NvBlastExtAuthoringCreateFractureTool() { return new FractureToolImpl; @@ -297,6 +314,8 @@ AuthoringResult* NvBlastExtAuthoringProcessFracture(FractureTool& fTool, BlastBo { uint32_t trianglesCount = aResult.geometryOffset[i + 1] - aResult.geometryOffset[i]; memcpy(aResult.geometry + aResult.geometryOffset[i], chunkGeometry[i], trianglesCount * sizeof(Nv::Blast::Triangle)); + delete chunkGeometry[i]; + chunkGeometry[i] = nullptr; } float maxX = INT32_MIN; @@ -376,7 +395,8 @@ uint32_t NvBlastExtAuthoringFindAssetConnectingBonds const uint32_t** convexHullOffsets, const CollisionHull*** chunkHulls, uint32_t componentCount, - NvBlastExtAssetUtilsBondDesc*& newBondDescs + NvBlastExtAssetUtilsBondDesc*& newBondDescs, + float maxSeparation ) { //We don't need to use any of the cooking related parts of this @@ -441,7 +461,7 @@ uint32_t NvBlastExtAuthoringFindAssetConnectingBonds //Find the bonds NvBlastBondDesc* newBonds = nullptr; - const int32_t newBoundCount = bondGenerator.bondsFromPrefractured(totalChunkCount, combinedConvexHullOffsets.data(), combinedConvexHulls.data(), isSupportChunk.get(), originalComponentIndex.data(), newBonds); + const int32_t newBoundCount = bondGenerator.bondsFromPrefractured(totalChunkCount, combinedConvexHullOffsets.data(), combinedConvexHulls.data(), isSupportChunk.get(), originalComponentIndex.data(), newBonds, maxSeparation); //Convert the bonds back to per-component chunks newBondDescs = SAFE_ARRAY_NEW(NvBlastExtAssetUtilsBondDesc, newBoundCount); @@ -466,3 +486,13 @@ uint32_t NvBlastExtAuthoringFindAssetConnectingBonds return newBoundCount; } + + +void NvBlastExtUpdateGraphicsMesh(Nv::Blast::FractureTool& fTool, Nv::Blast::AuthoringResult& aResult) +{ + uint32_t chunkCount = fTool.getChunkCount(); + for (uint32_t i = 0; i < chunkCount; ++i) + { + fTool.updateBaseMesh(i, aResult.geometry + aResult.geometryOffset[i]); + } +} \ No newline at end of file diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.cpp index 02e7a30..95d2f1a 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.cpp +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.cpp @@ -149,7 +149,7 @@ namespace Nv }; float BlastBondGeneratorImpl::processWithMidplanes(TriangleProcessor* trProcessor, const std::vector& chunk1Points, const std::vector& chunk2Points, - const std::vector& hull1p, const std::vector& hull2p, PxVec3& normal, PxVec3& centroid) + const std::vector& hull1p, const std::vector& hull2p, PxVec3& normal, PxVec3& centroid, float maxSeparation) { PxBounds3 bounds; PxBounds3 aBounds; @@ -185,7 +185,7 @@ namespace Nv chunk2Centroid *= (1.0f / chunk2Points.size()); Separation separation; - if (!importerHullsInProximityApexFree(hull1p.size(), hull1p.data(), aBounds, PxTransform(PxIdentity), PxVec3(1, 1, 1), hull2p.size(), hull2p.data(), bBounds, PxTransform(PxIdentity), PxVec3(1, 1, 1), 0.000, &separation)) + if (!importerHullsInProximityApexFree(hull1p.size(), hull1p.data(), aBounds, PxTransform(PxIdentity), PxVec3(1, 1, 1), hull2p.size(), hull2p.data(), bBounds, PxTransform(PxIdentity), PxVec3(1, 1, 1), 2.0f * maxSeparation, &separation)) { return 0.0; } @@ -198,13 +198,13 @@ namespace Nv } std::vector interfacePoints; - float firstCentroidSide = midplane.distance(chunk1Centroid); - float secondCentroidSide = midplane.distance(chunk2Centroid); + float firstCentroidSide = (midplane.distance(chunk1Centroid) > 0) ? 1 : -1; + float secondCentroidSide = (midplane.distance(chunk2Centroid) > 0) ? 1 : -1; for (uint32_t i = 0; i < chunk1Points.size(); ++i) { float dst = midplane.distance(chunk1Points[i]); - if (dst * firstCentroidSide < 0) + if (dst * firstCentroidSide < maxSeparation) { interfacePoints.push_back(chunk1Points[i]); } @@ -213,7 +213,7 @@ namespace Nv for (uint32_t i = 0; i < chunk2Points.size(); ++i) { float dst = midplane.distance(chunk2Points[i]); - if (dst * secondCentroidSide < 0) + if (dst * secondCentroidSide < maxSeparation) { interfacePoints.push_back(chunk2Points[i]); } @@ -272,8 +272,7 @@ namespace Nv int32_t BlastBondGeneratorImpl::createFullBondListAveraged(uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry, const CollisionHull** chunkHulls, const bool* supportFlags, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, BondGenerationConfig conf) - { - NV_UNUSED(conf); + { std::vector > chunksPoints(meshCount); if (!chunkHulls) @@ -344,9 +343,14 @@ namespace Nv { tempHullPtr->release(); } - bnd.scaleFast(1.1f); - candidates.push_back(BondGenerationCandidate(bnd.minimum, false, chunk, meshGroups[chunk])); - candidates.push_back(BondGenerationCandidate(bnd.maximum, true, chunk, meshGroups[chunk])); + float minSide = bnd.getDimensions().abs().minElement(); + if (minSide > 0.f) + { + float scaling = std::max(1.1f, conf.maxSeparation / (minSide)); + bnd.scaleFast(scaling); + } + candidates.push_back(BondGenerationCandidate(bnd.minimum, false, chunk, meshGroups != nullptr ? meshGroups[chunk] : 0)); + candidates.push_back(BondGenerationCandidate(bnd.maximum, true, chunk, meshGroups != nullptr ? meshGroups[chunk] : 0)); } std::sort(candidates.begin(), candidates.end()); @@ -360,7 +364,7 @@ namespace Nv { for (uint32_t activeChunk : listOfActiveChunks) { - if (candidates[activeChunk].parentComponent == candidates[idx].parentComponent) continue; // Don't connect components with itself. + if (meshGroups != nullptr && (meshGroups[activeChunk] == candidates[idx].parentComponent)) continue; // Don't connect components with itself. possibleBondGraph[activeChunk].push_back(candidates[idx].parentChunk); } listOfActiveChunks.insert(candidates[idx].parentChunk); @@ -388,7 +392,7 @@ namespace Nv PxVec3 normal; PxVec3 centroid; - float area = processWithMidplanes(&trProcessor, chunksPoints[i].empty() ? hullPoints[i][ihull] : chunksPoints[i], chunksPoints[j].empty() ? hullPoints[j][jhull] : chunksPoints[j], hullPoints[i][ihull], hullPoints[j][jhull], normal, centroid); + float area = processWithMidplanes(&trProcessor, chunksPoints[i].empty() ? hullPoints[i][ihull] : chunksPoints[i], chunksPoints[j].empty() ? hullPoints[j][jhull] : chunksPoints[j], hullPoints[i][ihull], hullPoints[j][jhull], normal, centroid, conf.maxSeparation); if (area > 0) { NvBlastBondDesc bDesc; @@ -1118,9 +1122,10 @@ namespace Nv } - int32_t BlastBondGeneratorImpl::bondsFromPrefractured(uint32_t meshCount, const uint32_t* convexHullOffset, const CollisionHull** chunkHulls, const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs) + int32_t BlastBondGeneratorImpl::bondsFromPrefractured(uint32_t meshCount, const uint32_t* convexHullOffset, const CollisionHull** chunkHulls, const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, float maxSeparation) { BondGenerationConfig conf; + conf.maxSeparation = maxSeparation; conf.bondMode = BondGenerationConfig::AVERAGE; return createFullBondListAveraged(meshCount, convexHullOffset, nullptr, chunkHulls, chunkIsSupport, meshGroups, resultBondDescs, conf); } diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.h b/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.h index a33468d..8337cf2 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.h +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringBondGeneratorImpl.h @@ -69,13 +69,13 @@ public: BondGenerationConfig conf = BondGenerationConfig()) override; virtual int32_t bondsFromPrefractured(uint32_t meshCount, const uint32_t* convexHullOffset, const CollisionHull** chunkHulls, - const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs) override; + const bool* chunkIsSupport, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, float maxSeparation) override; private: float processWithMidplanes( TriangleProcessor* trProcessor, const std::vector& chunk1Points, const std::vector& chunk2Points, const std::vector& hull1p, const std::vector& hull2p, - physx::PxVec3& normal, physx::PxVec3& centroid); + physx::PxVec3& normal, physx::PxVec3& centroid, float maxSeparation); int32_t createFullBondListAveraged( uint32_t meshCount, const uint32_t* geometryOffset, const Triangle* geometry, const CollisionHull** chunkHulls, const bool* supportFlags, const uint32_t* meshGroups, NvBlastBondDesc*& resultBondDescs, BondGenerationConfig conf); diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.cpp new file mode 100644 index 0000000..5c2986f --- /dev/null +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.cpp @@ -0,0 +1,2508 @@ +/* +* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION and its licensors retain all intellectual property +* and proprietary rights in and to this software, related documentation +* and any modifications thereto. Any use, reproduction, disclosure or +* distribution of this software and related documentation without an express +* license agreement from NVIDIA CORPORATION is strictly prohibited. +*/ + + +#include "NvBlastExtAuthoringCutoutImpl.h" +#include "NvBlastGlobals.h" +#include +#include +#include +#include +#include "PxMath.h" + +#pragma warning(disable : 4267) +#pragma warning(disable : 4244) + +#define CUTOUT_DISTANCE_THRESHOLD (0.7f) + +#define CUTOUT_DISTANCE_EPS (0.01f) + +using namespace Nv::Blast; + +// Unsigned modulus +PX_INLINE uint32_t mod(int32_t n, uint32_t modulus) +{ + const int32_t d = n/(int32_t)modulus; + const int32_t m = n - d*(int32_t)modulus; + return m >= 0 ? (uint32_t)m : (uint32_t)m + modulus; +} + +PX_INLINE float square(float x) +{ + return x * x; +} + +// 2D cross product +PX_INLINE float dotXY(const physx::PxVec3& v, const physx::PxVec3& w) +{ + return v.x * w.x + v.y * w.y; +} + +// Z-component of cross product +PX_INLINE float crossZ(const physx::PxVec3& v, const physx::PxVec3& w) +{ + return v.x * w.y - v.y * w.x; +} + +// z coordinates may be used to store extra info - only deal with x and y +PX_INLINE float perpendicularDistanceSquared(const physx::PxVec3& v0, const physx::PxVec3& v1, const physx::PxVec3& v2) +{ + const physx::PxVec3 base = v2 - v0; + const physx::PxVec3 leg = v1 - v0; + + const float baseLen2 = dotXY(base, base); + + return baseLen2 > PX_EPS_F32 * dotXY(leg, leg) ? square(crossZ(base, leg)) / baseLen2 : 0.0f; +} + +// z coordinates may be used to store extra info - only deal with x and y +PX_INLINE float perpendicularDistanceSquared(const std::vector< physx::PxVec3 >& cutout, uint32_t index) +{ + const uint32_t size = cutout.size(); + return perpendicularDistanceSquared(cutout[(index + size - 1) % size], cutout[index], cutout[(index + 1) % size]); +} + +//////////////////////////////////////////////// +// ApexShareUtils - Begin +//////////////////////////////////////////////// + +struct BoundsRep +{ + BoundsRep() : type(0) + { + aabb.setEmpty(); + } + + physx::PxBounds3 aabb; + uint32_t type; // By default only reports if subtypes are the same, configurable. Valid range {0...7} +}; + +struct IntPair +{ + void set(int32_t _i0, int32_t _i1) + { + i0 = _i0; + i1 = _i1; + } + + int32_t i0, i1; + + static int compare(const void* a, const void* b) + { + const int32_t diff0 = ((IntPair*)a)->i0 - ((IntPair*)b)->i0; + return diff0 ? diff0 : (((IntPair*)a)->i1 - ((IntPair*)b)->i1); + } +}; + +struct BoundsInteractions +{ + BoundsInteractions() : bits(0x8040201008040201ULL) {} + BoundsInteractions(bool setAll) : bits(setAll ? 0xFFFFFFFFFFFFFFFFULL : 0x0000000000000000ULL) {} + + bool set(unsigned group1, unsigned group2, bool interacts) + { + if (group1 >= 8 || group2 >= 8) + { + return false; + } + const uint64_t mask = (uint64_t)1 << ((group1 << 3) + group2) | (uint64_t)1 << ((group2 << 3) + group1); + if (interacts) + { + bits |= mask; + } + else + { + bits &= ~mask; + } + return true; + } + + uint64_t bits; +}; + +enum Bounds3Axes +{ + Bounds3X = 1, + Bounds3Y = 2, + Bounds3Z = 4, + + Bounds3XY = Bounds3X | Bounds3Y, + Bounds3YZ = Bounds3Y | Bounds3Z, + Bounds3ZX = Bounds3Z | Bounds3X, + + Bounds3XYZ = Bounds3X | Bounds3Y | Bounds3Z +}; + +void boundsCalculateOverlaps(std::vector& overlaps, Bounds3Axes axesToUse, const BoundsRep* bounds, uint32_t boundsCount, uint32_t boundsByteStride, + const BoundsInteractions& interactions = BoundsInteractions(), bool append = false); + +void createIndexStartLookup(std::vector& lookup, int32_t indexBase, uint32_t indexRange, int32_t* indexSource, uint32_t indexCount, uint32_t indexByteStride); + +/* +Index bank - double-sided free list for O(1) borrow/return of unique IDs + +Type IndexType should be an unsigned integer type or something that can be cast to and from +an integer +*/ +template +class IndexBank +{ +public: + IndexBank(uint32_t capacity = 0) : indexCount(0), capacityLocked(false) + { + maxCapacity = calculateMaxCapacity(); + reserve_internal(capacity); + } + + // Copy constructor + IndexBank(const IndexBank& other) + { + *this = other; + } + + virtual ~IndexBank() {} + + // Assignment operator + IndexBank& operator = (const IndexBank& other) + { + indices = other.indices; + ranks = other.ranks; + maxCapacity = other.maxCapacity; + indexCount = other.indexCount; + capacityLocked = other.capacityLocked; + return *this; + } + + void setIndicesAndRanks(uint16_t* indicesIn, uint16_t* ranksIn, uint32_t capacityIn, uint32_t usedCountIn) + { + indexCount = usedCountIn; + reserve_internal(capacityIn); + for (uint32_t i = 0; i < capacityIn; ++i) + { + indices[i] = indicesIn[i]; + ranks[i] = ranksIn[i]; + } + } + + void clear(uint32_t capacity = 0, bool used = false) + { + capacityLocked = false; + indices.reset(); + ranks.reset(); + reserve_internal(capacity); + if (used) + { + indexCount = capacity; + indices.resize(capacity); + for (IndexType i = (IndexType)0; i < (IndexType)capacity; ++i) + { + indices[i] = i; + } + } + else + { + indexCount = 0; + } + } + + // Equivalent to calling freeLastUsed() until the used list is empty. + void clearFast() + { + indexCount = 0; + } + + // This is the reserve size. The bank can only grow, due to shuffling of indices + virtual void reserve(uint32_t capacity) + { + reserve_internal(capacity); + } + + // If lock = true, keeps bank from automatically resizing + void lockCapacity(bool lock) + { + capacityLocked = lock; + } + + bool isCapacityLocked() const + { + return capacityLocked; + } + + void setMaxCapacity(uint32_t inMaxCapacity) + { + // Cannot drop below current capacity, nor above max set by data types + maxCapacity = PxClamp(inMaxCapacity, capacity(), calculateMaxCapacity()); + } + + uint32_t capacity() const + { + return indices.size(); + } + uint32_t usedCount() const + { + return indexCount; + } + uint32_t freeCount() const + { + return capacity() - usedCount(); + } + + // valid from [0] to [size()-1] + const IndexType* usedIndices() const + { + return indices.data(); + } + + // valid from [0] to [free()-1] + const IndexType* freeIndices() const + { + return indices.begin() + usedCount(); + } + + bool isValid(IndexType index) const + { + return index < (IndexType)capacity(); + } + bool isUsed(IndexType index) const + { + return isValid(index) && (ranks[index] < (IndexType)usedCount()); + } + bool isFree(IndexType index) const + { + return isValid(index) && !isUsed(); + } + + IndexType getRank(IndexType index) const + { + return ranks[index]; + } + + // Gets the next available index, if any + bool useNextFree(IndexType& index) + { + if (freeCount() == 0) + { + if (capacityLocked) + { + return false; + } + if (capacity() >= maxCapacity) + { + return false; + } + reserve(PxClamp(capacity() * 2, (uint32_t)1, maxCapacity)); + PX_ASSERT(freeCount() > 0); + } + index = indices[indexCount++]; + return true; + } + + // Frees the last used index, if any + bool freeLastUsed(IndexType& index) + { + if (usedCount() == 0) + { + return false; + } + index = indices[--indexCount]; + return true; + } + + // Requests a particular index. If that index is available, it is borrowed and the function + // returns true. Otherwise nothing happens and the function returns false. + bool use(IndexType index) + { + if (!indexIsValidForUse(index)) + { + return false; + } + IndexType oldRank; + placeIndexAtRank(index, (IndexType)indexCount++, oldRank); + return true; + } + + bool free(IndexType index) + { + if (!indexIsValidForFreeing(index)) + { + return false; + } + IndexType oldRank; + placeIndexAtRank(index, (IndexType)--indexCount, oldRank); + return true; + } + + bool useAndReturnRanks(IndexType index, IndexType& newRank, IndexType& oldRank) + { + if (!indexIsValidForUse(index)) + { + return false; + } + newRank = (IndexType)indexCount++; + placeIndexAtRank(index, newRank, oldRank); + return true; + } + + bool freeAndReturnRanks(IndexType index, IndexType& newRank, IndexType& oldRank) + { + if (!indexIsValidForFreeing(index)) + { + return false; + } + newRank = (IndexType)--indexCount; + placeIndexAtRank(index, newRank, oldRank); + return true; + } + +protected: + + bool indexIsValidForUse(IndexType index) + { + if (!isValid(index)) + { + if (capacityLocked) + { + return false; + } + if (capacity() >= maxCapacity) + { + return false; + } + reserve(physx::PxClamp(2 * (uint32_t)index, (uint32_t)1, maxCapacity)); + PX_ASSERT(isValid(index)); + } + return !isUsed(index); + } + + bool indexIsValidForFreeing(IndexType index) + { + if (!isValid(index)) + { + // Invalid index + return false; + } + return isUsed(index); + } + + // This is the reserve size. The bank can only grow, due to shuffling of indices + void reserve_internal(uint32_t capacity) + { + capacity = std::min(capacity, maxCapacity); + const uint32_t oldCapacity = indices.size(); + if (capacity > oldCapacity) + { + indices.resize(capacity); + ranks.resize(capacity); + for (IndexType i = (IndexType)oldCapacity; i < (IndexType)capacity; ++i) + { + indices[i] = i; + ranks[i] = i; + } + } + } + +private: + + void placeIndexAtRank(IndexType index, IndexType newRank, IndexType& oldRank) // returns old rank + { + const IndexType replacementIndex = indices[newRank]; + oldRank = ranks[index]; + indices[oldRank] = replacementIndex; + indices[newRank] = index; + ranks[replacementIndex] = oldRank; + ranks[index] = newRank; + } + + uint32_t calculateMaxCapacity() + { +#pragma warning(push) +#pragma warning(disable: 4127) // conditional expression is constant + if (sizeof(IndexType) >= sizeof(uint32_t)) + { + return 0xFFFFFFFF; // Limited by data type we use to report capacity + } + else + { + return (1u << (8 * std::min((uint32_t)sizeof(IndexType), 3u))) - 1; // Limited by data type we use for indices + } +#pragma warning(pop) + } + +protected: + + std::vector indices; + std::vector ranks; + uint32_t maxCapacity; + uint32_t indexCount; + bool capacityLocked; +}; + +struct Marker +{ + float pos; + uint32_t id; // lsb = type (0 = max, 1 = min), other bits used for object index + + void set(float _pos, int32_t _id) + { + pos = _pos; + id = (uint32_t)_id; + } +}; + +static int compareMarkers(const void* A, const void* B) +{ + // Sorts by value. If values equal, sorts min types greater than max types, to reduce the # of overlaps + const float delta = ((Marker*)A)->pos - ((Marker*)B)->pos; + return delta != 0 ? (delta < 0 ? -1 : 1) : ((int)(((Marker*)A)->id & 1) - (int)(((Marker*)B)->id & 1)); +} + +void boundsCalculateOverlaps(std::vector& overlaps, Bounds3Axes axesToUse, const BoundsRep* bounds, uint32_t boundsCount, uint32_t boundsByteStride, + const BoundsInteractions& interactions, bool append) +{ + if (!append) + { + overlaps.clear(); + } + + uint32_t D = 0; + uint32_t axisNums[3]; + for (unsigned i = 0; i < 3; ++i) + { + if ((axesToUse >> i) & 1) + { + axisNums[D++] = i; + } + } + + if (D == 0 || D > 3) + { + return; + } + + std::vector< std::vector > axes; + axes.resize(D); + uint32_t overlapCount[3]; + + for (uint32_t n = 0; n < D; ++n) + { + const uint32_t axisNum = axisNums[n]; + std::vector& axis = axes[n]; + overlapCount[n] = 0; + axis.resize(2 * boundsCount); + uint8_t* boundsPtr = (uint8_t*)bounds; + for (uint32_t i = 0; i < boundsCount; ++i, boundsPtr += boundsByteStride) + { + const BoundsRep& boundsRep = *(const BoundsRep*)boundsPtr; + const physx::PxBounds3& box = boundsRep.aabb; + float min = box.minimum[axisNum]; + float max = box.maximum[axisNum]; + if (min >= max) + { + const float mid = 0.5f * (min + max); + float pad = 0.000001f * fabsf(mid); + min = mid - pad; + max = mid + pad; + } + axis[i << 1].set(min, (int32_t)i << 1 | 1); + axis[i << 1 | 1].set(max, (int32_t)i << 1); + } + qsort(axis.data(), axis.size(), sizeof(Marker), compareMarkers); + uint32_t localOverlapCount = 0; + for (uint32_t i = 0; i < axis.size(); ++i) + { + Marker& marker = axis[i]; + if (marker.id & 1) + { + overlapCount[n] += localOverlapCount; + ++localOverlapCount; + } + else + { + --localOverlapCount; + } + } + } + + unsigned int axis0; + unsigned int axis1; + unsigned int axis2; + unsigned int maxBin; + if (D == 1) + { + maxBin = 0; + axis0 = axisNums[0]; + axis1 = axis0; + axis2 = axis0; + } + else if (D == 2) + { + if (overlapCount[0] < overlapCount[1]) + { + maxBin = 0; + axis0 = axisNums[0]; + axis1 = axisNums[1]; + axis2 = axis0; + } + else + { + maxBin = 1; + axis0 = axisNums[1]; + axis1 = axisNums[0]; + axis2 = axis0; + } + } + else + { + maxBin = overlapCount[0] < overlapCount[1] ? (overlapCount[0] < overlapCount[2] ? 0U : 2U) : (overlapCount[1] < overlapCount[2] ? 1U : 2U); + axis0 = axisNums[maxBin]; + axis1 = (axis0 + 1) % 3; + axis2 = (axis0 + 2) % 3; + } + + const uint64_t interactionBits = interactions.bits; + + IndexBank localOverlaps(boundsCount); + std::vector& axis = axes[maxBin]; + float boxMin1 = 0.0f; + float boxMax1 = 0.0f; + float boxMin2 = 0.0f; + float boxMax2 = 0.0f; + + for (uint32_t i = 0; i < axis.size(); ++i) + { + Marker& marker = axis[i]; + const uint32_t index = marker.id >> 1; + if (marker.id & 1) + { + const BoundsRep& boundsRep = *(const BoundsRep*)((uint8_t*)bounds + index*boundsByteStride); + const uint8_t interaction = (uint8_t)((interactionBits >> (boundsRep.type << 3)) & 0xFF); + const physx::PxBounds3& box = boundsRep.aabb; + // These conditionals compile out with optimization: + if (D > 1) + { + boxMin1 = box.minimum[axis1]; + boxMax1 = box.maximum[axis1]; + if (D == 3) + { + boxMin2 = box.minimum[axis2]; + boxMax2 = box.maximum[axis2]; + } + } + const uint32_t localOverlapCount = localOverlaps.usedCount(); + const uint32_t* localOverlapIndices = localOverlaps.usedIndices(); + for (uint32_t j = 0; j < localOverlapCount; ++j) + { + const uint32_t overlapIndex = localOverlapIndices[j]; + const BoundsRep& overlapBoundsRep = *(const BoundsRep*)((uint8_t*)bounds + overlapIndex*boundsByteStride); + if ((interaction >> overlapBoundsRep.type) & 1) + { + const physx::PxBounds3& overlapBox = overlapBoundsRep.aabb; + // These conditionals compile out with optimization: + if (D > 1) + { + if (boxMin1 >= overlapBox.maximum[axis1] || boxMax1 <= overlapBox.minimum[axis1]) + { + continue; + } + if (D == 3) + { + if (boxMin2 >= overlapBox.maximum[axis2] || boxMax2 <= overlapBox.minimum[axis2]) + { + continue; + } + } + } + // Add overlap + IntPair pair; + pair.i0 = (int32_t)index; + pair.i1 = (int32_t)overlapIndex; + overlaps.push_back(pair); + } + } + PX_ASSERT(localOverlaps.isValid(index)); + PX_ASSERT(!localOverlaps.isUsed(index)); + localOverlaps.use(index); + } + else + { + // Remove local overlap + PX_ASSERT(localOverlaps.isValid(index)); + localOverlaps.free(index); + } + } +} + +void createIndexStartLookup(std::vector& lookup, int32_t indexBase, uint32_t indexRange, int32_t* indexSource, uint32_t indexCount, uint32_t indexByteStride) +{ + if (indexRange == 0) + { + lookup.resize(std::max(indexRange + 1, 2u)); + lookup[0] = 0; + lookup[1] = indexCount; + } + else + { + lookup.resize(indexRange + 1); + uint32_t indexPos = 0; + for (uint32_t i = 0; i < indexRange; ++i) + { + for (; indexPos < indexCount; ++indexPos, indexSource = (int32_t*)((uintptr_t)indexSource + indexByteStride)) + { + if (*indexSource >= (int32_t)i + indexBase) + { + lookup[i] = indexPos; + break; + } + } + if (indexPos == indexCount) + { + lookup[i] = indexPos; + } + } + lookup[indexRange] = indexCount; + } +} + +//////////////////////////////////////////////// +// ApexShareUtils - End +//////////////////////////////////////////////// + +struct CutoutVert +{ + int32_t cutoutIndex; + int32_t vertIndex; + + void set(int32_t _cutoutIndex, int32_t _vertIndex) + { + cutoutIndex = _cutoutIndex; + vertIndex = _vertIndex; + } +}; + +struct NewVertex +{ + CutoutVert vertex; + float edgeProj; +}; + +static int compareNewVertices(const void* a, const void* b) +{ + const int32_t cutoutDiff = ((NewVertex*)a)->vertex.cutoutIndex - ((NewVertex*)b)->vertex.cutoutIndex; + if (cutoutDiff) + { + return cutoutDiff; + } + const int32_t vertDiff = ((NewVertex*)a)->vertex.vertIndex - ((NewVertex*)b)->vertex.vertIndex; + if (vertDiff) + { + return vertDiff; + } + const float projDiff = ((NewVertex*)a)->edgeProj - ((NewVertex*)b)->edgeProj; + return projDiff ? (projDiff < 0.0f ? -1 : 1) : 0; +} + +template +class Map2d +{ +public: + Map2d(uint32_t width, uint32_t height) + { + create_internal(width, height, NULL); + } + Map2d(uint32_t width, uint32_t height, T fillValue) + { + create_internal(width, height, &fillValue); + } + Map2d(const Map2d& map) + { + *this = map; + } + + Map2d& operator = (const Map2d& map) + { + mMem.clear(); + create_internal(map.mWidth, map.mHeight, NULL); + return *this; + } + + void create(uint32_t width, uint32_t height) + { + return create_internal(width, height, NULL); + } + void create(uint32_t width, uint32_t height, T fillValue) + { + create_internal(width, height, &fillValue); + } + + //void clear(const T value) + //{ + // for (auto it = mMem.begin(); it != mMem.end(); it++) + // { + // for (auto it2 = it->begin(); it2 != it->end(); it2++) + // { + // *it2 = value; + // } + // } + //} + + void setOrigin(uint32_t x, uint32_t y) + { + mOriginX = x; + mOriginY = y; + } + + const T& operator()(int32_t x, int32_t y) const + { + x = (int32_t)mod(x+(int32_t)mOriginX, mWidth); + y = (int32_t)mod(y+(int32_t)mOriginY, mHeight); + return mMem[y][x]; + } + T& operator()(int32_t x, int32_t y) + { + x = (int32_t)mod(x+(int32_t)mOriginX, mWidth); + y = (int32_t)mod(y+(int32_t)mOriginY, mHeight); + return mMem[y][x]; + } + +private: + + void create_internal(uint32_t width, uint32_t height, T* val) + { + mMem.clear(); + mWidth = width; + mHeight = height; + mMem.resize(mHeight); + for (auto it = mMem.begin(); it != mMem.end(); it++) + { + it->resize(mWidth, val ? *val : 0); + } + mOriginX = 0; + mOriginY = 0; + } + + std::vector> mMem; + uint32_t mWidth; + uint32_t mHeight; + uint32_t mOriginX; + uint32_t mOriginY; +}; + +class BitMap +{ +public: + BitMap() : mMem(NULL) {} + BitMap(uint32_t width, uint32_t height) : mMem(NULL) + { + create_internal(width, height, NULL); + } + BitMap(uint32_t width, uint32_t height, bool fillValue) : mMem(NULL) + { + create_internal(width, height, &fillValue); + } + BitMap(const BitMap& map) + { + *this = map; + } + ~BitMap() + { + delete [] mMem; + } + + BitMap& operator = (const BitMap& map) + { + delete [] mMem; + mMem = NULL; + if (map.mMem) + { + create_internal(map.mWidth, map.mHeight, NULL); + memcpy(mMem, map.mMem, mHeight * mRowBytes); + } + return *this; + } + + void create(uint32_t width, uint32_t height) + { + return create_internal(width, height, NULL); + } + void create(uint32_t width, uint32_t height, bool fillValue) + { + create_internal(width, height, &fillValue); + } + + void clear(bool value) + { + memset(mMem, value ? 0xFF : 0x00, mRowBytes * mHeight); + } + + void setOrigin(uint32_t x, uint32_t y) + { + mOriginX = x; + mOriginY = y; + } + + bool read(int32_t x, int32_t y) const + { + x = (int32_t)mod(x+(int32_t)mOriginX, mWidth); + y = (int32_t)mod(y+(int32_t)mOriginY, mHeight); + return ((mMem[(x >> 3) + y * mRowBytes] >> (x & 7)) & 1) != 0; + } + void set(int32_t x, int32_t y) + { + x = (int32_t)mod(x+(int32_t)mOriginX, mWidth); + y = (int32_t)mod(y+(int32_t)mOriginY, mHeight); + mMem[(x >> 3) + y * mRowBytes] |= 1 << (x & 7); + } + void reset(int32_t x, int32_t y) + { + x = (int32_t)mod(x+(int32_t)mOriginX, mWidth); + y = (int32_t)mod(y+(int32_t)mOriginY, mHeight); + mMem[(x >> 3) + y * mRowBytes] &= ~(1 << (x & 7)); + } + +private: + + void create_internal(uint32_t width, uint32_t height, bool* val) + { + delete [] mMem; + mRowBytes = (width + 7) >> 3; + const uint32_t bytes = mRowBytes * height; + if (bytes == 0) + { + mWidth = mHeight = 0; + mMem = NULL; + return; + } + mWidth = width; + mHeight = height; + mMem = new uint8_t[bytes]; + mOriginX = 0; + mOriginY = 0; + if (val) + { + clear(*val); + } + } + + uint8_t* mMem; + uint32_t mWidth; + uint32_t mHeight; + uint32_t mRowBytes; + uint32_t mOriginX; + uint32_t mOriginY; +}; + + +PX_INLINE int32_t taxicabSine(int32_t i) +{ + // 0 1 1 1 0 -1 -1 -1 + return (int32_t)((0x01A9 >> ((i & 7) << 1)) & 3) - 1; +} + +// Only looks at x and y components +PX_INLINE bool directionsXYOrderedCCW(const physx::PxVec3& d0, const physx::PxVec3& d1, const physx::PxVec3& d2) +{ + const bool ccw02 = crossZ(d0, d2) > 0.0f; + const bool ccw01 = crossZ(d0, d1) > 0.0f; + const bool ccw21 = crossZ(d2, d1) > 0.0f; + return ccw02 ? ccw01 && ccw21 : ccw01 || ccw21; +} + +PX_INLINE float compareTraceSegmentToLineSegment(const std::vector& trace, int _start, int delta, float distThreshold, uint32_t width, uint32_t height, bool hasBorder) +{ + if (delta < 2) + { + return 0.0f; + } + + const uint32_t size = trace.size(); + + uint32_t start = (uint32_t)_start, end = (uint32_t)(_start + delta) % size; + + const bool startIsOnBorder = hasBorder && (trace[start].x == -1 || trace[start].x == (int)width || trace[start].y == -1 || trace[start].y == (int)height); + const bool endIsOnBorder = hasBorder && (trace[end].x == -1 || trace[end].x == (int)width || trace[end].y == -1 || trace[end].y == (int)height); + + if (startIsOnBorder || endIsOnBorder) + { + if ((trace[start].x == -1 && trace[end].x == -1) || + (trace[start].y == -1 && trace[end].y == -1) || + (trace[start].x == (int)width && trace[end].x == (int)width) || + (trace[start].y == (int)height && trace[end].y == (int)height)) + { + return 0.0f; + } + return PX_MAX_F32; + } + + physx::PxVec3 orig((float)trace[start].x, (float)trace[start].y, 0); + physx::PxVec3 dest((float)trace[end].x, (float)trace[end].y, 0); + physx::PxVec3 dir = dest - orig; + + dir.normalize(); + + float aveError = 0.0f; + + for (;;) + { + if (++start >= size) + { + start = 0; + } + if (start == end) + { + break; + } + physx::PxVec3 testDisp((float)trace[start].x, (float)trace[start].y, 0); + testDisp -= orig; + aveError += (float)(physx::PxAbs(testDisp.x * dir.y - testDisp.y * dir.x) >= distThreshold); + } + + aveError /= delta - 1; + + return aveError; +} + +// Segment i starts at vi and ends at vi+ei +// Tests for overlap in segments' projection onto xy plane +// Returns distance between line segments. (Negative value indicates overlap.) +PX_INLINE float segmentsIntersectXY(const physx::PxVec3& v0, const physx::PxVec3& e0, const physx::PxVec3& v1, const physx::PxVec3& e1) +{ + const physx::PxVec3 dv = v1 - v0; + + physx::PxVec3 d0 = e0; + d0.normalize(); + physx::PxVec3 d1 = e1; + d1.normalize(); + + const float c10 = crossZ(dv, d0); + const float d10 = crossZ(e1, d0); + + float a1 = physx::PxAbs(c10); + float b1 = physx::PxAbs(c10 + d10); + + if (c10 * (c10 + d10) < 0.0f) + { + if (a1 < b1) + { + a1 = -a1; + } + else + { + b1 = -b1; + } + } + + const float c01 = crossZ(d1, dv); + const float d01 = crossZ(e0, d1); + + float a2 = physx::PxAbs(c01); + float b2 = physx::PxAbs(c01 + d01); + + if (c01 * (c01 + d01) < 0.0f) + { + if (a2 < b2) + { + a2 = -a2; + } + else + { + b2 = -b2; + } + } + + return physx::PxMax(physx::PxMin(a1, b1), physx::PxMin(a2, b2)); +} + +// If point projects onto segment, returns true and proj is set to a +// value in the range [0,1], indicating where along the segment (from v0 to v1) +// the projection lies, and dist2 is set to the distance squared from point to +// the line segment. Otherwise, returns false. +// Note, if v1 = v0, then the function returns true with proj = 0. +PX_INLINE bool projectOntoSegmentXY(float& proj, float& dist2, const physx::PxVec3& point, const physx::PxVec3& v0, const physx::PxVec3& v1, float margin) +{ + const physx::PxVec3 seg = v1 - v0; + const physx::PxVec3 x = point - v0; + const float seg2 = dotXY(seg, seg); + const float d = dotXY(x, seg); + + if (d < 0.0f || d > seg2) + { + return false; + } + + const float margin2 = margin * margin; + + const float p = seg2 > 0.0f ? d / seg2 : 0.0f; + const float lineDist2 = d * p; + + if (lineDist2 < margin2) + { + return false; + } + + const float pPrime = 1.0f - p; + const float dPrime = seg2 - d; + const float lineDistPrime2 = dPrime * pPrime; + + if (lineDistPrime2 < margin2) + { + return false; + } + + proj = p; + dist2 = dotXY(x, x) - lineDist2; + return true; +} + +PX_INLINE bool isOnBorder(const physx::PxVec3& v, uint32_t width, uint32_t height) +{ + return v.x < -0.5f || v.x >= width - 0.5f || v.y < -0.5f || v.y >= height - 0.5f; +} + +static void createCutout(Nv::Blast::Cutout& cutout, const std::vector& trace, float segmentationErrorThreshold, float snapThreshold, uint32_t width, uint32_t height, bool hasBorder) +{ + cutout.vertices.clear(); + + const uint32_t traceSize = trace.size(); + + if (traceSize == 0) + { + return; // Nothing to do + } + + uint32_t size = traceSize; + + std::vector vertexIndices; + + const float pixelCenterOffset = hasBorder ? 0.5f : 0.0f; + + // Find best segment + uint32_t start = 0; + uint32_t delta = 0; + for (uint32_t iStart = 0; iStart < size; ++iStart) + { + uint32_t iDelta = (size >> 1) + (size & 1); + for (; iDelta > 1; --iDelta) + { + float fit = compareTraceSegmentToLineSegment(trace, (int32_t)iStart, (int32_t)iDelta, CUTOUT_DISTANCE_THRESHOLD, width, height, hasBorder); + if (fit < segmentationErrorThreshold) + { + break; + } + } + if (iDelta > delta) + { + start = iStart; + delta = iDelta; + } + } + cutout.vertices.push_back(physx::PxVec3((float)trace[start].x + pixelCenterOffset, (float)trace[start].y + pixelCenterOffset, 0)); + + // Now complete the loop + while ((size -= delta) > 0) + { + start = (start + delta) % traceSize; + cutout.vertices.push_back(physx::PxVec3((float)trace[start].x + pixelCenterOffset, (float)trace[start].y + pixelCenterOffset, 0)); + if (size == 1) + { + delta = 1; + break; + } + for (delta = size - 1; delta > 1; --delta) + { + float fit = compareTraceSegmentToLineSegment(trace, (int32_t)start, (int32_t)delta, CUTOUT_DISTANCE_THRESHOLD, width, height, hasBorder); + if (fit < segmentationErrorThreshold) + { + break; + } + } + } + + const float snapThresh2 = square(snapThreshold); + + // Use the snapThreshold to clean up + while ((size = cutout.vertices.size()) >= 4) + { + bool reduced = false; + for (uint32_t i = 0; i < size; ++i) + { + const uint32_t i1 = (i + 1) % size; + const uint32_t i2 = (i + 2) % size; + const uint32_t i3 = (i + 3) % size; + physx::PxVec3& v0 = cutout.vertices[i]; + physx::PxVec3& v1 = cutout.vertices[i1]; + physx::PxVec3& v2 = cutout.vertices[i2]; + physx::PxVec3& v3 = cutout.vertices[i3]; + const physx::PxVec3 d0 = v1 - v0; + const physx::PxVec3 d1 = v2 - v1; + const physx::PxVec3 d2 = v3 - v2; + const float den = crossZ(d0, d2); + if (den != 0) + { + const float recipDen = 1.0f / den; + const float s0 = crossZ(d1, d2) * recipDen; + const float s2 = crossZ(d0, d1) * recipDen; + if (s0 >= 0 || s2 >= 0) + { + if (d0.magnitudeSquared()*s0* s0 <= snapThresh2 && d2.magnitudeSquared()*s2* s2 <= snapThresh2) + { + v1 += d0 * s0; + + //uint32_t index = (uint32_t)(&v2 - cutout.vertices.begin()); + cutout.vertices.erase(cutout.vertices.begin() + std::distance(cutout.vertices.data(), &v2)); + + reduced = true; + break; + } + } + } + } + if (!reduced) + { + break; + } + } +} + +static void splitTJunctions(Nv::Blast::CutoutSetImpl& cutoutSet, float threshold) +{ + // Set bounds reps + std::vector bounds; + std::vector cutoutMap; // maps bounds # -> ( cutout #, vertex # ). + std::vector overlaps; + + const float distThreshold2 = threshold * threshold; + + // Split T-junctions + uint32_t edgeCount = 0; + for (uint32_t i = 0; i < cutoutSet.cutouts.size(); ++i) + { + edgeCount += cutoutSet.cutouts[i].vertices.size(); + } + + bounds.resize(edgeCount); + cutoutMap.resize(edgeCount); + + edgeCount = 0; + for (uint32_t i = 0; i < cutoutSet.cutouts.size(); ++i) + { + Nv::Blast::Cutout& cutout = cutoutSet.cutouts[i]; + const uint32_t cutoutSize = cutout.vertices.size(); + for (uint32_t j = 0; j < cutoutSize; ++j) + { + bounds[edgeCount].aabb.include(cutout.vertices[j]); + bounds[edgeCount].aabb.include(cutout.vertices[(j + 1) % cutoutSize]); + PX_ASSERT(!bounds[edgeCount].aabb.isEmpty()); + bounds[edgeCount].aabb.fattenFast(threshold); + cutoutMap[edgeCount].set((int32_t)i, (int32_t)j); + ++edgeCount; + } + } + + // Find bounds overlaps + if (bounds.size() > 0) + { + boundsCalculateOverlaps(overlaps, Bounds3XY, &bounds[0], bounds.size(), sizeof(bounds[0])); + } + + std::vector newVertices; + for (uint32_t overlapIndex = 0; overlapIndex < overlaps.size(); ++overlapIndex) + { + const IntPair& mapPair = overlaps[overlapIndex]; + const CutoutVert& seg0Map = cutoutMap[(uint32_t)mapPair.i0]; + const CutoutVert& seg1Map = cutoutMap[(uint32_t)mapPair.i1]; + + if (seg0Map.cutoutIndex == seg1Map.cutoutIndex) + { + // Only split based on vertex/segment junctions from different cutouts + continue; + } + + NewVertex newVertex; + float dist2 = 0; + + const Nv::Blast::Cutout& cutout0 = cutoutSet.cutouts[(uint32_t)seg0Map.cutoutIndex]; + const uint32_t cutoutSize0 = cutout0.vertices.size(); + const Nv::Blast::Cutout& cutout1 = cutoutSet.cutouts[(uint32_t)seg1Map.cutoutIndex]; + const uint32_t cutoutSize1 = cutout1.vertices.size(); + + if (projectOntoSegmentXY(newVertex.edgeProj, dist2, cutout0.vertices[(uint32_t)seg0Map.vertIndex], cutout1.vertices[(uint32_t)seg1Map.vertIndex], + cutout1.vertices[(uint32_t)(seg1Map.vertIndex + 1) % cutoutSize1], 0.25f)) + { + if (dist2 <= distThreshold2) + { + newVertex.vertex = seg1Map; + newVertices.push_back(newVertex); + } + } + + if (projectOntoSegmentXY(newVertex.edgeProj, dist2, cutout1.vertices[(uint32_t)seg1Map.vertIndex], cutout0.vertices[(uint32_t)seg0Map.vertIndex], + cutout0.vertices[(uint32_t)(seg0Map.vertIndex + 1) % cutoutSize0], 0.25f)) + { + if (dist2 <= distThreshold2) + { + newVertex.vertex = seg0Map; + newVertices.push_back(newVertex); + } + } + } + + if (newVertices.size()) + { + // Sort new vertices + qsort(newVertices.data(), newVertices.size(), sizeof(NewVertex), compareNewVertices); + + // Insert new vertices + uint32_t lastCutoutIndex = 0xFFFFFFFF; + uint32_t lastVertexIndex = 0xFFFFFFFF; + float lastProj = 1.0f; + for (uint32_t newVertexIndex = newVertices.size(); newVertexIndex--;) + { + const NewVertex& newVertex = newVertices[newVertexIndex]; + if (newVertex.vertex.cutoutIndex != (int32_t)lastCutoutIndex) + { + lastCutoutIndex = (uint32_t)newVertex.vertex.cutoutIndex; + lastVertexIndex = 0xFFFFFFFF; + } + if (newVertex.vertex.vertIndex != (int32_t)lastVertexIndex) + { + lastVertexIndex = (uint32_t)newVertex.vertex.vertIndex; + lastProj = 1.0f; + } + Nv::Blast::Cutout& cutout = cutoutSet.cutouts[(uint32_t)newVertex.vertex.cutoutIndex]; + const float proj = lastProj > 0.0f ? newVertex.edgeProj / lastProj : 0.0f; + const physx::PxVec3 pos = (1.0f - proj) * cutout.vertices[(uint32_t)newVertex.vertex.vertIndex] + + proj * cutout.vertices[(uint32_t)(newVertex.vertex.vertIndex + 1) % cutout.vertices.size()]; + cutout.vertices.push_back(physx::PxVec3()); + for (uint32_t n = cutout.vertices.size(); --n > (uint32_t)newVertex.vertex.vertIndex + 1;) + { + cutout.vertices[n] = cutout.vertices[n - 1]; + } + cutout.vertices[(uint32_t)newVertex.vertex.vertIndex + 1] = pos; + lastProj = newVertex.edgeProj; + } + } +} + + +static void mergeVertices(Nv::Blast::CutoutSetImpl& cutoutSet, float threshold, uint32_t width, uint32_t height) +{ + // Set bounds reps + uint32_t vertexCount = 0; + for (uint32_t i = 0; i < cutoutSet.cutouts.size(); ++i) + { + vertexCount += cutoutSet.cutouts[i].vertices.size(); + } + + std::vector bounds; + std::vector cutoutMap; // maps bounds # -> ( cutout #, vertex # ). + bounds.resize(vertexCount); + cutoutMap.resize(vertexCount); + + vertexCount = 0; + for (uint32_t i = 0; i < cutoutSet.cutouts.size(); ++i) + { + Nv::Blast::Cutout& cutout = cutoutSet.cutouts[i]; + for (uint32_t j = 0; j < cutout.vertices.size(); ++j) + { + physx::PxVec3& vertex = cutout.vertices[j]; + physx::PxVec3 min(vertex.x - threshold, vertex.y - threshold, 0.0f); + physx::PxVec3 max(vertex.x + threshold, vertex.y + threshold, 0.0f); + bounds[vertexCount].aabb = physx::PxBounds3(min, max); + cutoutMap[vertexCount].set((int32_t)i, (int32_t)j); + ++vertexCount; + } + } + + // Find bounds overlaps + std::vector overlaps; + if (bounds.size() > 0) + { + boundsCalculateOverlaps(overlaps, Bounds3XY, &bounds[0], bounds.size(), sizeof(bounds[0])); + } + uint32_t overlapCount = overlaps.size(); + + if (overlapCount == 0) + { + return; + } + + // Sort by first index + qsort(overlaps.data(), overlapCount, sizeof(IntPair), IntPair::compare); + + const float threshold2 = threshold * threshold; + + std::vector pairs; + + // Group by first index + std::vector lookup; + createIndexStartLookup(lookup, 0, vertexCount, &overlaps.begin()->i0, overlapCount, sizeof(IntPair)); + for (uint32_t i = 0; i < vertexCount; ++i) + { + const uint32_t start = lookup[i]; + const uint32_t stop = lookup[i + 1]; + if (start == stop) + { + continue; + } + const CutoutVert& cutoutVert0 = cutoutMap[(uint32_t)overlaps[start].i0]; + const physx::PxVec3& vert0 = cutoutSet.cutouts[(uint32_t)cutoutVert0.cutoutIndex].vertices[(uint32_t)cutoutVert0.vertIndex]; + const bool isOnBorder0 = !cutoutSet.periodic && isOnBorder(vert0, width, height); + for (uint32_t j = start; j < stop; ++j) + { + const CutoutVert& cutoutVert1 = cutoutMap[(uint32_t)overlaps[j].i1]; + if (cutoutVert0.cutoutIndex == cutoutVert1.cutoutIndex) + { + // No pairs from the same cutout + continue; + } + const physx::PxVec3& vert1 = cutoutSet.cutouts[(uint32_t)cutoutVert1.cutoutIndex].vertices[(uint32_t)cutoutVert1.vertIndex]; + const bool isOnBorder1 = !cutoutSet.periodic && isOnBorder(vert1, width, height); + if (isOnBorder0 != isOnBorder1) + { + // No border/non-border pairs + continue; + } + if ((vert0 - vert1).magnitudeSquared() > threshold2) + { + // Distance outside threshold + continue; + } + // A keeper. Keep a symmetric list + IntPair overlap = overlaps[j]; + pairs.push_back(overlap); + const int32_t i0 = overlap.i0; + overlap.i0 = overlap.i1; + overlap.i1 = i0; + pairs.push_back(overlap); + } + } + + // Sort by first index + qsort(pairs.data(), pairs.size(), sizeof(IntPair), IntPair::compare); + + // For every vertex, only keep closest neighbor from each cutout + createIndexStartLookup(lookup, 0, vertexCount, &pairs.begin()->i0, pairs.size(), sizeof(IntPair)); + for (uint32_t i = 0; i < vertexCount; ++i) + { + const uint32_t start = lookup[i]; + const uint32_t stop = lookup[i + 1]; + if (start == stop) + { + continue; + } + const CutoutVert& cutoutVert0 = cutoutMap[(uint32_t)pairs[start].i0]; + const physx::PxVec3& vert0 = cutoutSet.cutouts[(uint32_t)cutoutVert0.cutoutIndex].vertices[(uint32_t)cutoutVert0.vertIndex]; + uint32_t groupStart = start; + while (groupStart < stop) + { + uint32_t next = groupStart; + const CutoutVert& cutoutVert1 = cutoutMap[(uint32_t)pairs[next].i1]; + int32_t currentOtherCutoutIndex = cutoutVert1.cutoutIndex; + const physx::PxVec3& vert1 = cutoutSet.cutouts[(uint32_t)currentOtherCutoutIndex].vertices[(uint32_t)cutoutVert1.vertIndex]; + uint32_t keep = groupStart; + float minDist2 = (vert0 - vert1).magnitudeSquared(); + while (++next < stop) + { + const CutoutVert& cutoutVertNext = cutoutMap[(uint32_t)pairs[next].i1]; + if (currentOtherCutoutIndex != cutoutVertNext.cutoutIndex) + { + break; + } + const physx::PxVec3& vertNext = cutoutSet.cutouts[(uint32_t)cutoutVertNext.cutoutIndex].vertices[(uint32_t)cutoutVertNext.vertIndex]; + const float dist2 = (vert0 - vertNext).magnitudeSquared(); + if (dist2 < minDist2) + { + pairs[keep].set(-1, -1); // Invalidate + keep = next; + minDist2 = dist2; + } + else + { + pairs[next].set(-1, -1); // Invalidate + } + } + groupStart = next; + } + } + + // Eliminate invalid pairs (compactify) + uint32_t pairCount = 0; + for (uint32_t i = 0; i < pairs.size(); ++i) + { + if (pairs[i].i0 >= 0 && pairs[i].i1 >= 0) + { + pairs[pairCount++] = pairs[i]; + } + } + pairs.resize(pairCount); + + // Snap points together + std::vector pinned(vertexCount, false); + + for (uint32_t i = 0; i < pairCount; ++i) + { + const uint32_t i0 = (uint32_t)pairs[i].i0; + if (pinned[i0]) + { + continue; + } + const CutoutVert& cutoutVert0 = cutoutMap[i0]; + physx::PxVec3& vert0 = cutoutSet.cutouts[(uint32_t)cutoutVert0.cutoutIndex].vertices[(uint32_t)cutoutVert0.vertIndex]; + const uint32_t i1 = (uint32_t)pairs[i].i1; + const CutoutVert& cutoutVert1 = cutoutMap[i1]; + physx::PxVec3& vert1 = cutoutSet.cutouts[(uint32_t)cutoutVert1.cutoutIndex].vertices[(uint32_t)cutoutVert1.vertIndex]; + const physx::PxVec3 disp = vert1 - vert0; + // Move and pin + pinned[i0] = true; + if (pinned[i1]) + { + vert0 = vert1; + } + else + { + vert0 += 0.5f * disp; + vert1 = vert0; + pinned[i1] = true; + } + } +} + +static void eliminateStraightAngles(Nv::Blast::CutoutSetImpl& cutoutSet) +{ + // Eliminate straight angles + for (uint32_t i = 0; i < cutoutSet.cutouts.size(); ++i) + { + Nv::Blast::Cutout& cutout = cutoutSet.cutouts[i]; + uint32_t oldSize; + do + { + oldSize = cutout.vertices.size(); + for (uint32_t j = 0; j < cutout.vertices.size();) + { +// if( isOnBorder( cutout.vertices[j], width, height ) ) +// { // Don't eliminate border vertices +// ++j; +// continue; +// } + if (perpendicularDistanceSquared(cutout.vertices, j) < CUTOUT_DISTANCE_EPS * CUTOUT_DISTANCE_EPS) + { + cutout.vertices.erase(cutout.vertices.begin() + j); + } + else + { + ++j; + } + } + } + while (cutout.vertices.size() != oldSize); + } +} + +static void simplifyCutoutSetImpl(Nv::Blast::CutoutSetImpl& cutoutSet, float threshold, uint32_t width, uint32_t height) +{ + splitTJunctions(cutoutSet, 1.0f); + mergeVertices(cutoutSet, threshold, width, height); + eliminateStraightAngles(cutoutSet); +} + +//static void cleanCutout(Nv::Blast::Cutout& cutout, uint32_t loopIndex, float tolerance) +//{ +// Nv::Blast::ConvexLoop& loop = cutout.convexLoops[loopIndex]; +// const float tolerance2 = tolerance * tolerance; +// uint32_t oldSize; +// do +// { +// oldSize = loop.polyVerts.size(); +// uint32_t size = oldSize; +// for (uint32_t i = 0; i < size; ++i) +// { +// Nv::Blast::PolyVert& v0 = loop.polyVerts[(i + size - 1) % size]; +// Nv::Blast::PolyVert& v1 = loop.polyVerts[i]; +// Nv::Blast::PolyVert& v2 = loop.polyVerts[(i + 1) % size]; +// if (perpendicularDistanceSquared(cutout.vertices[v0.index], cutout.vertices[v1.index], cutout.vertices[v2.index]) <= tolerance2) +// { +// loop.polyVerts.erase(loop.polyVerts.begin() + i); +// --size; +// --i; +// } +// } +// } +// while (loop.polyVerts.size() != oldSize); +//} + +//static bool decomposeCutoutIntoConvexLoops(Nv::Blast::Cutout& cutout, float cleanupTolerance = 0.0f) +//{ +// const uint32_t size = cutout.vertices.size(); +// +// if (size < 3) +// { +// return false; +// } +// +// // Initialize to one loop, which may not be convex +// cutout.convexLoops.resize(1); +// cutout.convexLoops[0].polyVerts.resize(size); +// +// // See if the winding is ccw: +// +// // Scale to normalized size to avoid overflows +// physx::PxBounds3 bounds; +// bounds.setEmpty(); +// for (uint32_t i = 0; i < size; ++i) +// { +// bounds.include(cutout.vertices[i]); +// } +// physx::PxVec3 center = bounds.getCenter(); +// physx::PxVec3 extent = bounds.getExtents(); +// if (extent[0] < PX_EPS_F32 || extent[1] < PX_EPS_F32) +// { +// return false; +// } +// const physx::PxVec3 scale(1.0f / extent[0], 1.0f / extent[1], 0.0f); +// +// // Find "area" (it will only be correct in sign!) +// physx::PxVec3 prevV = (cutout.vertices[size - 1] - center).multiply(scale); +// float area = 0.0f; +// for (uint32_t i = 0; i < size; ++i) +// { +// const physx::PxVec3 v = (cutout.vertices[i] - center).multiply(scale); +// area += crossZ(prevV, v); +// prevV = v; +// } +// +// if (physx::PxAbs(area) < PX_EPS_F32 * PX_EPS_F32) +// { +// return false; +// } +// +// const bool ccw = area > 0.0f; +// +// for (uint32_t i = 0; i < size; ++i) +// { +// Nv::Blast::PolyVert& vert = cutout.convexLoops[0].polyVerts[i]; +// vert.index = (uint16_t)(ccw ? i : size - i - 1); +// vert.flags = 0; +// } +// +// const float cleanupTolerance2 = square(cleanupTolerance); +// +// // Find reflex vertices +// for (uint32_t i = 0; i < cutout.convexLoops.size();) +// { +// Nv::Blast::ConvexLoop& loop = cutout.convexLoops[i]; +// const uint32_t loopSize = loop.polyVerts.size(); +// if (loopSize <= 3) +// { +// ++i; +// continue; +// } +// uint32_t j = 0; +// for (; j < loopSize; ++j) +// { +// const physx::PxVec3& v0 = cutout.vertices[loop.polyVerts[(j + loopSize - 1) % loopSize].index]; +// const physx::PxVec3& v1 = cutout.vertices[loop.polyVerts[j].index]; +// const physx::PxVec3& v2 = cutout.vertices[loop.polyVerts[(j + 1) % loopSize].index]; +// const physx::PxVec3 e0 = v1 - v0; +// if (crossZ(e0, v2 - v1) < 0.0f) +// { +// // reflex +// break; +// } +// } +// if (j < loopSize) +// { +// // Find a vertex +// float minLen2 = PX_MAX_F32; +// float maxMinDist = -PX_MAX_F32; +// uint32_t kToUse = 0; +// uint32_t mToUse = 2; +// bool cleanSliceFound = false; // A transversal is parallel with an edge +// for (uint32_t k = 0; k < loopSize; ++k) +// { +// const physx::PxVec3& vkPrev = cutout.vertices[loop.polyVerts[(k + loopSize - 1) % loopSize].index]; +// const physx::PxVec3& vk = cutout.vertices[loop.polyVerts[k].index]; +// const physx::PxVec3& vkNext = cutout.vertices[loop.polyVerts[(k + 1) % loopSize].index]; +// const uint32_t mStop = k ? loopSize : loopSize - 1; +// for (uint32_t m = k + 2; m < mStop; ++m) +// { +// const physx::PxVec3& vmPrev = cutout.vertices[loop.polyVerts[(m + loopSize - 1) % loopSize].index]; +// const physx::PxVec3& vm = cutout.vertices[loop.polyVerts[m].index]; +// const physx::PxVec3& vmNext = cutout.vertices[loop.polyVerts[(m + 1) % loopSize].index]; +// const physx::PxVec3 newEdge = vm - vk; +// if (!directionsXYOrderedCCW(vk - vkPrev, newEdge, vkNext - vk) || +// !directionsXYOrderedCCW(vm - vmPrev, -newEdge, vmNext - vm)) +// { +// continue; +// } +// const float len2 = newEdge.magnitudeSquared(); +// float minDist = PX_MAX_F32; +// for (uint32_t l = 0; l < loopSize; ++l) +// { +// const uint32_t l1 = (l + 1) % loopSize; +// if (l == k || l1 == k || l == m || l1 == m) +// { +// continue; +// } +// const physx::PxVec3& vl = cutout.vertices[loop.polyVerts[l].index]; +// const physx::PxVec3& vl1 = cutout.vertices[loop.polyVerts[l1].index]; +// const float dist = segmentsIntersectXY(vl, vl1 - vl, vk, newEdge); +// if (dist < minDist) +// { +// minDist = dist; +// } +// } +// if (minDist <= 0.0f) +// { +// if (minDist > maxMinDist) +// { +// maxMinDist = minDist; +// kToUse = k; +// mToUse = m; +// } +// } +// else +// { +// if (perpendicularDistanceSquared(vkPrev, vk, vm) <= cleanupTolerance2 || +// perpendicularDistanceSquared(vk, vm, vmNext) <= cleanupTolerance2) +// { +// if (!cleanSliceFound) +// { +// minLen2 = len2; +// kToUse = k; +// mToUse = m; +// } +// else +// { +// if (len2 < minLen2) +// { +// minLen2 = len2; +// kToUse = k; +// mToUse = m; +// } +// } +// cleanSliceFound = true; +// } +// else if (!cleanSliceFound && len2 < minLen2) +// { +// minLen2 = len2; +// kToUse = k; +// mToUse = m; +// } +// } +// } +// } +// cutout.convexLoops.push_back(Nv::Blast::ConvexLoop()); +// Nv::Blast::ConvexLoop& newLoop = cutout.convexLoops.back(); +// Nv::Blast::ConvexLoop& oldLoop = cutout.convexLoops[i]; +// newLoop.polyVerts.resize(mToUse - kToUse + 1); +// for (uint32_t n = 0; n <= mToUse - kToUse; ++n) +// { +// newLoop.polyVerts[n] = oldLoop.polyVerts[kToUse + n]; +// } +// newLoop.polyVerts[mToUse - kToUse].flags = 1; // Mark this vertex (and edge that follows) as a split edge +// oldLoop.polyVerts[kToUse].flags = 1; // Mark this vertex (and edge that follows) as a split edge +// oldLoop.polyVerts.erase(oldLoop.polyVerts.begin() + kToUse + 1, oldLoop.polyVerts.begin() + (mToUse - (kToUse + 1))); +// if (cleanupTolerance > 0.0f) +// { +// cleanCutout(cutout, i, cleanupTolerance); +// cleanCutout(cutout, cutout.convexLoops.size() - 1, cleanupTolerance); +// } +// } +// else +// { +// if (cleanupTolerance > 0.0f) +// { +// cleanCutout(cutout, i, cleanupTolerance); +// } +// ++i; +// } +// } +// +// return true; +//} + +static void traceRegion(std::vector& trace, Map2d& regions, Map2d& pathCounts, uint32_t regionIndex, const POINT2D& startPoint) +{ + POINT2D t = startPoint; + trace.clear(); + trace.push_back(t); + ++pathCounts(t.x, t.y); // Increment path count + // Find initial path direction + int32_t dirN; + for (dirN = 1; dirN < 8; ++dirN) //TODO Should we start from dirN = 0? + { + const POINT2D t1 = POINT2D(t.x + taxicabSine(dirN + 2), t.y + taxicabSine(dirN)); + if (regions(t1.x, t1.y) != regionIndex) + { + break; + } + } + bool done = false; + do + { + for (int32_t i = 1; i < 8; ++i) // Skip direction we just came from + { + --dirN; + const POINT2D t1 = POINT2D(t.x + taxicabSine(dirN + 2), t.y + taxicabSine(dirN)); + if (regions(t1.x, t1.y) != regionIndex) + { + if (t1.x == trace[0].x && t1.y == trace[0].y) + { + done = true; + break; + } + trace.push_back(t1); + t = t1; + ++pathCounts(t.x, t.y); // Increment path count + dirN += 4; + break; + } + } + } while (!done && dirN >= 0); + + //NvBlast GWD-399: Try to fix bad corners + int32_t sz = (int32_t)trace.size(); + if (sz > 4) + { + struct CornerPixel + { + int32_t id; + POINT2D p; + CornerPixel(int32_t id, int32_t x, int32_t y) : id(id), p(x, y) { } + }; + std::vector cp; + int32_t xb = 0, yb = 0; //bit buffer stores 1 if value do not changed from preview point and 0 otherwise (5 bits is used) + for (int32_t i = -4; i < sz; i++) //fill buffer with 4 elements from the end of trace + { + //idx, idx - 1, idx - 2, idx - 3 values with correct indexing to trace + int32_t idx = (sz + i) % sz, idx_ = (sz + i - 1) % sz, idx__ = (sz + i - 2) % sz, idx___ = (sz + i - 3) % sz; + //update buffer + xb <<= 1; + yb <<= 1; + xb += (trace[idx].x - trace[idx_].x) == 0; + yb += (trace[idx].y - trace[idx_].y) == 0; + //filter buffer for 11100-00111 or 00111-11100 corner patterns + if (i >= 0 && ((xb & 0x1F) ^ (yb & 0x1F)) == 0x1B) + { + if ((xb & 3) == 3) + { + if (((yb >> 3) & 3) == 3) + { + cp.push_back(CornerPixel(idx__, trace[idx].x, trace[idx___].y)); + } + } + else if ((yb & 3) == 3) + { + if (((xb >> 3) & 3) == 3) + { + cp.push_back(CornerPixel(idx__, trace[idx___].x, trace[idx].y)); + } + } + } + } + std::sort(cp.begin(), cp.end(), [](const CornerPixel& cp1, const CornerPixel& cp2) -> bool + { + return cp1.id > cp2.id; + }); + for (auto it = cp.begin(); it != cp.end(); it++) + { + trace.insert(trace.begin() + it->id, it->p); + ++pathCounts(it->p.x, it->p.y); + } + } +} + +void Nv::Blast::convertTracesToIncremental(std::vector< std::vector* >& traces) +{ + uint32_t cutoutCount = traces.size(); + + std::map> pointToTrace; + for (uint32_t i = 0; i < cutoutCount; i++) + { + auto& trace = *traces[i]; + std::map> segment; + std::map newSegmentIndex; + + for (uint32_t p = 0; p < trace.size(); p++) + { + if (pointToTrace.find(trace[p]) == pointToTrace.end()) + { + pointToTrace[trace[p]] = std::map(); + } + pointToTrace[trace[p]][i] = p; + newSegmentIndex[p] = p; + + for (auto it : pointToTrace[trace[p]]) + { + if (it.first == i) continue; + + if (segment.find(it.first) == segment.end()) + { + segment[it.first] = std::map(); + } + segment[it.first][p] = it.second; + } + } + + for (auto& s : segment) + { + if (s.second.size() < 2) + { + continue; + } + int32_t oldTraceSize = trace.size(); + std::map newTraceIndex; + for (int32_t p = 0; p < oldTraceSize; p++) + { + newTraceIndex[p] = p; + } + + int32_t start = newSegmentIndex[s.second.begin()->first]; + int32_t end = -1, prev = -1; + int32_t deleted = 0; + int32_t insertPoint = start; + //int32_t attachPoint = end; + int32_t otherStart = s.second.begin()->second, otherEnd = s.second.rbegin()->second, otherIncr = 0, otherPrev = -1; + for (auto ss : s.second) + { + if (physx::PxAbs(newTraceIndex[newSegmentIndex[ss.first]] - prev) > 1) + { + if (end >= start) + { + deleted += end - start + 1; + for (int32_t tp = start; tp < end; tp++) + { + newTraceIndex[tp] = -1; + } + for (int32_t tp = end; tp < oldTraceSize; tp++) + { + newTraceIndex[tp] -= end + 1 - start; + //pointToTrace[trace[tp]][i] -= end + 1 - start; + } + trace.erase(trace.begin() + start, trace.begin() + end + 1); + + } + start = newTraceIndex[newSegmentIndex[ss.first]]; + insertPoint = start; + //attachPoint = end; + otherStart = ss.second; + if (otherPrev >= 0) + { + otherEnd = otherPrev; + } + } + else + { + end = newTraceIndex[newSegmentIndex[ss.first]]; + } + if (otherIncr == 0 && otherPrev >= 0 && physx::PxAbs((int32_t)ss.second - otherPrev) == 1) + { + otherIncr = otherPrev - (int32_t)ss.second; + } + prev = newTraceIndex[newSegmentIndex[ss.first]]; + otherPrev = ss.second; + } + if (otherIncr == 0 && physx::PxAbs(otherPrev - (int32_t)s.second.begin()->second) == 1) + { + otherIncr = otherPrev - (int32_t)s.second.begin()->second; + } + NVBLAST_ASSERT(otherIncr != 0); + if (otherIncr == 0) + { + continue; + } + end = (end < start ? trace.size() : end + 1); + trace.erase(trace.begin() + start, trace.begin() + end); + for (int32_t tp = start; tp < end; tp++) + { + newTraceIndex[tp + deleted] = -1; + } + + auto& otherTrace = *traces[s.first]; + std::vector insertSegment; insertSegment.reserve(otherTrace.size()); + int shouldFinish = 2, pIndex = oldTraceSize; + while (shouldFinish != 0) + { + if (shouldFinish == 1) + { + shouldFinish--; + } + insertSegment.push_back(otherTrace[otherStart]); + auto itToOldPoint = pointToTrace[insertSegment.back()].find(i); + if (itToOldPoint != pointToTrace[insertSegment.back()].end()) + { + newTraceIndex[itToOldPoint->second] = insertPoint + insertSegment.size() - 1; + } + else + { + newTraceIndex[pIndex++] = insertPoint + insertSegment.size() - 1; + } + pointToTrace[insertSegment.back()].erase(s.first); + + otherStart = mod(otherStart + otherIncr, otherTrace.size()); + if (otherStart == otherEnd) + { + shouldFinish--; + } + } + + for (int32_t tp = end; tp < oldTraceSize; tp++) + { + if (newTraceIndex[tp] >= 0) + { + newTraceIndex[tp] = newTraceIndex[tp - 1] + 1; + } + } + + trace.insert(trace.begin() + insertPoint, insertSegment.begin(), insertSegment.end()); + + for (auto nti : newTraceIndex) + { + if (nti.second >= 0) + { + pointToTrace[trace[nti.second]][i] = nti.second; + } + } + for (auto& nsi : newSegmentIndex) + { + if (nsi.second >= 0) + { + nsi.second = newTraceIndex[nsi.second]; + } + } + } + } + //TODO: Investigate possible problem - merged trace splits to 2 traces (int, ext) +} + +void Nv::Blast::createCutoutSet(Nv::Blast::CutoutSetImpl& cutoutSet, const uint8_t* pixelBuffer, uint32_t bufferWidth, uint32_t bufferHeight, + float segmentationErrorThreshold, float snapThreshold, bool periodic, bool expandGaps) +{ + cutoutSet.cutouts.clear(); + cutoutSet.periodic = periodic; + cutoutSet.dimensions = physx::PxVec2((float)bufferWidth, (float)bufferHeight); + + if (!periodic) + { + cutoutSet.dimensions[0] += 1.0f; + cutoutSet.dimensions[1] += 1.0f; + } + + if (pixelBuffer == NULL || bufferWidth == 0 || bufferHeight == 0) + { + return; + } + + const int borderPad = periodic ? 0 : 2; // Padded for borders if not periodic + const int originCoord = periodic ? 0 : 1; + + BitMap map(bufferWidth + borderPad, bufferHeight + borderPad, 0); + map.setOrigin((uint32_t)originCoord, (uint32_t)originCoord); + + bool hasBorder = false; + for (uint32_t y = 0; y < bufferHeight; ++y) + { + for (uint32_t x = 0; x < bufferWidth; ++x) + { + const uint32_t pix = 5033165 * (uint32_t)pixelBuffer[0] + 9898557 * (uint32_t)pixelBuffer[1] + 1845494 * (uint32_t)pixelBuffer[2]; + pixelBuffer += 3; + if ((pix >> 28) != 0) + { + map.set((int32_t)x, (int32_t)y); + hasBorder = true; + } + } + } + + // Add borders if not tiling + if (!periodic) + { + for (int32_t x = -1; x <= (int32_t)bufferWidth; ++x) + { + map.set(x, -1); + map.set(x, (int32_t)bufferHeight); + } + for (int32_t y = -1; y <= (int32_t)bufferHeight; ++y) + { + map.set(-1, y); + map.set((int32_t)bufferWidth, y); + } + } + + // Now search for regions + + // Create a region map + Map2d regions(bufferWidth + borderPad, bufferHeight + borderPad, 0xFFFFFFFF); // Initially an invalid value + regions.setOrigin((uint32_t)originCoord, (uint32_t)originCoord); + + // Create a path counting map + Map2d pathCounts(bufferWidth + borderPad, bufferHeight + borderPad, 0); + pathCounts.setOrigin((uint32_t)originCoord, (uint32_t)originCoord); + + // Bump path counts on borders + if (!periodic) + { + for (int32_t x = -1; x <= (int32_t)bufferWidth; ++x) + { + pathCounts(x, -1) = 1; + pathCounts(x, (int32_t)bufferHeight) = 1; + } + for (int32_t y = -1; y <= (int32_t)bufferHeight; ++y) + { + pathCounts(-1, y) = 1; + pathCounts((int32_t)bufferWidth, y) = 1; + } + } + + std::vector stack; + std::vector traceStarts; + std::vector< std::vector* > traces; + + // Initial fill of region maps and path maps + for (int32_t y = 0; y < (int32_t)bufferHeight; ++y) + { + for (int32_t x = 0; x < (int32_t)bufferWidth; ++x) + { + if (map.read(x - 1, y) && !map.read(x, y)) + { + // Found an empty spot next to a filled spot + POINT2D t(x - 1, y); + const uint32_t regionIndex = traceStarts.size(); + traceStarts.push_back(t); // Save off initial point + traces.push_back(new std::vector()); + NVBLAST_ASSERT(traces.size() == traceStarts.size()); // This must be the same size as traceStarts + //traces.back() = (std::vector*)PX_ALLOC(sizeof(std::vector), PX_DEBUG_EXP("CutoutPoint2DSet")); + //new(traces.back()) std::vector; + // Flood fill region map + std::set visited; + stack.push_back(POINT2D(x, y)); +#define COMPRESS(x, y) (((uint64_t)(x) << 32) + (y)) + visited.insert(COMPRESS(x, y)); + do + { + const POINT2D s = stack.back(); + stack.pop_back(); + map.set(s.x, s.y); + regions(s.x, s.y) = regionIndex; + POINT2D n; + for (int32_t i = 0; i < 4; ++i) + { + const int32_t i0 = i & 1; + const int32_t i1 = (i >> 1) & 1; + n.x = s.x + i0 - i1; + n.y = s.y + i0 + i1 - 1; + if (!map.read(n.x, n.y) && visited.find(COMPRESS(n.x, n.y)) == visited.end()) + { + stack.push_back(n); + visited.insert(COMPRESS(n.x, n.y)); + } + } + } while (stack.size()); +#undef COMPRESS + // Trace region + PX_ASSERT(map.read(t.x, t.y)); + std::vector& trace = *traces[regionIndex]; + traceRegion(trace, regions, pathCounts, regionIndex, t); + } + } + } + + uint32_t cutoutCount = traces.size(); + + //find internal traces + + // Now expand regions until the paths completely overlap + if (expandGaps) + { + bool somePathChanged; + int sanityCounter = 1000; + bool abort = false; + do + { + somePathChanged = false; + for (uint32_t i = 0; i < cutoutCount; ++i) + { + bool pathChanged = false; + std::vector& trace = *traces[i]; + for (uint32_t j = 0; j < trace.size(); ++j) + { + const POINT2D& t = trace[j]; + if (pathCounts(t.x, t.y) == 1) + { + regions(t.x, t.y) = i; + pathChanged = true; + } + } + if (pathChanged) + { + // Recalculate cutout + // Decrement pathCounts + for (uint32_t j = 0; j < trace.size(); ++j) + { + const POINT2D& t = trace[j]; + --pathCounts(t.x, t.y); + } + // Erase trace + // Calculate new start point + POINT2D& t = traceStarts[i]; + int stop = (int)cutoutSet.dimensions.x; + while (regions(t.x, t.y) == i) + { + --t.x; + if (--stop < 0) + { + // There is an error; abort + break; + } + } + if (stop < 0) + { + // Release traces and abort + abort = true; + somePathChanged = false; + break; + } + traceRegion(trace, regions, pathCounts, i, t); + somePathChanged = true; + } + } + if (--sanityCounter <= 0) + { + abort = true; + break; + } + } while (somePathChanged); + + if (abort) + { + for (uint32_t i = 0; i < cutoutCount; ++i) + { + traces[i]->~vector(); + delete traces[i]; + } + cutoutCount = 0; + } + + convertTracesToIncremental(traces); + } + + // Create cutouts + cutoutSet.cutouts.resize(cutoutCount); + for (uint32_t i = 0; i < cutoutCount; ++i) + { + createCutout(cutoutSet.cutouts[i], *traces[i], segmentationErrorThreshold, snapThreshold, bufferWidth, bufferHeight, !cutoutSet.periodic); + } + + simplifyCutoutSetImpl(cutoutSet, snapThreshold, bufferWidth, bufferHeight); + + // Release traces + for (uint32_t i = 0; i < cutoutCount; ++i) + { + traces[i]->~vector(); + delete traces[i]; + } + + // Decompose each cutout in the set into convex loops + //uint32_t cutoutSetSize = 0; + //for (uint32_t i = 0; i < cutoutSet.cutouts.size(); ++i) + //{ + // bool success = decomposeCutoutIntoConvexLoops(cutoutSet.cutouts[i]); + // if (success) + // { + // if (cutoutSetSize != i) + // { + // cutoutSet.cutouts[cutoutSetSize] = cutoutSet.cutouts[i]; + // } + // ++cutoutSetSize; + // } + //} + //cutoutSet.cutouts.resize(cutoutSetSize); + + //Check if single cutout spread to the whole area (no need to cutout then) + if (cutoutSet.cutouts.size() == 1 && (expandGaps || !hasBorder)) + { + cutoutSet.cutouts.clear(); + } +} + +class Matrix22 +{ +public: + //! Default constructor + Matrix22() + {} + + //! Construct from two base vectors + Matrix22(const physx::PxVec2& col0, const physx::PxVec2& col1) + : column0(col0), column1(col1) + {} + + //! Construct from float[4] + explicit Matrix22(float values[]): + column0(values[0],values[1]), + column1(values[2],values[3]) + { + } + + //! Copy constructor + Matrix22(const Matrix22& other) + : column0(other.column0), column1(other.column1) + {} + + //! Assignment operator + Matrix22& operator=(const Matrix22& other) + { + column0 = other.column0; + column1 = other.column1; + return *this; + } + + //! Set to identity matrix + static Matrix22 createIdentity() + { + return Matrix22(physx::PxVec2(1,0), physx::PxVec2(0,1)); + } + + //! Set to zero matrix + static Matrix22 createZero() + { + return Matrix22(physx::PxVec2(0.0f), physx::PxVec2(0.0f)); + } + + //! Construct from diagonal, off-diagonals are zero. + static Matrix22 createDiagonal(const physx::PxVec2& d) + { + return Matrix22(physx::PxVec2(d.x,0.0f), physx::PxVec2(0.0f,d.y)); + } + + + //! Get transposed matrix + Matrix22 getTranspose() const + { + const physx::PxVec2 v0(column0.x, column1.x); + const physx::PxVec2 v1(column0.y, column1.y); + + return Matrix22(v0,v1); + } + + //! Get the real inverse + Matrix22 getInverse() const + { + const float det = getDeterminant(); + Matrix22 inverse; + + if(det != 0) + { + const float invDet = 1.0f/det; + + inverse.column0[0] = invDet * column1[1]; + inverse.column0[1] = invDet * (-column0[1]); + + inverse.column1[0] = invDet * (-column1[0]); + inverse.column1[1] = invDet * column0[0]; + + return inverse; + } + else + { + return createIdentity(); + } + } + + //! Get determinant + float getDeterminant() const + { + return column0[0] * column1[1] - column0[1] * column1[0]; + } + + //! Unary minus + Matrix22 operator-() const + { + return Matrix22(-column0, -column1); + } + + //! Add + Matrix22 operator+(const Matrix22& other) const + { + return Matrix22( column0+other.column0, + column1+other.column1); + } + + //! Subtract + Matrix22 operator-(const Matrix22& other) const + { + return Matrix22( column0-other.column0, + column1-other.column1); + } + + //! Scalar multiplication + Matrix22 operator*(float scalar) const + { + return Matrix22(column0*scalar, column1*scalar); + } + + //! Matrix vector multiplication (returns 'this->transform(vec)') + physx::PxVec2 operator*(const physx::PxVec2& vec) const + { + return transform(vec); + } + + //! Matrix multiplication + Matrix22 operator*(const Matrix22& other) const + { + //Rows from this columns from other + //column0 = transform(other.column0) etc + return Matrix22(transform(other.column0), transform(other.column1)); + } + + // a = b operators + + //! Equals-add + Matrix22& operator+=(const Matrix22& other) + { + column0 += other.column0; + column1 += other.column1; + return *this; + } + + //! Equals-sub + Matrix22& operator-=(const Matrix22& other) + { + column0 -= other.column0; + column1 -= other.column1; + return *this; + } + + //! Equals scalar multiplication + Matrix22& operator*=(float scalar) + { + column0 *= scalar; + column1 *= scalar; + return *this; + } + + //! Element access, mathematical way! + float operator()(unsigned int row, unsigned int col) const + { + return (*this)[col][(int)row]; + } + + //! Element access, mathematical way! + float& operator()(unsigned int row, unsigned int col) + { + return (*this)[col][(int)row]; + } + + // Transform etc + + //! Transform vector by matrix, equal to v' = M*v + physx::PxVec2 transform(const physx::PxVec2& other) const + { + return column0*other.x + column1*other.y; + } + + physx::PxVec2& operator[](unsigned int num) {return (&column0)[num];} + const physx::PxVec2& operator[](unsigned int num) const {return (&column0)[num];} + + //Data, see above for format! + + physx::PxVec2 column0, column1; //the two base vectors +}; + +PX_INLINE bool calculateUVMapping(const Nv::Blast::Triangle& triangle, physx::PxMat33& theResultMapping) +{ + physx::PxMat33 rMat; + physx::PxMat33 uvMat; + for (unsigned col = 0; col < 3; ++col) + { + auto v = triangle.getVertex(col); + rMat[col] = v.p; + uvMat[col] = physx::PxVec3(v.uv[0][0], v.uv[0][1], 1.0f); + } + + if (uvMat.getDeterminant() == 0.0f) + { + return false; + } + + theResultMapping = rMat*uvMat.getInverse(); + + return true; +} + +//static bool calculateUVMapping(ExplicitHierarchicalMesh& theHMesh, const physx::PxVec3& theDir, physx::PxMat33& theResultMapping) +//{ +// physx::PxVec3 cutoutDir( theDir ); +// cutoutDir.normalize( ); +// +// const float cosineThreshold = physx::PxCos(3.141593f / 180); // 1 degree +// +// ExplicitRenderTriangle* triangleToUse = NULL; +// float greatestCosine = -PX_MAX_F32; +// float greatestArea = 0.0f; // for normals within the threshold +// for ( uint32_t partIndex = 0; partIndex < theHMesh.partCount(); ++partIndex ) +// { +// ExplicitRenderTriangle* theTriangles = theHMesh.meshTriangles( partIndex ); +// uint32_t triangleCount = theHMesh.meshTriangleCount( partIndex ); +// for ( uint32_t tIndex = 0; tIndex < triangleCount; ++tIndex ) +// { +// ExplicitRenderTriangle& theTriangle = theTriangles[tIndex]; +// physx::PxVec3 theEdge1 = theTriangle.vertices[1].position - theTriangle.vertices[0].position; +// physx::PxVec3 theEdge2 = theTriangle.vertices[2].position - theTriangle.vertices[0].position; +// physx::PxVec3 theNormal = theEdge1.cross( theEdge2 ); +// float theArea = theNormal.normalize(); // twice the area, but that's ok +// +// if (theArea == 0.0f) +// { +// continue; +// } +// +// const float cosine = cutoutDir.dot(theNormal); +// +// if (cosine < cosineThreshold) +// { +// if (cosine > greatestCosine && greatestArea == 0.0f) +// { +// greatestCosine = cosine; +// triangleToUse = &theTriangle; +// } +// } +// else +// { +// if (theArea > greatestArea) +// { +// greatestArea = theArea; +// triangleToUse = &theTriangle; +// } +// } +// } +// } +// +// if (triangleToUse == NULL) +// { +// return false; +// } +// +// return calculateUVMapping(*triangleToUse, theResultMapping); +//} + + + +//bool calculateCutoutUVMapping(ExplicitHierarchicalMesh& hMesh, const physx::PxVec3& targetDirection, physx::PxMat33& theMapping) +//{ +// return ::calculateUVMapping(hMesh, targetDirection, theMapping); +//} + +//bool calculateCutoutUVMapping(const Nv::Blast::Triangle& targetDirection, physx::PxMat33& theMapping) +//{ +// return ::calculateUVMapping(targetDirection, theMapping); +//} + + diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h b/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h new file mode 100644 index 0000000..6824291 --- /dev/null +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.h @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION and its licensors retain all intellectual property +* and proprietary rights in and to this software, related documentation +* and any modifications thereto. Any use, reproduction, disclosure or +* distribution of this software and related documentation without an express +* license agreement from NVIDIA CORPORATION is strictly prohibited. +*/ + + +#ifndef NVBLASTAUTHORINGFCUTOUTIMPL_H +#define NVBLASTAUTHORINGFCUTOUTIMPL_H + +#include "NvBlastExtAuthoringCutout.h" +#include +#include "PxMat44.h" // TODO Should replace? + +namespace Nv +{ +namespace Blast +{ + +struct PolyVert +{ + uint16_t index; + uint16_t flags; +}; + +struct ConvexLoop +{ + std::vector polyVerts; +}; + +struct Cutout +{ + std::vector vertices; + std::vector convexLoops; +}; + +struct POINT2D +{ + POINT2D() {} + POINT2D(int32_t _x, int32_t _y) : x(_x), y(_y) {} + + int32_t x; + int32_t y; + + bool operator==(const POINT2D& other) const + { + return x == other.x && y == other.y; + } + bool operator<(const POINT2D& other) const + { + if (x == other.x) return y < other.y; + return x < other.x; + } +}; + +void convertTracesToIncremental(std::vector< std::vector* >& traces); + +struct CutoutSetImpl : public CutoutSet +{ + CutoutSetImpl() : periodic(false), dimensions(0.0f) + { + } + + uint32_t getCutoutCount() const + { + return (uint32_t)cutouts.size(); + } + + uint32_t getCutoutVertexCount(uint32_t cutoutIndex) const + { + return (uint32_t)cutouts[cutoutIndex].vertices.size(); + } + uint32_t getCutoutLoopCount(uint32_t cutoutIndex) const + { + return (uint32_t)cutouts[cutoutIndex].convexLoops.size(); + } + + const physx::PxVec3& getCutoutVertex(uint32_t cutoutIndex, uint32_t vertexIndex) const + { + return cutouts[cutoutIndex].vertices[vertexIndex]; + } + + uint32_t getCutoutLoopSize(uint32_t cutoutIndex, uint32_t loopIndex) const + { + return (uint32_t)cutouts[cutoutIndex].convexLoops[loopIndex].polyVerts.size(); + } + + uint32_t getCutoutLoopVertexIndex(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const + { + return cutouts[cutoutIndex].convexLoops[loopIndex].polyVerts[vertexNum].index; + } + uint32_t getCutoutLoopVertexFlags(uint32_t cutoutIndex, uint32_t loopIndex, uint32_t vertexNum) const + { + return cutouts[cutoutIndex].convexLoops[loopIndex].polyVerts[vertexNum].flags; + } + bool isPeriodic() const + { + return periodic; + } + const physx::PxVec2& getDimensions() const + { + return dimensions; + } + + //void serialize(physx::PxFileBuf& stream) const; + //void deserialize(physx::PxFileBuf& stream); + + void release() + { + delete this; + } + + std::vector cutouts; + bool periodic; + physx::PxVec2 dimensions; +}; + +void createCutoutSet(Nv::Blast::CutoutSetImpl& cutoutSet, const uint8_t* pixelBuffer, uint32_t bufferWidth, uint32_t bufferHeight, + float segmentationErrorThreshold, float snapThreshold, bool periodic, bool expandGaps); + + +} // namespace Blast +} // namespace Nv + +#endif // ifndef NVBLASTAUTHORINGFCUTOUTIMPL_H diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp index 2b1cb65..9074b8c 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.cpp @@ -23,12 +23,24 @@ #include "NvBlastExtAuthoringTriangulator.h" #include "NvBlastExtAuthoringBooleanTool.h" #include "NvBlastExtAuthoringAccelerator.h" +#include "NvBlastExtAuthoringCutout.h" #include "NvBlast.h" #include "NvBlastGlobals.h" #include "NvBlastExtAuthoringPerlinNoise.h" #include using namespace physx; +#ifndef SAFE_DELETE +#define SAFE_DELETE(p) \ + { \ + if(p) \ + { \ + delete (p); \ + (p) = NULL; \ + } \ + } +#endif + #define DEFAULT_BB_ACCELARATOR_RES 10 #define SLICING_INDEXER_OFFSET (1ll << 32) @@ -421,6 +433,7 @@ int32_t FractureToolImpl::voronoiFracturing(uint32_t chunkId, uint32_t cellCount if (resultMesh) { mChunkData.push_back(ChunkInfo()); + mChunkData.back().isChanged = true; mChunkData.back().isLeaf = true; mChunkData.back().meshData = resultMesh; mChunkData.back().parent = parentChunk; @@ -601,6 +614,7 @@ int32_t FractureToolImpl::voronoiFracturing(uint32_t chunkId, uint32_t cellCount { mChunkData.push_back(ChunkInfo()); mChunkData.back().isLeaf = true; + mChunkData.back().isChanged = true; mChunkData.back().meshData = resultMesh; mChunkData.back().parent = parentChunk; mChunkData.back().chunkId = mChunkIdCounter++; @@ -627,9 +641,9 @@ int32_t FractureToolImpl::voronoiFracturing(uint32_t chunkId, uint32_t cellCount return 0; } -int32_t FractureToolImpl::slicing(uint32_t chunkId, SlicingConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) +int32_t FractureToolImpl::slicing(uint32_t chunkId, const SlicingConfiguration& conf, bool replaceChunk, RandomGeneratorBase* rnd) { - if (conf.noiseAmplitude != 0) + if (conf.noise.amplitude != 0) { return slicingNoisy(chunkId, conf, replaceChunk, rnd); } @@ -676,6 +690,7 @@ int32_t FractureToolImpl::slicing(uint32_t chunkId, SlicingConfiguration conf, b ChunkInfo ch; ch.isLeaf = true; + ch.isChanged = true; ch.parent = replaceChunk ? mChunkData[chunkIndex].parent : chunkId; std::vector xSlicedChunks; std::vector ySlicedChunks; @@ -816,7 +831,7 @@ int32_t FractureToolImpl::slicing(uint32_t chunkId, SlicingConfiguration conf, b return 0; } -int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) +int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, const SlicingConfiguration& conf, bool replaceChunk, RandomGeneratorBase* rnd) { if (replaceChunk && chunkId == 0) { @@ -860,6 +875,7 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co ChunkInfo ch; ch.isLeaf = true; + ch.isChanged = true; ch.parent = replaceChunk ? mChunkData[chunkIndex].parent : chunkId; std::vector xSlicedChunks; std::vector ySlicedChunks; @@ -873,7 +889,7 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co { PxVec3 randVect = PxVec3(2 * rnd->getRandomValue() - 1, 2 * rnd->getRandomValue() - 1, 2 * rnd->getRandomValue() - 1); PxVec3 lDir = dir + randVect * conf.angle_variations; - slBox = getNoisyCuttingBoxPair(center, lDir, 40, noisyPartSize, conf.surfaceResolution, mPlaneIndexerOffset, conf.noiseAmplitude, conf.noiseFrequency, conf.noiseOctaveNumber, rnd->getRandomValue(), mInteriorMaterialId); + slBox = getNoisyCuttingBoxPair(center, lDir, 40, noisyPartSize, conf.noise.surfaceResolution, mPlaneIndexerOffset + SLICING_INDEXER_OFFSET, conf.noise.amplitude, conf.noise.frequency, conf.noise.octaveNumber, rnd->getRandomValue(), mInteriorMaterialId); // DummyAccelerator accel(mesh->getFacetCount()); SweepingAccelerator accel(mesh); SweepingAccelerator dummy(slBox); @@ -883,7 +899,7 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co { xSlicedChunks.push_back(ch); } - inverseNormalAndSetIndices(slBox, -mPlaneIndexerOffset); + inverseNormalAndSetIndices(slBox, -(mPlaneIndexerOffset + SLICING_INDEXER_OFFSET)); ++mPlaneIndexerOffset; bTool.performBoolean(mesh, slBox, &accel, &dummy, BooleanConfigurations::BOOLEAN_INTERSECION()); Mesh* result = bTool.createNewMesh(); @@ -915,7 +931,7 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co PxVec3 randVect = PxVec3(2 * rnd->getRandomValue() - 1, 2 * rnd->getRandomValue() - 1, 2 * rnd->getRandomValue() - 1); PxVec3 lDir = dir + randVect * conf.angle_variations; - slBox = getNoisyCuttingBoxPair(center, lDir, 40, noisyPartSize, conf.surfaceResolution, mPlaneIndexerOffset, conf.noiseAmplitude, conf.noiseFrequency, conf.noiseOctaveNumber, rnd->getRandomValue(), mInteriorMaterialId); + slBox = getNoisyCuttingBoxPair(center, lDir, 40, noisyPartSize, conf.noise.surfaceResolution, mPlaneIndexerOffset + SLICING_INDEXER_OFFSET, conf.noise.amplitude, conf.noise.frequency, conf.noise.octaveNumber, rnd->getRandomValue(), mInteriorMaterialId); // DummyAccelerator accel(mesh->getFacetCount()); SweepingAccelerator accel(mesh); SweepingAccelerator dummy(slBox); @@ -925,7 +941,7 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co { ySlicedChunks.push_back(ch); } - inverseNormalAndSetIndices(slBox, -mPlaneIndexerOffset); + inverseNormalAndSetIndices(slBox, -(mPlaneIndexerOffset + SLICING_INDEXER_OFFSET)); ++mPlaneIndexerOffset; bTool.performBoolean(mesh, slBox, &accel, &dummy, BooleanConfigurations::BOOLEAN_INTERSECION()); Mesh* result = bTool.createNewMesh(); @@ -956,7 +972,7 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co { PxVec3 randVect = PxVec3(2 * rnd->getRandomValue() - 1, 2 * rnd->getRandomValue() - 1, 2 * rnd->getRandomValue() - 1); PxVec3 lDir = dir + randVect * conf.angle_variations; - slBox = getNoisyCuttingBoxPair(center, lDir, 40, noisyPartSize, conf.surfaceResolution, mPlaneIndexerOffset, conf.noiseAmplitude, conf.noiseFrequency, conf.noiseOctaveNumber, rnd->getRandomValue(), mInteriorMaterialId); + slBox = getNoisyCuttingBoxPair(center, lDir, 40, noisyPartSize, conf.noise.surfaceResolution, mPlaneIndexerOffset + SLICING_INDEXER_OFFSET, conf.noise.amplitude, conf.noise.frequency, conf.noise.octaveNumber, rnd->getRandomValue(), mInteriorMaterialId); // DummyAccelerator accel(mesh->getFacetCount()); SweepingAccelerator accel(mesh); SweepingAccelerator dummy(slBox); @@ -968,7 +984,7 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co mChunkData.push_back(ch); newlyCreatedChunksIds.push_back(ch.chunkId); } - inverseNormalAndSetIndices(slBox, -mPlaneIndexerOffset); + inverseNormalAndSetIndices(slBox, -(mPlaneIndexerOffset + SLICING_INDEXER_OFFSET)); ++mPlaneIndexerOffset; bTool.performBoolean(mesh, slBox, &accel, &dummy, BooleanConfigurations::BOOLEAN_INTERSECION()); Mesh* result = bTool.createNewMesh(); @@ -1008,8 +1024,184 @@ int32_t FractureToolImpl::slicingNoisy(uint32_t chunkId, SlicingConfiguration co return 0; } +int32_t FractureToolImpl::cut(uint32_t chunkId, const physx::PxVec3& normal, const physx::PxVec3& point, const NoiseConfiguration& noise, bool replaceChunk, RandomGeneratorBase* rnd) +{ + if (replaceChunk && chunkId == 0) + { + return 1; + } + + int32_t chunkIndex = getChunkIndex(chunkId); + if (chunkIndex == -1) + { + return 1; + } + if (!mChunkData[chunkIndex].isLeaf) + { + deleteAllChildrenOfChunk(chunkId); + } + chunkIndex = getChunkIndex(chunkId); + + Mesh* mesh = new MeshImpl(*reinterpret_cast (mChunkData[chunkIndex].meshData)); + BooleanEvaluator bTool; + + ChunkInfo ch; + ch.chunkId = -1; + ch.isLeaf = true; + ch.isChanged = true; + ch.parent = replaceChunk ? mChunkData[chunkIndex].parent : chunkId; + float noisyPartSize = 1.2f; + + // Perform cut + Mesh* slBox = getNoisyCuttingBoxPair((point - mOffset) / mScaleFactor, normal, 40, noisyPartSize, noise.surfaceResolution, mPlaneIndexerOffset + SLICING_INDEXER_OFFSET, noise.amplitude, noise.frequency, noise.octaveNumber, rnd->getRandomValue(), mInteriorMaterialId); + SweepingAccelerator accel(mesh); + SweepingAccelerator dummy(slBox); + bTool.performBoolean(mesh, slBox, &accel, &dummy, BooleanConfigurations::BOOLEAN_DIFFERENCE()); + ch.meshData = bTool.createNewMesh(); + inverseNormalAndSetIndices(slBox, -(mPlaneIndexerOffset + SLICING_INDEXER_OFFSET)); + ++mPlaneIndexerOffset; + bTool.performBoolean(mesh, slBox, &accel, &dummy, BooleanConfigurations::BOOLEAN_INTERSECION()); + Mesh* result = bTool.createNewMesh(); + delete slBox; + delete mesh; + mesh = result; + + if (mesh == 0) //Return if it doesn't cut specified chunk + { + return 1; + } + + if (!mChunkData[chunkIndex].isLeaf) + { + deleteAllChildrenOfChunk(chunkId); + } + chunkIndex = getChunkIndex(chunkId); + + int32_t firstChunkId = -1; + if (ch.meshData != 0) + { + ch.chunkId = mChunkIdCounter++; + mChunkData.push_back(ch); + firstChunkId = ch.chunkId; + } + if (mesh != 0) + { + ch.chunkId = mChunkIdCounter++; + ch.meshData = mesh; + mChunkData.push_back(ch); + } + + mChunkData[chunkIndex].isLeaf = false; + if (replaceChunk) + { + eraseChunk(chunkId); + } + + if (mRemoveIslands && firstChunkId >= 0) + { + islandDetectionAndRemoving(firstChunkId); + if (mesh != 0) + { + islandDetectionAndRemoving(ch.chunkId); + } + } + + return 0; +} + +int32_t FractureToolImpl::cutout(uint32_t chunkId, CutoutConfiguration conf, bool replaceChunk, RandomGeneratorBase* /*rnd*/) +{ + if (replaceChunk && chunkId == 0) + { + return 1; + } + + int32_t chunkIndex = getChunkIndex(chunkId); + if (chunkIndex == -1) + { + return 1; + } + if (!mChunkData[chunkIndex].isLeaf) + { + deleteAllChildrenOfChunk(chunkId); + } + chunkIndex = getChunkIndex(chunkId); + Nv::Blast::CutoutSet& cutoutSet = *conf.cutoutSet; + + Mesh* mesh = new MeshImpl(*reinterpret_cast (mChunkData[chunkIndex].meshData)); + float extrusionLength = mesh->getBoundingBox().getDimensions().magnitude(); + auto scale = conf.scale / mScaleFactor; + conf.transform.p = (conf.transform.p - mOffset) / mScaleFactor; + if (scale.x < 0.f || scale.y < 0.f) + { + scale = physx::PxVec2(extrusionLength); + } + if (conf.isRelativeTransform) + { + conf.transform.p += mesh->getBoundingBox().getCenter() / mScaleFactor; + } + float xDim = cutoutSet.getDimensions().x; + float yDim = cutoutSet.getDimensions().y; + + BooleanEvaluator bTool; + ChunkInfo ch; + ch.isLeaf = true; + ch.isChanged = true; + ch.parent = replaceChunk ? mChunkData[chunkIndex].parent : chunkId; + std::vector newlyCreatedChunksIds; + + for (uint32_t c = 0; c < cutoutSet.getCutoutCount(); c++) + { + uint32_t vertCount = cutoutSet.getCutoutVertexCount(c); + std::vector verts(vertCount); + for (uint32_t v = 0; v < vertCount; v++) + { + auto vert = cutoutSet.getCutoutVertex(c, v); + vert.x = (vert.x / xDim - 0.5f) * scale.x; + vert.y = (vert.y / yDim - 0.5f) * scale.y; + verts[v] = vert; + } + Mesh* cutoutMesh = getCuttingCylinder(verts.size(), verts.data(), conf.transform, 2.f * extrusionLength, mPlaneIndexerOffset + SLICING_INDEXER_OFFSET, mInteriorMaterialId); + SweepingAccelerator accel(mesh); + SweepingAccelerator dummy(cutoutMesh); + bTool.performBoolean(mesh, cutoutMesh, &accel, &dummy, BooleanConfigurations::BOOLEAN_INTERSECION()); + ch.meshData = bTool.createNewMesh(); + if (ch.meshData != 0) + { + ch.chunkId = mChunkIdCounter++; + newlyCreatedChunksIds.push_back(ch.chunkId); + mChunkData.push_back(ch); + } + inverseNormalAndSetIndices(cutoutMesh, -(mPlaneIndexerOffset++ + SLICING_INDEXER_OFFSET)); + bTool.performBoolean(mesh, cutoutMesh, &accel, &dummy, BooleanConfigurations::BOOLEAN_DIFFERENCE()); + Mesh* result = bTool.createNewMesh(); + delete mesh; + mesh = result; + if (mesh == nullptr) + { + break; + } + SAFE_DELETE(cutoutMesh) + } + SAFE_DELETE(mesh); + mChunkData[chunkIndex].isLeaf = false; + if (replaceChunk) + { + eraseChunk(chunkId); + } + + if (mRemoveIslands) + { + for (auto chunkToCheck : newlyCreatedChunksIds) + { + islandDetectionAndRemoving(chunkToCheck); + } + } + + return 0; +} int32_t FractureToolImpl::getChunkIndex(int32_t chunkId) { @@ -1133,6 +1325,7 @@ int32_t FractureToolImpl::setChunkMesh(const Mesh* meshInput, int32_t parentId) chunk.meshData = new MeshImpl(*reinterpret_cast (meshInput)); chunk.parent = parentId; chunk.isLeaf = true; + chunk.isChanged = true; if ((size_t)parentId < mChunkData.size()) { mChunkData[parentId].isLeaf = false; @@ -1153,10 +1346,12 @@ int32_t FractureToolImpl::setChunkMesh(const Mesh* meshInput, int32_t parentId) mesh->getBoundingBoxWritable().minimum = (mesh->getBoundingBox().minimum - mOffset) * (1.0f / mScaleFactor); mesh->getBoundingBoxWritable().maximum = (mesh->getBoundingBox().maximum - mOffset) * (1.0f / mScaleFactor); - - for (uint32_t i = 0; i < mesh->getFacetCount(); ++i) + if (parentId == -1) // We are setting root mesh. Set all facets as boundary. { - mesh->getFacetWritable(i)->userData = 0; // Mark facet as initial boundary facet + for (uint32_t i = 0; i < mesh->getFacetCount(); ++i) + { + mesh->getFacetWritable(i)->userData = 0; // Mark facet as initial boundary facet + } } return chunk.chunkId; @@ -1244,20 +1439,39 @@ bool FractureToolImpl::deleteAllChildrenOfChunk(int32_t chunkId) void FractureToolImpl::finalizeFracturing() { - for (uint32_t i = 0; i < mChunkPostprocessors.size(); ++i) + std::vector oldTriangulators = mChunkPostprocessors; + std::map chunkIdToTriangulator; + std::set newChunkMask; + for (uint32_t i = 0; i < oldTriangulators.size(); ++i) { - delete mChunkPostprocessors[i]; + chunkIdToTriangulator[oldTriangulators[i]->getParentChunkId()] = i; } + mChunkPostprocessors.clear(); mChunkPostprocessors.resize(mChunkData.size()); + newChunkMask.insert(0xffffffff); // To trigger masking mode, if newChunkMask will happen to be empty, all UVs will be updated. for (uint32_t i = 0; i < mChunkPostprocessors.size(); ++i) { - mChunkPostprocessors[i] = new Triangulator(); + + auto it = chunkIdToTriangulator.find(mChunkData[i].chunkId); + if (mChunkData[i].isChanged || it == chunkIdToTriangulator.end()) + { + if (it != chunkIdToTriangulator.end()) + { + delete oldTriangulators[it->second]; + oldTriangulators[it->second] = nullptr; + } + mChunkPostprocessors[i] = new Triangulator(); + mChunkPostprocessors[i]->triangulate(mChunkData[i].meshData); + mChunkPostprocessors[i]->getParentChunkId() = mChunkData[i].chunkId; + newChunkMask.insert(mChunkData[i].chunkId); + mChunkData[i].isChanged = false; + } + else + { + mChunkPostprocessors[i] = oldTriangulators[it->second]; + } } - for (uint32_t i = 0; i < mChunkPostprocessors.size(); ++i) - { - mChunkPostprocessors[i]->triangulate(mChunkData[i].meshData); - } std::vector badOnes; for (uint32_t i = 0; i < mChunkPostprocessors.size(); ++i) { @@ -1279,7 +1493,7 @@ void FractureToolImpl::finalizeFracturing() std::swap(mChunkData[badOnes[i]], mChunkData.back()); mChunkData.pop_back(); } - + fitAllUvToRect(1.0f, newChunkMask); } uint32_t FractureToolImpl::getChunkCount() const @@ -1287,9 +1501,9 @@ uint32_t FractureToolImpl::getChunkCount() const return (uint32_t)mChunkData.size(); } -const ChunkInfo& FractureToolImpl::getChunkInfo(int32_t chunkId) +const ChunkInfo& FractureToolImpl::getChunkInfo(int32_t chunkIndex) { - return mChunkData[chunkId]; + return mChunkData[chunkIndex]; } uint32_t FractureToolImpl::getBaseMesh(int32_t chunkIndex, Triangle*& output) @@ -1299,7 +1513,7 @@ uint32_t FractureToolImpl::getBaseMesh(int32_t chunkIndex, Triangle*& output) { return 0; // finalizeFracturing() should be called before getting mesh! } - auto baseMesh = mChunkPostprocessors[chunkIndex]->getBaseMesh(); + auto& baseMesh = mChunkPostprocessors[chunkIndex]->getBaseMesh(); output = new Triangle[baseMesh.size()]; memcpy(output, baseMesh.data(), baseMesh.size() * sizeof(Triangle)); @@ -1316,6 +1530,29 @@ uint32_t FractureToolImpl::getBaseMesh(int32_t chunkIndex, Triangle*& output) return baseMesh.size(); } +uint32_t FractureToolImpl::updateBaseMesh(int32_t chunkIndex, Triangle* output) +{ + NVBLAST_ASSERT(mChunkPostprocessors.size() > 0); + if (mChunkPostprocessors.size() == 0) + { + return 0; // finalizeFracturing() should be called before getting mesh! + } + auto& baseMesh = mChunkPostprocessors[chunkIndex]->getBaseMesh(); + memcpy(output, baseMesh.data(), baseMesh.size() * sizeof(Triangle)); + + /* Scale mesh back */ + + for (uint32_t i = 0; i < baseMesh.size(); ++i) + { + Triangle& triangle = output[i]; + triangle.a.p = triangle.a.p * mScaleFactor + mOffset; + triangle.b.p = triangle.b.p * mScaleFactor + mOffset; + triangle.c.p = triangle.c.p * mScaleFactor + mOffset; + } + return baseMesh.size(); +} + + float getVolume(std::vector& triangles) { float volume = 0.0f; @@ -1682,9 +1919,116 @@ uint32_t FractureToolImpl::createNewChunk(uint32_t parent) mChunkData.back().chunkId = mChunkIdCounter++; mChunkData.back().meshData = nullptr; mChunkData.back().isLeaf = false; + mChunkData.back().isChanged = true; return mChunkData.size() - 1; } + +void FractureToolImpl::fitUvToRect(float side, uint32_t chunk) +{ + int32_t index = getChunkIndex(chunk); + if (mChunkPostprocessors.empty()) // It seems finalize have not been called, call it here. + { + finalizeFracturing(); + } + if (index == -1 || (int32_t)mChunkPostprocessors.size() <= index) + { + return; // We dont have such chunk tringulated; + } + PxBounds3 bnd; + bnd.setEmpty(); + + std::vector& ctrs = mChunkPostprocessors[index]->getBaseMesh(); + std::vector& output = mChunkPostprocessors[index]->getBaseMesh(); + + for (uint32_t trn = 0; trn < ctrs.size(); ++trn) + { + if (ctrs[trn].userData == 0) continue; + bnd.include(PxVec3(ctrs[trn].a.uv[0].x, ctrs[trn].a.uv[0].y, 0.0f)); + bnd.include(PxVec3(ctrs[trn].b.uv[0].x, ctrs[trn].b.uv[0].y, 0.0f)); + bnd.include(PxVec3(ctrs[trn].c.uv[0].x, ctrs[trn].c.uv[0].y, 0.0f)); + } + + float xscale = side / (bnd.maximum.x - bnd.minimum.x); + float yscale = side / (bnd.maximum.y - bnd.minimum.y); + xscale = std::min(xscale, yscale); // To have uniform scaling + + for (uint32_t trn = 0; trn < ctrs.size(); ++trn) + { + if (ctrs[trn].userData == 0) continue; + output[trn].a.uv[0].x = (ctrs[trn].a.uv[0].x - bnd.minimum.x) * xscale; + output[trn].b.uv[0].x = (ctrs[trn].b.uv[0].x - bnd.minimum.x) * xscale; + output[trn].c.uv[0].x = (ctrs[trn].c.uv[0].x - bnd.minimum.x) * xscale; + + output[trn].a.uv[0].y = (ctrs[trn].a.uv[0].y - bnd.minimum.y) * xscale; + output[trn].b.uv[0].y = (ctrs[trn].b.uv[0].y - bnd.minimum.y) * xscale; + output[trn].c.uv[0].y = (ctrs[trn].c.uv[0].y - bnd.minimum.y) * xscale; + } +} + +void FractureToolImpl::fitAllUvToRect(float side) +{ + std::set mask; + fitAllUvToRect(side, mask); +} + +void FractureToolImpl::fitAllUvToRect(float side, std::set& mask) +{ + if (mChunkPostprocessors.empty()) // It seems finalize have not been called, call it here. + { + finalizeFracturing(); + } + if (mChunkPostprocessors.empty()) + { + return; // We dont have triangulated chunks. + } + PxBounds3 bnd; + bnd.setEmpty(); + + for (uint32_t chunk = 0; chunk < mChunkData.size(); ++chunk) + { + Mesh* m = mChunkData[chunk].meshData; + const Edge* edges = m->getEdges(); + const Vertex* vertices = m->getVertices(); + + for (uint32_t trn = 0; trn < m->getFacetCount(); ++trn) + { + if (m->getFacet(trn)->userData == 0) continue; + for (uint32_t ei = 0; ei < m->getFacet(trn)->edgesCount; ++ei) + { + int32_t v1 = edges[m->getFacet(trn)->firstEdgeNumber + ei].s; + int32_t v2 = edges[m->getFacet(trn)->firstEdgeNumber + ei].e; + bnd.include(PxVec3(vertices[v1].uv[0].x, vertices[v1].uv[0].y, 0.0f)); + bnd.include(PxVec3(vertices[v2].uv[0].x, vertices[v2].uv[0].y, 0.0f)); + } + } + } + float xscale = side / (bnd.maximum.x - bnd.minimum.x); + float yscale = side / (bnd.maximum.y - bnd.minimum.y); + xscale = std::min(xscale, yscale); // To have uniform scaling + + for (uint32_t chunk = 0; chunk < mChunkPostprocessors.size(); ++chunk) + { + if (!mask.empty() && mask.find(mChunkPostprocessors[chunk]->getParentChunkId()) == mask.end()) continue; + std::vector& ctrs = mChunkPostprocessors[chunk]->getBaseMeshNotFitted(); + std::vector& output = mChunkPostprocessors[chunk]->getBaseMesh(); + + for (uint32_t trn = 0; trn < ctrs.size(); ++trn) + { + if (ctrs[trn].userData == 0) continue; + output[trn].a.uv[0].x = (ctrs[trn].a.uv[0].x - bnd.minimum.x) * xscale; + output[trn].b.uv[0].x = (ctrs[trn].b.uv[0].x - bnd.minimum.x) * xscale; + output[trn].c.uv[0].x = (ctrs[trn].c.uv[0].x - bnd.minimum.x) * xscale; + + output[trn].a.uv[0].y = (ctrs[trn].a.uv[0].y - bnd.minimum.y) * xscale; + output[trn].b.uv[0].y = (ctrs[trn].b.uv[0].y - bnd.minimum.y) * xscale; + output[trn].c.uv[0].y = (ctrs[trn].c.uv[0].y - bnd.minimum.y) * xscale; + } + } +} + + + void FractureToolImpl::rebuildAdjGraph(const std::vector& chunks, std::vector >& chunkGraph) { std::vector> planeChunkIndex; diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h index 0f6cdf0..72b655f 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringFractureToolImpl.h @@ -14,6 +14,7 @@ #include "NvBlastExtAuthoringFractureTool.h" #include "NvBlastExtAuthoringMesh.h" #include +#include namespace Nv { @@ -114,8 +115,8 @@ public: private: std::vector mGeneratedSites; - const Mesh* mMesh; - const Mesh* mStencil; + const Mesh* mMesh; + const Mesh* mStencil; RandomGeneratorBase* mRnd; SpatialAccelerator* mAccelerator; }; @@ -224,7 +225,34 @@ public: \return If 0, fracturing is successful. */ - int32_t slicing(uint32_t chunkId, SlicingConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) override; + int32_t slicing(uint32_t chunkId, const SlicingConfiguration& conf, bool replaceChunk, RandomGeneratorBase* rnd) override; + + + /** + Cut chunk with plane. + \param[in] chunkId Chunk to fracture + \param[in] normal Plane normal + \param[in] position Point on plane + \param[in] noise Noise configuration for plane-chunk intersection, see NoiseConfiguration. + \param[in] replaceChunk if 'true', newly generated chunks will replace source chunk, if 'false', newly generated chunks will be at next depth level, source chunk will be parent for them. + Case replaceChunk == true && chunkId == 0 considered as wrong input parameters + \param[in] rnd User supplied random number generator + + \return If 0, fracturing is successful. + */ + int32_t cut(uint32_t chunkId, const physx::PxVec3& normal, const physx::PxVec3& position, const NoiseConfiguration& noise, bool replaceChunk, RandomGeneratorBase* rnd) override; + + /** + Cutout fracture for specified chunk. + \param[in] chunkId Chunk to fracture + \param[in] conf Cutout parameters, see CutoutConfiguration. + \param[in] replaceChunk if 'true', newly generated chunks will replace source chunk, if 'false', newly generated chunks will be at next depth level, source chunk will be parent for them. + Case replaceChunk == true && chunkId == 0 considered as wrong input parameters + \param[in] rnd User supplied random number generator + + \return If 0, fracturing is successful. + */ + int32_t cutout(uint32_t chunkId, CutoutConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd) override; /** @@ -257,6 +285,15 @@ public: */ uint32_t getBaseMesh(int32_t chunkIndex, Triangle*& output) override; + /** + Update chunk base mesh + \note Doesn't allocates output array, Triangle* output should be preallocated by user + \param[in] chunkIndex Chunk index + \param[out] output Array of triangles to be filled + \return number of triangles in base mesh + */ + uint32_t updateBaseMesh(int32_t chunkIndex, Triangle* output) override; + /** Return index of chunk with specified chunkId \param[in] chunkId Chunk ID @@ -324,13 +361,29 @@ public: void uniteChunks(uint32_t maxAtLevel, uint32_t maxGroupSize) override; + /** + Rescale interior uv coordinates of given chunk to fit square of given size. + \param[in] side Size of square side + \param[in] chunkId Chunk ID for which UVs should be scaled. + */ + void fitUvToRect(float side, uint32_t chunkId) override; + + /** + Rescale interior uv coordinates of all existing chunks to fit square of given size, relative sizes will be preserved. + \param[in] side Size of square side + */ + void fitAllUvToRect(float side) override; + + + private: void eraseChunk(int32_t chunkId); bool isAncestorForChunk(int32_t ancestorId, int32_t chunkId); - int32_t slicingNoisy(uint32_t chunkId, SlicingConfiguration conf, bool replaceChunk, RandomGeneratorBase* rnd); + int32_t slicingNoisy(uint32_t chunkId, const SlicingConfiguration& conf, bool replaceChunk, RandomGeneratorBase* rnd); uint32_t stretchGroup(const std::vector& group, std::vector>& graph); void rebuildAdjGraph(const std::vector& chunksToRebuild, std::vector >& chunkGraph); - + void fitAllUvToRect(float side, std::set& mask); + /** Returns newly created chunk index in mChunkData. */ diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp index 423a2ed..d5169b4 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.cpp @@ -12,14 +12,18 @@ #include "NvBlastExtAuthoringMeshImpl.h" #include "NvBlastExtAuthoringTypes.h" -#include #include "NvBlastExtAuthoringPerlinNoise.h" +#include +#include "PxMath.h" #include +#include using physx::PxVec2; using physx::PxVec3; using physx::PxBounds3; +#define UV_SCALE 1.f + namespace Nv { namespace Blast @@ -212,7 +216,7 @@ void MeshImpl::recalculateBoundingBox() -void getTangents(PxVec3& normal, PxVec3& t1, PxVec3& t2) +void getTangents(const PxVec3& normal, PxVec3& t1, PxVec3& t2) { if (std::abs(normal.z) < 0.9) @@ -260,17 +264,17 @@ Mesh* getCuttingBox(const PxVec3& point, const PxVec3& normal, float size, int64 positions[7].n = -lNormal; positions[0].uv[0] = PxVec2(0, 0); - positions[1].uv[0] = PxVec2(10, 0); + positions[1].uv[0] = PxVec2(UV_SCALE, 0); - positions[2].uv[0] = PxVec2(10, 10); - positions[3].uv[0] = PxVec2(0, 10); + positions[2].uv[0] = PxVec2(UV_SCALE, UV_SCALE); + positions[3].uv[0] = PxVec2(0, UV_SCALE); positions[4].uv[0] = PxVec2(0, 0); - positions[5].uv[0] = PxVec2(10, 0); + positions[5].uv[0] = PxVec2(UV_SCALE, 0); - positions[6].uv[0] = PxVec2(10, 10); - positions[7].uv[0] = PxVec2(0, 10); + positions[6].uv[0] = PxVec2(UV_SCALE, UV_SCALE); + positions[7].uv[0] = PxVec2(0, UV_SCALE); std::vector edges; @@ -422,12 +426,15 @@ Mesh* getNoisyCuttingBoxPair(const physx::PxVec3& point, const physx::PxVec3& no PxVec3 t2d = -t2 * 2.0f * jaggedPlaneSize / resolution; int32_t vrtId = 0; + float invRes = 1.f / resolution; for (uint32_t i = 0; i < resolution + 1; ++i) { PxVec3 lcPosit = cPosit; for (uint32_t j = 0; j < resolution + 1; ++j) { vertices[vrtId].p = lcPosit; + vertices[vrtId].uv[0].x = invRes * i * UV_SCALE; + vertices[vrtId].uv[0].y = invRes * j * UV_SCALE; lcPosit += t1d; vrtId++; } @@ -570,17 +577,17 @@ Mesh* getBigBox(const PxVec3& point, float size, int32_t interiorMaterialId) positions[7].p = point + (t1 - t2 + normal) * size; positions[0].uv[0] = PxVec2(0, 0); - positions[1].uv[0] = PxVec2(10, 0); + positions[1].uv[0] = PxVec2(UV_SCALE, 0); - positions[2].uv[0] = PxVec2(10, 10); - positions[3].uv[0] = PxVec2(0, 10); + positions[2].uv[0] = PxVec2(UV_SCALE, UV_SCALE); + positions[3].uv[0] = PxVec2(0, UV_SCALE); positions[4].uv[0] = PxVec2(0, 0); - positions[5].uv[0] = PxVec2(10, 0); + positions[5].uv[0] = PxVec2(UV_SCALE, 0); - positions[6].uv[0] = PxVec2(10, 10); - positions[7].uv[0] = PxVec2(0, 10); + positions[6].uv[0] = PxVec2(UV_SCALE, UV_SCALE); + positions[7].uv[0] = PxVec2(0, UV_SCALE); std::vector edges; @@ -627,5 +634,53 @@ Mesh* getBigBox(const PxVec3& point, float size, int32_t interiorMaterialId) return new MeshImpl(positions.data(), edges.data(), facets.data(), static_cast(positions.size()), static_cast(edges.size()), static_cast(facets.size())); } +Mesh* getCuttingCylinder(uint32_t pointCount, const physx::PxVec3* points, const physx::PxTransform& transform, float height, int64_t id, int32_t interiorMaterialId) +{ + std::vector positions(pointCount * 2); + std::vector edges(pointCount * 6); + std::vector facets(pointCount + 2); + + for (uint32_t i = 0; i < pointCount; i++) + { + uint32_t i1 = i + pointCount; + uint32_t i2 = i1 + 1; + uint32_t i3 = i + 1; + + auto& p0 = positions[i]; + auto& p1 = positions[i1]; + p0.n = p1.n = PxVec3(0, 0, 0); + p0.p = p1.p = points[i]; + p0.p.z = -height; + p1.p.z = height; + p0.p = transform.transform(p0.p); + p1.p = transform.transform(p1.p); + p0.uv[0] = PxVec2(0.f, UV_SCALE * i / pointCount); + p1.uv[0] = PxVec2(UV_SCALE, UV_SCALE * i / pointCount); + + int32_t edgeIdx = 4 * i; + edges[edgeIdx + 0] = Edge(i, i3); + edges[edgeIdx + 1] = Edge(i3, i2); + edges[edgeIdx + 2] = Edge(i2, i1); + edges[edgeIdx + 3] = Edge(i1, i); + facets[i] = Facet(edgeIdx, 4, interiorMaterialId, id, -1); + + edges[5 * pointCount + i ] = Edge(i1, i2); + edges[5 * pointCount - i - 1] = Edge(i3, i); + } + + int32_t edgeIdx = 4 * (pointCount - 1); + edges[edgeIdx + 0].e = 0; + edges[edgeIdx + 1].s = 0; + edges[edgeIdx + 1].e = pointCount; + edges[edgeIdx + 2].s = pointCount; + + //top and bottom faces + edges[4 * pointCount].s = 0; + edges[6 * pointCount - 1].e = pointCount; + facets[pointCount + 0] = Facet(4 * pointCount, pointCount, interiorMaterialId, 0, -1); + facets[pointCount + 1] = Facet(5 * pointCount, pointCount, interiorMaterialId, 0, -1); + return new MeshImpl(positions.data(), edges.data(), facets.data(), static_cast(positions.size()), static_cast(edges.size()), static_cast(facets.size())); +} + } // namespace Blast } // namespace Nv diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.h b/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.h index 512c3c8..1863f64 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.h +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringMeshImpl.h @@ -206,10 +206,20 @@ Mesh* getNoisyCuttingBoxPair(const physx::PxVec3& point, const physx::PxVec3& no /** Inverses normals of cutting box and sets indices. \param[in] mesh Cutting box mesh - \param[in] id Cutting box ID + \param[in] id Cutting box ID */ void inverseNormalAndSetIndices(Mesh* mesh, int64_t id); +/** + Create cutting cylinder (extrusion of specified loop) at some particular position. + \param[in] pointCount Number of points in loop + \param[in] points Array of points for loop + \param[in] transform Cutting cylinder transform + \param[in] height Cutting cylinder height + \param[in] id Cutting cylinder ID +*/ +Mesh* getCuttingCylinder(uint32_t pointCount, const physx::PxVec3* points, const physx::PxTransform& transform, float height, int64_t id, int32_t interiorMaterialId); + } // namespace Blast } // namespace Nv diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.cpp b/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.cpp index cc2442c..e7cbb06 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.cpp +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.cpp @@ -47,20 +47,21 @@ using physx::PxVec3; using physx::PxVec2; -#define TWO_VERTICES_THRESHOLD 1e-7 - namespace Nv { namespace Blast { - +NV_FORCE_INLINE bool compareTwoFloats(float a, float b) +{ + return std::abs(b - a) <= FLT_EPSILON * std::abs(b + a); +} NV_FORCE_INLINE bool compareTwoVertices(const PxVec3& a, const PxVec3& b) { - return std::abs(b.x - a.x) < TWO_VERTICES_THRESHOLD && std::abs(b.y - a.y) < TWO_VERTICES_THRESHOLD && std::abs(b.z - a.z) < TWO_VERTICES_THRESHOLD; + return compareTwoFloats(a.x, b.x) && compareTwoFloats(a.y, b.y) && compareTwoFloats(a.z, b.z); } NV_FORCE_INLINE bool compareTwoVertices(const PxVec2& a, const PxVec2& b) { - return std::abs(b.x - a.x) < TWO_VERTICES_THRESHOLD && std::abs(b.y - a.y) < TWO_VERTICES_THRESHOLD; + return compareTwoFloats(a.x, b.x) && compareTwoFloats(a.y, b.y); } NV_FORCE_INLINE float getRotation(const PxVec2& a, const PxVec2& b) @@ -68,7 +69,7 @@ NV_FORCE_INLINE float getRotation(const PxVec2& a, const PxVec2& b) return a.x * b.y - a.y * b.x; } -inline bool pointInside(PxVec2 a, PxVec2 b, PxVec2 c, PxVec2 pnt) +NV_FORCE_INLINE bool pointInside(PxVec2 a, PxVec2 b, PxVec2 c, PxVec2 pnt) { if (compareTwoVertices(a, pnt) || compareTwoVertices(b, pnt) || compareTwoVertices(c, pnt)) { @@ -471,7 +472,10 @@ NV_FORCE_INLINE void Triangulator::addEdgeIfValid(EdgeWithParent& ed) mBaseMeshEdges[it->second].s = ed.s; mBaseMeshEdges[it->second].e = ed.e; } - mBaseMeshEdges[it->second].s = NOT_VALID_VERTEX; + else + { + mBaseMeshEdges[it->second].s = NOT_VALID_VERTEX; + } } } @@ -504,7 +508,7 @@ void Triangulator::prepare(const Mesh* mesh) temp.push_back(mBaseMeshEdges[i]); } } - + mBaseMeshEdges = temp; } void Triangulator::reset() @@ -560,6 +564,7 @@ void Triangulator::triangulate(const Mesh* mesh) mBaseMeshResultTriangles.back().smoothingGroup = mBaseMeshTriangles[i].smoothingGroup; } + mBaseMeshUVFittedTriangles = mBaseMeshResultTriangles; // Uvs will be fitted later, in FractureTool. computePositionedMapping(); } diff --git a/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.h b/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.h index c5cb5b1..70fc9f5 100644 --- a/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.h +++ b/sdk/extensions/authoring/source/NvBlastExtAuthoringTriangulator.h @@ -58,10 +58,16 @@ public: \return Return array of triangles of base mesh. */ std::vector& getBaseMesh() + { + return mBaseMeshUVFittedTriangles; + } + + std::vector& getBaseMeshNotFitted() { return mBaseMeshResultTriangles; } + /** \return Return array of TriangleIndexed of base mesh. Each TriangleIndexed contains index of corresponding vertex in internal vertex buffer. */ @@ -96,8 +102,12 @@ public: */ void reset(); + int32_t& getParentChunkId() { return parentChunkId; }; + private: + int32_t parentChunkId; + int32_t addVerticeIfNotExist(const Vertex& p); void addEdgeIfValid(EdgeWithParent& ed); @@ -128,6 +138,7 @@ private: Final triangles */ std::vector mBaseMeshResultTriangles; + std::vector mBaseMeshUVFittedTriangles; }; } // namespace Blast diff --git a/sdk/extensions/exporter/include/NvBlastExtExporter.h b/sdk/extensions/exporter/include/NvBlastExtExporter.h index a8bbb50..2b852af 100644 --- a/sdk/extensions/exporter/include/NvBlastExtExporter.h +++ b/sdk/extensions/exporter/include/NvBlastExtExporter.h @@ -46,6 +46,12 @@ namespace Blast struct AuthoringResult; struct CollisionHull; +struct Materials +{ + const char* name; + const char* diffuse_tex; +}; + struct ExporterMeshData { NvBlastAsset* asset; //Blast asset @@ -66,7 +72,7 @@ struct ExporterMeshData uint32_t submeshCount; //Number of submeshes - const char** submeshNames; //Equal to material names + Materials* submeshMats; /** @@ -227,6 +233,11 @@ public: Save scene to file. */ virtual bool saveToFile(const char* assetName, const char* outputPath) = 0; + + /** + Set material index for interior surface. By default new material will be created; + */ + virtual void setInteriorIndex(int32_t index) = 0; }; } diff --git a/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.cpp b/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.cpp index 497c846..d465d65 100644 --- a/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.cpp +++ b/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.cpp @@ -69,6 +69,8 @@ FbxFileWriter::FbxFileWriter(): mRenderLayer = FbxDisplayLayer::Create(mScene, FbxUtils::getRenderGeometryLayerName().c_str()); mRenderLayer->Show.Set(true); mRenderLayer->Color.Set(FbxDouble3(0.0f, 1.0f, 0.0f)); + + mInteriorIndex = -1; } void FbxFileWriter::release() @@ -89,13 +91,19 @@ void FbxFileWriter::createMaterials(const ExporterMeshData& aResult) for (uint32_t i = 0; i < aResult.submeshCount; ++i) { - FbxSurfacePhong* material = FbxSurfacePhong::Create(sdkManager.get(), aResult.submeshNames[i]); + FbxSurfacePhong* material = FbxSurfacePhong::Create(sdkManager.get(), aResult.submeshMats[i].name); material->Diffuse.Set(FbxDouble3(float(rand()) / RAND_MAX , float(rand()) / RAND_MAX, float(rand()) / RAND_MAX)); material->DiffuseFactor.Set(1.0); mMaterials.push_back(material); } } +void FbxFileWriter::setInteriorIndex(int32_t index) +{ + mInteriorIndex = index; +} + + void FbxFileWriter::createMaterials(const AuthoringResult& aResult) { mMaterials.clear(); @@ -113,10 +121,19 @@ void FbxFileWriter::createMaterials(const AuthoringResult& aResult) material->DiffuseFactor.Set(1.0); mMaterials.push_back(material); } - FbxSurfacePhong* interiorMat = FbxSurfacePhong::Create(sdkManager.get(), "Interior_Material"); - interiorMat->Diffuse.Set(FbxDouble3(1.0, 0.0, 0.5)); - interiorMat->DiffuseFactor.Set(1.0); - mMaterials.push_back(interiorMat); + if (mInteriorIndex == -1) // No material setted. Create new one. + { + FbxSurfacePhong* interiorMat = FbxSurfacePhong::Create(sdkManager.get(), "Interior_Material"); + interiorMat->Diffuse.Set(FbxDouble3(1.0, 0.0, 0.5)); + interiorMat->DiffuseFactor.Set(1.0); + mMaterials.push_back(interiorMat); + } + else + { + if (mInteriorIndex < 0) mInteriorIndex = 0; + if (static_cast(mInteriorIndex) >= mMaterials.size()) mInteriorIndex = 0; + } + } @@ -416,7 +433,7 @@ uint32_t FbxFileWriter::createChunkRecursive(uint32_t currentCpIdx, uint32_t chu mesh->AddPolygon(currentCpIdx + cpIdx + 1); mesh->AddPolygon(currentCpIdx + cpIdx + 2); mesh->EndPolygon(); - int32_t material = (tri.materialId != MATERIAL_INTERIOR) ? ((tri.materialId < int32_t(mMaterials.size() - 1)) ? tri.materialId : 0) : int32_t(mMaterials.size() - 1); + int32_t material = (tri.materialId != MATERIAL_INTERIOR) ? ((tri.materialId < int32_t(mMaterials.size())) ? tri.materialId : 0) : ((mInteriorIndex == -1) ? int32_t(mMaterials.size() - 1): mInteriorIndex); matElement->GetIndexArray().SetAt(polyCount, material); if (smElement) { @@ -648,7 +665,7 @@ void FbxFileWriter::createChunkRecursiveNonSkinned(const std::string& meshName, geUV->GetDirectArray().Add(uv); } mesh->EndPolygon(); - int32_t material = (geo.materialId != MATERIAL_INTERIOR) ? ((geo.materialId < int32_t(mMaterials.size() - 1))? geo.materialId : 0) : int32_t(mMaterials.size() - 1); + int32_t material = (geo.materialId != MATERIAL_INTERIOR) ? ((geo.materialId < int32_t(mMaterials.size()))? geo.materialId : 0) : ((mInteriorIndex == -1)? int32_t(mMaterials.size() - 1) : mInteriorIndex); matElement->GetIndexArray().SetAt(polyCount, material); if (smElement) diff --git a/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.h b/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.h index f8490cb..b6d5859 100644 --- a/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.h +++ b/sdk/extensions/exporter/source/NvBlastExtExporterFbxWriter.h @@ -84,10 +84,15 @@ public: virtual bool appendMesh(const ExporterMeshData& meshData, const char* assetName, bool nonSkinned) override; /** - Save scene to file. + Save scene to file. */ virtual bool saveToFile(const char* assetName, const char* outputPath) override; + /** + Set interior material index. + */ + virtual void setInteriorIndex(int32_t index) override; + /** Set true if FBX should be saved in ASCII mode. */ @@ -129,6 +134,8 @@ private: void generateSmoothingGroups(fbxsdk::FbxMesh* mesh, FbxSkin* skin); void removeDuplicateControlPoints(fbxsdk::FbxMesh* mesh, FbxSkin* skin); + + int32_t mInteriorIndex; }; } diff --git a/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.cpp b/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.cpp index fb6e9b3..9eba7d5 100644 --- a/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.cpp +++ b/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.cpp @@ -60,7 +60,18 @@ void ObjFileReader::loadFromFile(const char* filename) std::vector mats; std::string err; std::string mtlPath; - bool ret = tinyobj::LoadObj(shapes, mats, err, filename); + + int32_t lastDelimeter = strlen(filename); + + while (lastDelimeter > 0 && filename[lastDelimeter] != '/' && filename[lastDelimeter] != '\\') + { + lastDelimeter--; + } + mtlPath = std::string(filename, filename + lastDelimeter); + mtlPath += '/'; + + bool ret = tinyobj::LoadObj(shapes, mats, err, filename, mtlPath.c_str()); + // can't load? if (!ret) { @@ -71,6 +82,18 @@ void ObjFileReader::loadFromFile(const char* filename) std::cout << "Can load only one object per mesh" << std::endl; } + if (!mats.empty()) + { + if (mats.size() == 1 && mats[0].name == "") + { + mats[0].name = "Default"; + } + for (uint32_t i = 0; i < mats.size(); ++i) + { + mMaterialNames.push_back(mats[i].name); + } + } + mVertexPositions.clear(); mVertexNormals.clear(); mVertexUv.clear(); @@ -93,6 +116,14 @@ void ObjFileReader::loadFromFile(const char* filename) } mIndices = shapes[0].mesh.indices; + mPerFaceMatId = shapes[0].mesh.material_ids; + for (uint32_t i = 0; i < mPerFaceMatId.size(); ++i) + { + if (mPerFaceMatId[i] == -1) // TinyOBJ loader sets ID to -1 when .mtl file not found. Set to default 0 material. + { + mPerFaceMatId[i] = 0; + } + } } diff --git a/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.h b/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.h index 8990287..2e8c955 100644 --- a/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.h +++ b/sdk/extensions/exporter/source/NvBlastExtExporterObjReader.h @@ -90,9 +90,9 @@ public: virtual uint32_t* getIndexArray() override; /** - Get loaded per triangle material ids. Currently not supported by OBJ. + Get loaded per triangle material ids. */ - int32_t* getMaterialIds() override { return nullptr; }; + int32_t* getMaterialIds() override { return mPerFaceMatId.data(); }; /** Get loaded per triangle smoothing groups. Currently not supported by OBJ. @@ -100,20 +100,24 @@ public: int32_t* getSmoothingGroups() override { return nullptr; }; /** - Get material name. Currently not supported by OBJ. + Get material name. */ - const char* getMaterialName(int32_t id) override { return nullptr; } + const char* getMaterialName(int32_t id) override { return mMaterialNames[id].c_str(); } /** Get material count. */ - int32_t getMaterialCount() { return 0; }; + int32_t getMaterialCount() { return mMaterialNames.size(); }; private: std::vector mVertexPositions; std::vector mVertexNormals; std::vector mVertexUv; std::vector mIndices; + + std::vector mMaterialNames; + std::vector mPerFaceMatId; + }; } diff --git a/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.cpp b/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.cpp index a49e28f..b453a62 100644 --- a/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.cpp +++ b/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.cpp @@ -31,6 +31,7 @@ #include #include "NvBlastExtAuthoringTypes.h" #include "NvBlastExtAuthoringMesh.h" +#include using namespace physx; @@ -43,6 +44,16 @@ void ObjFileWriter::release() delete this; } +void ObjFileWriter::setInteriorIndex(int32_t index) +{ + mIntSurfaceMatIndex = index; +} + +bool CompByMaterial(const Triangle& a, const Triangle& b) +{ + return a.materialId < b.materialId; +} + bool ObjFileWriter::appendMesh(const AuthoringResult& aResult, const char* /*assetName*/, bool /*nonSkinned*/) { mMeshData = std::shared_ptr(new ExporterMeshData(), [](ExporterMeshData* md) @@ -55,34 +66,90 @@ bool ObjFileWriter::appendMesh(const AuthoringResult& aResult, const char* /*ass delete[] md->positions; delete[] md->submeshOffsets; //delete[] md->texIndex; - delete[] md->submeshNames; + delete[] md->submeshMats; delete[] md->uvs; delete md; }); + + ExporterMeshData& md = *mMeshData.get(); uint32_t triCount = aResult.geometryOffset[aResult.chunkCount]; md.meshCount = aResult.chunkCount; - md.submeshOffsets = new uint32_t[md.meshCount + 1]; - for (uint32_t i = 0; i < md.meshCount + 1; i++) - { - md.submeshOffsets[i] = aResult.geometryOffset[i] * 3; + md.submeshCount = aResult.materialCount; + + int32_t additionalMats = 0; + + if (mIntSurfaceMatIndex == -1 || mIntSurfaceMatIndex >= (int32_t)md.submeshCount) + { + md.submeshCount += 1; + mIntSurfaceMatIndex = md.submeshCount - 1; + additionalMats = 1; + } + + md.submeshOffsets = new uint32_t[md.meshCount * md.submeshCount + 1]; + md.submeshMats = new Materials[md.submeshCount]; + + for (uint32_t i = 0; i < md.submeshCount - additionalMats; ++i) + { + md.submeshMats[i].name = aResult.materialNames[i]; + md.submeshMats[i].diffuse_tex = nullptr; + } + + if (additionalMats) + { + md.submeshMats[mIntSurfaceMatIndex].name = interiorNameStr.c_str(); + md.submeshMats[mIntSurfaceMatIndex].diffuse_tex = nullptr; } - //md.submeshOffsets = md.meshOffsets; - md.submeshCount = 1; - //md.indicesCount = triCount * 3; md.positionsCount = triCount * 3; md.normalsCount = md.positionsCount; md.uvsCount = md.positionsCount; md.positions = new PxVec3[md.positionsCount]; md.normals = new PxVec3[md.normalsCount]; md.uvs = new PxVec2[md.uvsCount]; + md.posIndex = new uint32_t[triCount * 3]; md.normIndex = md.posIndex; md.texIndex = md.posIndex; - md.submeshNames = new const char*[1]{ gTexPath }; + + + + /** + Now we need to sort input trianles chunk they belong to, then by material; + */ + std::vector sorted; + sorted.reserve(triCount); + + + int32_t perChunkOffset = 0; + for (uint32_t i = 0; i < md.meshCount; ++i) + { + std::vector perMaterialCount(md.submeshCount); + + uint32_t first = aResult.geometryOffset[i]; + uint32_t last = aResult.geometryOffset[i + 1]; + uint32_t firstInSorted = sorted.size(); + for (uint32_t t = first; t < last; ++t) + { + sorted.push_back(aResult.geometry[t]); + int32_t cmat = sorted.back().materialId; + if (cmat == MATERIAL_INTERIOR) + { + cmat = mIntSurfaceMatIndex; + } + perMaterialCount[cmat]++; + } + for (uint32_t mof = 0; mof < md.submeshCount; ++mof) + { + md.submeshOffsets[i * md.submeshCount + mof] = perChunkOffset * 3; + perChunkOffset += perMaterialCount[mof]; + } + std::sort(sorted.begin() + firstInSorted, sorted.end(), CompByMaterial); + } + md.submeshOffsets[md.meshCount * md.submeshCount] = perChunkOffset * 3; + for (uint32_t vc = 0; vc < triCount; ++vc) { - Triangle& tri = aResult.geometry[vc]; + Triangle& tri = sorted[vc]; uint32_t i = vc * 3; md.positions[i+0] = tri.a.p; md.positions[i+1] = tri.b.p; @@ -129,8 +196,15 @@ bool ObjFileWriter::saveToFile(const char* assetName, const char* outputPath) for (uint32_t submeshIndex = 0; submeshIndex < md.submeshCount; ++submeshIndex) { - fprintf(f, "newmtl mat%d\n", submeshIndex); - fprintf(f, "\tmap_Kd %s\n", md.submeshNames[submeshIndex]); + fprintf(f, "newmtl %s\n", md.submeshMats[submeshIndex].name); + if (md.submeshMats[submeshIndex].diffuse_tex != nullptr) + { + fprintf(f, "\tmap_Kd %s\n", md.submeshMats[submeshIndex].diffuse_tex); + } + else + { + fprintf(f, "\tKd %f %f %f\n", float(rand()) / RAND_MAX, float(rand()) / RAND_MAX, float(rand()) / RAND_MAX); + } fprintf(f, "\n"); } @@ -165,13 +239,16 @@ bool ObjFileWriter::saveToFile(const char* assetName, const char* outputPath) for (uint32_t chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) { + fprintf(f, "g %d \n", chunkIndex); for (uint32_t submeshIndex = 0; submeshIndex < md.submeshCount; ++submeshIndex) { uint32_t firstIdx = md.submeshOffsets[chunkIndex * md.submeshCount + submeshIndex]; uint32_t lastIdx = md.submeshOffsets[chunkIndex * md.submeshCount + submeshIndex + 1]; - fprintf(f, "g %d_%d \n", chunkIndex, submeshIndex); - fprintf(f, "usemtl mat%d\n", submeshIndex); - + if (firstIdx == lastIdx) // There is no trianlges in this submesh. + { + continue; + } + fprintf(f, "usemtl %s\n", md.submeshMats[submeshIndex].name); for (uint32_t i = firstIdx; i < lastIdx; i += 3) { fprintf(f, "f %d/%d/%d ", md.posIndex[i] + 1, md.texIndex[i] + 1, md.normIndex[i] + 1); diff --git a/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.h b/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.h index 3152d42..65e3f0f 100644 --- a/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.h +++ b/sdk/extensions/exporter/source/NvBlastExtExporterObjWriter.h @@ -34,7 +34,7 @@ #include #include #include - +#include struct NvBlastAsset; namespace Nv @@ -46,7 +46,7 @@ class ObjFileWriter : public IMeshFileWriter { public: - ObjFileWriter() {}; + ObjFileWriter(): mIntSurfaceMatIndex(-1), interiorNameStr("INTERIOR_MATERIAL") { }; ~ObjFileWriter() = default; virtual void release() override; @@ -63,8 +63,15 @@ public: */ virtual bool saveToFile(const char* assetName, const char* outputPath) override; + /** + Set interior material index. Not supported in OBJ since AuthoringTool doesn't created OBJ with materials currently. + */ + virtual void setInteriorIndex(int32_t index) override; + private: std::shared_ptr mMeshData; + int32_t mIntSurfaceMatIndex; + std::string interiorNameStr; }; } diff --git a/sdk/lowlevel/source/NvBlastActor.cpp b/sdk/lowlevel/source/NvBlastActor.cpp index 8c90d0f..7d55bd7 100644 --- a/sdk/lowlevel/source/NvBlastActor.cpp +++ b/sdk/lowlevel/source/NvBlastActor.cpp @@ -262,7 +262,8 @@ void Actor::generateFracture(NvBlastFractureBuffers* commandBuffers, const NvBla size_t Actor::splitRequiredScratch() const { - return FamilyGraph::findIslandsRequiredScratch(getGraph()->m_nodeCount); + // Scratch is reused, just need the max of these two values + return std::max(m_graphNodeCount * sizeof(uint32_t), static_cast(FamilyGraph::findIslandsRequiredScratch(getGraph()->m_nodeCount))); } @@ -334,6 +335,27 @@ uint32_t Actor::split(NvBlastActorSplitEvent* result, uint32_t newActorsMaxCount } #endif + // Reuse scratch for node list + uint32_t* graphNodeIndexList = reinterpret_cast(scratch); + + // Get the family header + FamilyHeader* header = getFamilyHeader(); + NVBLAST_ASSERT(header != nullptr); // If m_actorEntryDataIndex is valid, this should be too + + // Record nodes in this actor before splitting + const uint32_t* graphNodeIndexLinks = header->getGraphNodeIndexLinks(); // Get the links for the graph nodes + uint32_t graphNodeIndexCount = 0; + for (uint32_t graphNodeIndex = m_firstGraphNodeIndex; !isInvalidIndex(graphNodeIndex); graphNodeIndex = graphNodeIndexLinks[graphNodeIndex]) + { + if (graphNodeIndexCount >= m_graphNodeCount) + { + // Safety, splitRequiredScratch() only guarantees m_graphNodeCount elements. In any case, this condition shouldn't happen. + NVBLAST_ASSERT(graphNodeIndexCount < m_graphNodeCount); + break; + } + graphNodeIndexList[graphNodeIndexCount++] = graphNodeIndex; + } + actorsCount = partitionMultipleGraphNodes(newActors, newActorsMaxCount, logFn); if (actorsCount > 1) @@ -345,19 +367,40 @@ uint32_t Actor::split(NvBlastActorSplitEvent* result, uint32_t newActorsMaxCount } #endif - // Recalculate visible chunk lists if the graph nodes have been redistributed + // Get various pointers and values to iterate + const Asset* asset = getAsset(); + Actor* actors = header->getActors(); + IndexDLink* visibleChunkIndexLinks = header->getVisibleChunkIndexLinks(); + uint32_t* chunkActorIndices = header->getChunkActorIndices(); + const SupportGraph& graph = asset->m_graph; + const uint32_t* graphChunkIndices = graph.getChunkIndices(); + const NvBlastChunk* chunks = asset->getChunks(); + const uint32_t upperSupportChunkCount = asset->getUpperSupportChunkCount(); + const uint32_t* familyGraphIslandIDs = header->getFamilyGraph()->getIslandIds(); + + // Iterate over all graph nodes and update visible chunk lists + for (uint32_t graphNodeNum = 0; graphNodeNum < graphNodeIndexCount; ++graphNodeNum) + { + const uint32_t graphNodeIndex = graphNodeIndexList[graphNodeNum]; + const uint32_t supportChunkIndex = graphChunkIndices[graphNodeIndex]; + if (!isInvalidIndex(supportChunkIndex)) // Invalid if this is the world chunk + { + updateVisibleChunksFromSupportChunk(actors, visibleChunkIndexLinks, chunkActorIndices, familyGraphIslandIDs[graphNodeIndex], graphChunkIndices[graphNodeIndex], chunks, upperSupportChunkCount); + } + } + + // Remove actors with no visible chunks - this can happen if we've split such that the world node is by itself uint32_t actualActorsCount = 0; for (uint32_t i = 0; i < actorsCount; ++i) { newActors[actualActorsCount] = newActors[i]; - newActors[actualActorsCount]->updateVisibleChunksFromGraphNodes(); - if (newActors[actualActorsCount]->getVisibleChunkCount() > 0) // If we've split such that the world node is by itself, it will have no visible chunks + if (newActors[actualActorsCount]->getVisibleChunkCount() > 0) { ++actualActorsCount; } else { - getFamilyHeader()->returnActor(*newActors[actualActorsCount]); + header->returnActor(*newActors[actualActorsCount]); } } actorsCount = actualActorsCount; diff --git a/sdk/lowlevel/source/NvBlastAsset.cpp b/sdk/lowlevel/source/NvBlastAsset.cpp index 354a3ac..2cfc73e 100644 --- a/sdk/lowlevel/source/NvBlastAsset.cpp +++ b/sdk/lowlevel/source/NvBlastAsset.cpp @@ -591,7 +591,7 @@ Asset* Asset::create(void* mem, const NvBlastAssetDesc* desc, void* scratch, NvB { break; // Only iterate through root chunks at this level } - const uint32_t enumeratedChunkCount = enumerateChunkHierarchyBreadthFirst(breadthFirstChunkIndices, desc->chunkCount, chunks, startChunkIndex, false); + const uint32_t enumeratedChunkCount = enumerateChunkHierarchyBreadthFirst(breadthFirstChunkIndices, desc->chunkCount, chunks, startChunkIndex); for (uint32_t chunkNum = enumeratedChunkCount; chunkNum--;) { const uint32_t chunkIndex = breadthFirstChunkIndices[chunkNum]; @@ -600,8 +600,10 @@ Asset* Asset::create(void* mem, const NvBlastAssetDesc* desc, void* scratch, NvB { subtreeLeafChunkCounts[chunkIndex] = 1; } - NVBLAST_ASSERT(!isInvalidIndex(chunk.parentChunkIndex)); // Parent index is valid because root chunk is not included in this list (because of 'false' passed into enumerateChunkHierarchyBreadthFirst, above) - subtreeLeafChunkCounts[chunk.parentChunkIndex] += subtreeLeafChunkCounts[chunkIndex]; + if (!isInvalidIndex(chunk.parentChunkIndex)) + { + subtreeLeafChunkCounts[chunk.parentChunkIndex] += subtreeLeafChunkCounts[chunkIndex]; + } } } diff --git a/test/compiler/cmake/BlastUnitTests.cmake b/test/compiler/cmake/BlastUnitTests.cmake index 0344264..61e3241 100644 --- a/test/compiler/cmake/BlastUnitTests.cmake +++ b/test/compiler/cmake/BlastUnitTests.cmake @@ -25,6 +25,7 @@ SET(UNITTEST_SOURCE_FILES ${UNITTEST_SOURCE_DIR}/AssetTests.cpp ${UNITTEST_SOURCE_DIR}/ActorTests.cpp ${UNITTEST_SOURCE_DIR}/APITests.cpp + ${UNITTEST_SOURCE_DIR}/AuthoringCutout.cpp ${UNITTEST_SOURCE_DIR}/CoreTests.cpp ${UNITTEST_SOURCE_DIR}/FamilyGraphTests.cpp ${UNITTEST_SOURCE_DIR}/MultithreadingTests.cpp @@ -86,12 +87,16 @@ SET(UTILS_SOURCE_FILES ${UTILS_SOURCE_DIR}/TestProfiler.h ) +SET(AUTHORING_SOURCE_FILES + ${BLAST_ROOT_DIR}/sdk/extensions/authoring/source/NvBlastExtAuthoringCutoutImpl.cpp +) ADD_EXECUTABLE(BlastUnitTests ${COMMON_SOURCE_FILES} ${UTILS_SOURCE_FILES} ${UNITTEST_SOURCE_FILES} + ${AUTHORING_SOURCE_FILES} ${SDK_COMMON_FILES} ${SDK_SOLVER_FILES} @@ -126,6 +131,8 @@ TARGET_INCLUDE_DIRECTORIES(BlastUnitTests PRIVATE ${BLAST_ROOT_DIR}/sdk/lowlevel/source PRIVATE ${BLAST_ROOT_DIR}/sdk/extensions/assetutils/source PRIVATE ${BLAST_ROOT_DIR}/sdk/extensions/assetutils/include + PRIVATE ${BLAST_ROOT_DIR}/sdk/extensions/authoring/source + PRIVATE ${BLAST_ROOT_DIR}/sdk/extensions/authoring/include PRIVATE ${BLAST_ROOT_DIR}/sdk/extensions/serialization/include PRIVATE ${BLAST_ROOT_DIR}/shared/utils diff --git a/test/src/unit/AuthoringCutout.cpp b/test/src/unit/AuthoringCutout.cpp new file mode 100644 index 0000000..812badc --- /dev/null +++ b/test/src/unit/AuthoringCutout.cpp @@ -0,0 +1,410 @@ +// This code contains NVIDIA Confidential Information and is disclosed to you +// under a form of NVIDIA software license agreement provided separately to you. +// +// Notice +// NVIDIA Corporation and its licensors retain all intellectual property and +// proprietary rights in and to this software and related documentation and +// any modifications thereto. Any use, reproduction, disclosure, or +// distribution of this software and related documentation without an express +// license agreement from NVIDIA Corporation is strictly prohibited. +// +// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES +// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO +// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, +// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Information and code furnished is believed to be accurate and reliable. +// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such +// information or for any infringement of patents or other rights of third parties that may +// result from its use. No license is granted by implication or otherwise under any patent +// or patent rights of NVIDIA Corporation. Details are subject to change without notice. +// This code supersedes and replaces all information previously supplied. +// NVIDIA Corporation products are not authorized for use as critical +// components in life support devices or systems without express written approval of +// NVIDIA Corporation. +// +// Copyright (c) 2016-2017 NVIDIA Corporation. All rights reserved. + + +#include "BlastBaseTest.h" + +#include +#include + +#include "NvBlastExtAuthoringCutoutImpl.h" + + + + +template +class AuthoringCutoutConvertToIncrementalTest : public BlastBaseTest +{ +public: + AuthoringCutoutConvertToIncrementalTest() + { + + } + + std::vector* generateRectangleTrace(int32_t x1, int32_t x2, int32_t y1, int32_t y2, int32_t start, bool isCCW) + { + auto Ret = new std::vector(); + auto& T = *Ret; + T.reserve((x2 - x1) * 2 + (y2 - y1 - 1) * 2); + for (int32_t x = x1; x <= x2; x++) + { + T.push_back({ x, y1 }); + } + for (int32_t y = y1 + 1; y < y2; y++) + { + T.push_back({ x2, y }); + } + for (int32_t x = x2; x >= x1; x--) + { + T.push_back({ x, y2 }); + } + for (int32_t y = y2 - 1; y > y1; y--) + { + T.push_back({ x1, y }); + } + if (isCCW) + { + start = (int32_t)T.size() - start + 1; + } + start = start % T.size(); + if (start > 0) + { + std::vector buf; buf.resize(T.size()); + std::copy(T.begin() + start, T.end(), buf.begin()); + std::copy(T.begin(), T.begin() + start, buf.begin() + std::distance(T.begin() + start, T.end())); + T = buf; + } + if (isCCW) + { + std::reverse(T.begin(), T.end()); + } + //std::copy(buf.begin(), buf.end(), T.begin()); + return Ret; + } + + void testTwoTracesWithOffset(uint32_t w, uint32_t h, bool isCCW1, bool isCCW2) + { + uint32_t mid = w / 2; + uint32_t traceLenght = w + 1 + (h + 1) * 2; + + for (uint32_t start1 = 0; start1 < traceLenght; start1++) + { + for (uint32_t start2 = 0; start2 < traceLenght; start2++) + { + traces.push_back(generateRectangleTrace(-1, mid, -1, h, start1, isCCW1)); + traces.push_back(generateRectangleTrace(mid, w, -1, h, start2, isCCW2)); + expectedTraces.push_back(new std::vector()); + *expectedTraces.front() = *traces.front(); + expectedTraces.push_back(generateRectangleTrace(-1, w, -1, h, 0, false)); + + Nv::Blast::convertTracesToIncremental(traces); + + checkTraces(); + + freeTraces(); + } + } + } + + void testThreeTracesWithOffset(uint32_t sz, bool isCCW1, bool isCCW2, bool isCCW3) + { + uint32_t mid = sz / 2; + uint32_t traceLenght = sz * 2; + uint32_t traceLenght3 = sz * 3; + + for (uint32_t start1 = 0; start1 < traceLenght; start1++) + { + for (uint32_t start2 = 0; start2 < traceLenght; start2++) + { + for (uint32_t start3 = 0; start3 < traceLenght3; start3++) + { + traces.push_back(generateRectangleTrace(0, mid, 0, mid, start1, isCCW1)); + traces.push_back(generateRectangleTrace(mid, sz, 0, mid, start2, isCCW2)); + traces.push_back(generateRectangleTrace(0, sz, mid, sz, start3, isCCW3)); + expectedTraces.resize(traces.size()); + expectedTraces.back() = generateRectangleTrace(0, sz, 0, sz, 0, false); + + Nv::Blast::convertTracesToIncremental(traces); + + checkTraces(); + + freeTraces(); + } + } + } + } + + void checkTraces() + { + ASSERT_EQ(traces.size(), expectedTraces.size()); + for (uint32_t i = 0; i < traces.size(); i++) + { + if (expectedTraces[i] != nullptr) + { + ASSERT_TRUE(traces[i] != nullptr && traces[i]->size() > 3); + ASSERT_EQ(traces[i]->size(), expectedTraces[i]->size()); + auto it = std::find(expectedTraces[i]->begin(), expectedTraces[i]->end(), (*traces[i])[0]); + EXPECT_TRUE(it != expectedTraces[i]->end()); + + bool codirectional; + if (it + 1 != expectedTraces[i]->end()) + { + codirectional = *(it + 1) == (*traces[i])[1]; + } + else + { + codirectional = expectedTraces[i]->front() == (*traces[i])[1]; + } + for (uint32_t j = 0; j < traces[i]->size(); j++) + { + EXPECT_TRUE((*traces[i])[j] == *it); + if (codirectional) + { + it++; + if (it == expectedTraces[i]->end()) + { + it = expectedTraces[i]->begin(); + } + } + else + { + if (it == expectedTraces[i]->begin()) + { + it = expectedTraces[i]->end(); + } + it--; + } + } + } + } + } + + void freeTraces() + { + for (auto t : traces) + { + delete t; + } + traces.clear(); + + for (auto t : expectedTraces) + { + delete t; + } + expectedTraces.clear(); + } + + static void messageLog(int type, const char* msg, const char* file, int line) + { + BlastBaseTest::messageLog(type, msg, file, line); + } + + static void* alloc(size_t size) + { + return BlastBaseTest::alignedZeroedAlloc(size); + } + + static void free(void* mem) + { + + BlastBaseTest::alignedFree(mem); + } + + std::vector< std::vector* > traces; + std::vector< std::vector* > expectedTraces; + + static std::vector s_storage; + + static size_t s_curr; +}; + +// Static values +template +std::vector AuthoringCutoutConvertToIncrementalTest::s_storage; + +template +size_t AuthoringCutoutConvertToIncrementalTest::s_curr; + +// Specializations +typedef AuthoringCutoutConvertToIncrementalTest AuthoringCutoutConvertToIncrementalTestAllowWarnings; +typedef AuthoringCutoutConvertToIncrementalTest AuthoringCutoutConvertToIncrementalTestStrict; + +// Two traces with common segment +// ----- +// |0|1| +// ----- +//--gtest_filter=AuthoringCutoutConvertToIncrementalTestStrict.TwoTraces +TEST_F(AuthoringCutoutConvertToIncrementalTestStrict, TwoTraces) +{ + testTwoTracesWithOffset(3, 2, false, false); + testTwoTracesWithOffset(7, 4, true, true); + testTwoTracesWithOffset(7, 4, false, true); + testTwoTracesWithOffset(7, 4, true, false); +} + +// Three traces +// ----- +// |0|1| +// ----- +// | 2 | +// ----- +//--gtest_filter=AuthoringCutoutConvertToIncrementalTestStrict.ThreeTraces +TEST_F(AuthoringCutoutConvertToIncrementalTestStrict, ThreeTraces) +{ + testThreeTracesWithOffset(4, false, false, false); + testThreeTracesWithOffset(4, false, false, true); + testThreeTracesWithOffset(4, false, true, false); + testThreeTracesWithOffset(4, false, true, true); + testThreeTracesWithOffset(4, true, false, false); + testThreeTracesWithOffset(4, true, false, true); + testThreeTracesWithOffset(4, true, true, false); + testThreeTracesWithOffset(4, true, true, true); +} + +// Four traces +// ----- +// |0|1| +// ----- +// |2|3| +// ----- +//--gtest_filter=AuthoringCutoutConvertToIncrementalTestStrict.FourTraces +TEST_F(AuthoringCutoutConvertToIncrementalTestStrict, FourTraces) +{ + traces.push_back(generateRectangleTrace(0, 10, 0, 10, 0, false)); + traces.push_back(generateRectangleTrace(10,20, 0, 10, 0, false)); + traces.push_back(generateRectangleTrace(0, 10,10, 20, 0, false)); + traces.push_back(generateRectangleTrace(10,20,10, 20, 0, false)); + expectedTraces.resize(traces.size()); + expectedTraces.back() = generateRectangleTrace(0, 20, 0, 20, 0, false); + + Nv::Blast::convertTracesToIncremental(traces); + + checkTraces(); + + freeTraces(); +} + +// chess order segments (below for t = 4) +// ------------- +// | 0|10| 4|14| +// ------------- +// | 8| 2|12| 6| +// ------------- +// | 1|11| 5|15| +// ------------- +// | 9| 3|13| 7| +// ------------- +//--gtest_filter=AuthoringCutoutConvertToIncrementalTestStrict.ChessTraces +TEST_F(AuthoringCutoutConvertToIncrementalTestStrict, ChessTraces) +{ + for (int32_t t = 2; t < 9; t++) + { + int32_t sz = t * 2; + for (int32_t i = 0; i < sz; i += 2) + { + int32_t s = (i % 4); + for (int32_t j = s; j < sz; j += 4) + { + traces.push_back(generateRectangleTrace(i - 1, i + 1, j - 1, j + 1, 0, false)); + } + } + for (int32_t i = 0; i < sz; i += 2) + { + int32_t s = ((i + 2) % 4); + for (int32_t j = s; j < sz; j += 4) + { + traces.push_back(generateRectangleTrace(i - 1, i + 1, j - 1, j + 1, 0, false)); + } + } + + Nv::Blast::convertTracesToIncremental(traces); + + expectedTraces.resize(traces.size()); + expectedTraces.back() = generateRectangleTrace(-1, sz - 1, -1, sz - 1, 0, false); + + checkTraces(); + + freeTraces(); + } +} + + +// if convertTracesToIncremental tries to unite 0 and 1 traces the resulting trace breaks into outer and inner traces (hole). +// Currently we don't support it. So need to shaffle traces in a way that inner traces don't appear. +// ------- +// |0|1|2| +// |7|8|3| +// |6|5|4| +// ------- +//--gtest_filter=AuthoringCutoutConvertToIncrementalTestStrict.AvoidHoles +TEST_F(AuthoringCutoutConvertToIncrementalTestStrict, DISABLED_AvoidHoles) +{ + traces.push_back(generateRectangleTrace(0, 2, 0, 2, 0, false)); + traces.push_back(generateRectangleTrace(2, 4, 0, 2, 0, false)); + traces.push_back(generateRectangleTrace(4, 6, 0, 2, 0, false)); + traces.push_back(generateRectangleTrace(4, 6, 2, 4, 0, false)); + traces.push_back(generateRectangleTrace(4, 6, 4, 6, 0, false)); + traces.push_back(generateRectangleTrace(2, 4, 4, 6, 0, false)); + traces.push_back(generateRectangleTrace(0, 2, 4, 6, 0, false)); + traces.push_back(generateRectangleTrace(0, 2, 2, 4, 0, false)); + traces.push_back(generateRectangleTrace(2, 4, 2, 4, 0, false)); + + Nv::Blast::convertTracesToIncremental(traces); + + expectedTraces.resize(traces.size()); + expectedTraces.back() = generateRectangleTrace(0, 6, 0, 6, 0, false); + + checkTraces(); + + freeTraces(); +} + +// if convertTracesToIncremental tries to unite 0 and 1 traces the resulting trace breaks into outer and inner traces (hole). +// Currently we don't support it. So need to shaffle traces in a way that inner traces don't appear. +// --------- +// | | | +// | --- | +// | 0|2|1 | +// | --- | +// | | | +// --------- +//--gtest_filter=AuthoringCutoutConvertToIncrementalTestStrict.AvoidHoles2 +TEST_F(AuthoringCutoutConvertToIncrementalTestStrict, DISABLED_AvoidHoles2) +{ + std::vector*> rightTraces, leftTraces, expectedMid; + + leftTraces.push_back(generateRectangleTrace(-1, 2, -1, 1, 0, false)); + leftTraces.push_back(generateRectangleTrace(-1, 1, 1, 3, 0, false)); + leftTraces.push_back(generateRectangleTrace(-1, 2, 3, 5, 0, false)); + Nv::Blast::convertTracesToIncremental(leftTraces); + delete leftTraces[0]; delete leftTraces[1]; + traces.push_back(leftTraces.back()); + + rightTraces.push_back(generateRectangleTrace(2, 5, -1, 1, 0, false)); + rightTraces.push_back(generateRectangleTrace(3, 5, 1, 3, 0, false)); + rightTraces.push_back(generateRectangleTrace(2, 5, 3, 5, 0, false)); + Nv::Blast::convertTracesToIncremental(rightTraces); + delete rightTraces[0]; delete rightTraces[1]; + traces.push_back(rightTraces.back()); + + traces.push_back(generateRectangleTrace(1, 3, 1, 3, 0, false)); + + expectedTraces.push_back(new std::vector()); + *expectedTraces.front() = *traces.front(); + + expectedMid.push_back(generateRectangleTrace(-1, 2, -1, 5, 0, false)); + expectedMid.push_back(generateRectangleTrace(2, 3, 1, 3, 0, false)); + delete expectedMid[0]; + expectedTraces.push_back(expectedMid.back()); + expectedMid.push_back(generateRectangleTrace(-1, 5, -1, 5, 0, false)); + + Nv::Blast::convertTracesToIncremental(traces); + + checkTraces(); + + freeTraces(); +} diff --git a/tools/ApexImporter/src/ApexDestructibleObjExporter.cpp b/tools/ApexImporter/src/ApexDestructibleObjExporter.cpp index 2a2e21e..ca557b3 100644 --- a/tools/ApexImporter/src/ApexDestructibleObjExporter.cpp +++ b/tools/ApexImporter/src/ApexDestructibleObjExporter.cpp @@ -120,7 +120,7 @@ bool ApexDestructibleGeometryExporter::exportToFile(NvBlastAsset* asset, const D Nv::Blast::ExporterMeshData meshData; meshData.asset = asset; meshData.submeshCount = rAsset->getSubmeshCount(); - meshData.submeshNames = new const char*[meshData.submeshCount]; + meshData.submeshMats = new Materials[meshData.submeshCount]; std::vector materialPathes; materialPathes.reserve(meshData.submeshCount); // gather materials @@ -132,7 +132,8 @@ bool ApexDestructibleGeometryExporter::exportToFile(NvBlastAsset* asset, const D materialPath << m_materialsDir << "\\" << materialName; std::string texturePath = getTextureFromMaterial(materialPath.str().c_str()); materialPathes.push_back(texturePath); - meshData.submeshNames[submeshIndex] = materialPathes[submeshIndex].c_str(); + meshData.submeshMats[submeshIndex].diffuse_tex = materialPathes[submeshIndex].c_str(); + meshData.submeshMats[submeshIndex].name = materialPathes[submeshIndex].c_str(); } } struct vc3Comp @@ -410,7 +411,7 @@ bool ApexDestructibleGeometryExporter::exportToFile(NvBlastAsset* asset, const D delete[] meshData.positions; delete[] meshData.submeshOffsets; delete[] meshData.texIndex; - delete[] meshData.submeshNames; + delete[] meshData.submeshMats; delete[] meshData.uvs; } diff --git a/tools/AuthoringTool/src/AuthoringTool.cpp b/tools/AuthoringTool/src/AuthoringTool.cpp index f097ba1..ad1482c 100644 --- a/tools/AuthoringTool/src/AuthoringTool.cpp +++ b/tools/AuthoringTool/src/AuthoringTool.cpp @@ -41,6 +41,7 @@ #include "NvBlastExtAuthoringMesh.h" #include "NvBlastExtAuthoringBondGenerator.h" #include "NvBlastExtAuthoringCollisionBuilder.h" +#include "NvBlastExtAuthoringCutout.h" #include "NvBlastExtAuthoringFractureTool.h" #include "BlastDataExporter.h" #include "SimpleRandomGenerator.h" @@ -81,11 +82,35 @@ struct TCLAPint3 } }; +struct TCLAPfloat3 +{ + float x, y, z; + TCLAPfloat3(float x, float y, float z) :x(x), y(y), z(z) {}; + TCLAPfloat3() :x(0), y(0), z(0) {}; + TCLAPfloat3& operator=(const std::string &inp) + { + std::istringstream stream(inp); + if (!(stream >> x >> y >> z)) + throw TCLAP::ArgParseException(inp + " is not float3"); + return *this; + } + + operator physx::PxVec3() + { + return physx::PxVec3(x, y, z); + } +}; + namespace TCLAP { template<> struct ArgTraits { typedef StringLike ValueCategory; }; + + template<> + struct ArgTraits { + typedef StringLike ValueCategory; + }; } bool isDirectoryExist(const std::string& path) @@ -124,6 +149,82 @@ bool mkDirRecursively(const std::string& path) return isDirectoryExist(path); } +unsigned char *LoadBitmapFile(const char *filename, BITMAPINFOHEADER *bitmapInfoHeader) +{ + FILE *filePtr; //our file pointer + BITMAPFILEHEADER bitmapFileHeader; //our bitmap file header + unsigned char *bitmapImage; //store image data + //int imageIdx = 0; //image index counter + unsigned char tempRGB; //our swap variable + + //open filename in read binary mode + filePtr = fopen(filename, "rb"); + if (filePtr == NULL) + return NULL; + + //read the bitmap file header + fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr); + + //verify that this is a bmp file by check bitmap id + if (bitmapFileHeader.bfType != 0x4D42) + { + fclose(filePtr); + return NULL; + } + + //read the bitmap info header + fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr); // small edit. forgot to add the closing bracket at sizeof + + //move file point to the begging of bitmap data + fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET); + + //Only incompressed 24 byte RGB is supported + if (bitmapInfoHeader->biCompression != BI_RGB || bitmapInfoHeader->biBitCount != 24) + { + return nullptr; + } + else + { + bitmapInfoHeader->biSizeImage = 3 * bitmapInfoHeader->biHeight * bitmapInfoHeader->biHeight; + } + + //allocate enough memory for the bitmap image data + bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage); + + //verify memory allocation + if (!bitmapImage) + { + free(bitmapImage); + fclose(filePtr); + return NULL; + } + + //read in the bitmap image data + fread(bitmapImage, sizeof(uint8_t), bitmapInfoHeader->biSizeImage, filePtr); + + //make sure bitmap image data was read + if (bitmapImage == NULL) + { + fclose(filePtr); + return NULL; + } + + //swap the r and b values to get RGB (bitmap is BGR) + if (bitmapInfoHeader->biBitCount > 1) + { + for (uint32_t imageIdx = 0; imageIdx < bitmapInfoHeader->biSizeImage; imageIdx += 3) // fixed semicolon + { + tempRGB = bitmapImage[imageIdx]; + bitmapImage[imageIdx] = bitmapImage[imageIdx + 2]; + bitmapImage[imageIdx + 2] = tempRGB; + } + } + + //close file and return bitmap iamge data + fclose(filePtr); + return bitmapImage; +} + bool initPhysX() { gFoundation = PxCreateFoundation(PX_FOUNDATION_VERSION, NvBlastGetPxAllocatorCallback(), NvBlastGetPxErrorCallback()); @@ -233,8 +334,11 @@ int main(int argc, const char* const* argv) TCLAP::SwitchArg nonSkinnedFBX("", "nonskinned", "Output a non-skinned FBX file", false); cmd.add(nonSkinnedFBX); + TCLAP::ValueArg interiorMatId("", "interiorMat", "Use to setup interior material id, by default new material for internal surface will be created.", false, -1, "by default -1"); + cmd.add(interiorMatId); - TCLAP::ValueArg fracturingMode("", "mode", "Fracturing mode", false, 'v', "v - voronoi, c - clustered voronoi, s - slicing."); + TCLAP::ValueArg fracturingMode("", "mode", "Fracturing mode", false, 'v', + "v - voronoi, c - clustered voronoi, s - slicing, p - plane cut, u - cutout."); cmd.add(fracturingMode); TCLAP::ValueArg cellsCount("", "cells", "Voronoi cells count", false, 5, "by default 5"); cmd.add(cellsCount); @@ -252,6 +356,15 @@ int main(int argc, const char* const* argv) TCLAP::ValueArg offsetVariation("", "ovar", "Slicing offset variation", false, 0.0, "by default 0.0"); cmd.add(offsetVariation); + TCLAP::ValueArg point("", "point", "Plane surface point", false, TCLAPfloat3(0, 0, 0), "by default 0 0 0"); + cmd.add(point); + + TCLAP::ValueArg normal("", "normal", "Plane surface normal", false, TCLAPfloat3(1, 0, 0), "by default 1 0 0"); + cmd.add(normal); + + TCLAP::ValueArg cutoutBitmapPath("", "cutoutBitmap", "Path to *.bmp file with cutout bitmap", false, ".", "by defualt empty"); + cmd.add(cutoutBitmapPath); + try { // parse cmd input @@ -452,6 +565,58 @@ int main(int argc, const char* const* argv) } break; } + case 'p': + { + std::cout << "Plane cut fracturing..." << std::endl; + NoiseConfiguration noise; + if (fTool->cut(0, normal.getValue(), point.getValue(), noise, false, &rng) != 0) + { + std::cerr << "Failed to fracture with Cutout (in half-space, plane cut)" << std::endl; + return -1; + } + break; + } + case 'u': + { + std::cout << "Cutout fracturing..." << std::endl; + CutoutConfiguration cutoutConfig; + physx::PxVec3 axis = normal.getValue(); + if (axis.isZero()) + { + axis = PxVec3(0.f, 0.f, 1.f); + } + axis.normalize(); + float d = axis.dot(physx::PxVec3(0.f, 0.f, 1.f)); + if (d < (1e-6f - 1.0f)) + { + cutoutConfig.transform.q = physx::PxQuat(physx::PxPi, PxVec3(1.f, 0.f, 0.f)); + } + else if (d < 1.f) + { + float s = physx::PxSqrt((1 + d) * 2); + float invs = 1 / s; + auto c = axis.cross(PxVec3(0.f, 0.f, 1.f)); + cutoutConfig.transform.q = physx::PxQuat(c.x * invs, c.y * invs, c.z * invs, s * 0.5f); + cutoutConfig.transform.q.normalize(); + } + cutoutConfig.transform.p = point.getValue(); + if (cutoutBitmapPath.isSet()) + { + BITMAPINFOHEADER header; + uint8_t* bitmap = LoadBitmapFile(cutoutBitmapPath.getValue().c_str(), &header); + if (bitmap != nullptr) + { + cutoutConfig.cutoutSet = NvBlastExtAuthoringCreateCutoutSet(); + NvBlastExtAuthoringBuildCutoutSet(*cutoutConfig.cutoutSet, bitmap, header.biWidth, header.biHeight, 0.001f, 1.f, false, true); + } + } + if (fTool->cutout(0, cutoutConfig, false, &rng) != 0) + { + std::cerr << "Failed to fracture with Cutout" << std::endl; + return -1; + } + break; + } default: std::cerr << "Unknown mode" << std::endl; return -1; @@ -462,6 +627,8 @@ int main(int argc, const char* const* argv) Nv::Blast::BlastBondGenerator* bondGenerator = NvBlastExtAuthoringCreateBondGenerator(gCooking, &gPhysics->getPhysicsInsertionCallback()); Nv::Blast::ConvexMeshBuilder* collisionBuilder = NvBlastExtAuthoringCreateConvexMeshBuilder(gCooking, &gPhysics->getPhysicsInsertionCallback()); Nv::Blast::CollisionParams collisionParameter; + collisionParameter.maximumNumberOfHulls = 1; + collisionParameter.voxelGridResolution = 0; Nv::Blast::AuthoringResult* result = NvBlastExtAuthoringProcessFracture(*fTool, *bondGenerator, *collisionBuilder, collisionParameter); NvBlastTkFrameworkCreate(); @@ -491,6 +658,10 @@ int main(int argc, const char* const* argv) if (bOutputObjFile) { std::shared_ptr fileWriter(NvBlastExtExporterCreateObjFileWriter(), [](IMeshFileWriter* p) {p->release(); }); + if (interiorMatId.isSet() && interiorMatId.getValue() >= 0) + { + fileWriter->setInteriorIndex(interiorMatId.getValue()); + } fileWriter->appendMesh(*result, assetName.c_str()); if (!fileWriter->saveToFile(assetName.c_str(), outDir.c_str())) { @@ -502,6 +673,10 @@ int main(int argc, const char* const* argv) if (bOutputFbxFile) { std::shared_ptr fileWriter(NvBlastExtExporterCreateFbxFileWriter(bOutputFBXAscii), [](IMeshFileWriter* p) {p->release(); }); + if (interiorMatId.isSet() && interiorMatId.getValue() >= 0) + { + fileWriter->setInteriorIndex(interiorMatId.getValue()); + } fileWriter->appendMesh(*result, assetName.c_str(), nonSkinnedFBX.isSet()); if (!fileWriter->saveToFile(assetName.c_str(), outDir.c_str())) { -- cgit v1.2.3