• 【partio】仿真粒子数据格式转换器partio的用法


    说明

    partio是迪士尼2010年推出的仿真粒子格式转换器。

    可以用来统一houdini、renderMan、Maya等不同软件中的粒子数据格式(GEO, BGEO, PTC, PDB, PDA)。

    http://partio.us/index.html

    它可以作为C++的一个库使用,也同时具有python的API。但是python API较慢,建议C++。

    使用方法

    数据格式

    首先了解下数据格式。

    partio只是个数据转换器,它在磁盘上是没有自己的格式的。但是你可以想象它在内存中具有一定的数据格式。基本格式就是粒子编号+粒子属性。

    如下所示

    Number of particles:  9998
    
    Type      Count     Name                          
    ----      -----     ----                          
    VECTOR    3         position                      
    VECTOR    3         v                             
    INT       1         id                            
    INT       1         parent                        
    FLOAT     3         Cd                            
    
    particle 0 position 0.536567 1.17344 0.523275
    particle 1 position 0.495414 0.913424 0.434151
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    粒子具有id,然后具有4个属性。

    库的使用方法

    首先请注意:该库依赖于zlib。因此请先自行安装zlib。windows下建议用vcpkg安装。

    我们下载好源代码,把里面的lib文件夹下面的源码拷贝到自己的项目中。

    比如我们新建一个空白的文件夹my_partio

    目录结构为
    目录结构为
    .
    ├── CMakeLists.txt
    ├── DataDir.h
    ├── Filesystem.h
    ├── Partio.h
    ├── PartioAttribute.h
    ├── PartioIO.h
    ├── PartioIterator.h
    ├── PartioVec3.h
    ├── core
    ├── io
    ├── test.bgeo
    └── test_mypartio.cpp
    在这里插入图片描述

    其中test.bgeo是从下载的源码的data文件夹下拷贝过来的,用于测试。

    我们写一个最简单的测试程序
    test_mypartio.cpp

    #include "Partio.h"
    using namespace Partio;
    int main()
    {
        // 读取文件
        Partio::ParticlesDataMutable* data=Partio::read("E:/codes/try/partio/my_partio/test.bgeo");
        // 计算粒子数目
        std::cout<<"Number of particles "<<data->numParticles()<<std::endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    更改CMakeLists.txt文件

    cmake_minimum_required(VERSION 3.21)
    
    project(test_mypartio)
    
    file(GLOB io_cpp "io/*.cpp")
    file(GLOB core_cpp "core/*.cpp")
    
    add_library(mypartio  ${io_cpp} ${core_cpp})
    set_target_properties(mypartio PROPERTIES
        OUTPUT_NAME mypartio
        POSITION_INDEPENDENT_CODE ON
    )
    
    
    IF(MSVC)
      target_compile_definitions(mypartio 
      PRIVATE 
        PARTIO_WIN32=1
        _USE_MATH_DEFINES=1
        )
        target_compile_options(mypartio 
        PRIVATE 
          /W0)
      # ADD_DEFINITIONS (-DPARTIO_WIN32 -D_USE_MATH_DEFINES)
      # set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0")
    ELSE(MSVC)
      target_compile_options(mypartio 
      PRIVATE  
        -Wextra 
        -Wno-unused-parameter
        -fPIC
        -w)
      # ADD_DEFINITIONS (-Wextra -Wno-unused-parameter)
      # SET( CMAKE_CXX_FLAGS "-fPIC -w")
    ENDIF(MSVC)
    
    target_compile_definitions(mypartio 
    PRIVATE 
      PARTIO_USE_ZLIB=1)
    # ADD_DEFINITIONS (-DPARTIO_USE_ZLIB)
    
    
    target_include_directories(mypartio
        PUBLIC
        ${CMAKE_CURRENT_LIST_DIR}
        )
    
    find_package(ZLIB REQUIRED)
    if (ZLIB_FOUND)
        target_link_libraries(mypartio PUBLIC ZLIB::ZLIB)
    endif()
    # target_include_directories(mypartio PRIVATE ../zlib/src)
    
    
    option(TEST_MYPARTIO "test my partio" ON)
    if(TEST_MYPARTIO)
        add_executable(test_mypartio test_mypartio.cpp)
        target_compile_definitions(test_mypartio PRIVATE  PARTIO_USE_ZLIB)
        target_link_libraries(test_mypartio mypartio )
    endif()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    打印结果:

    Number of particles 5
    
    • 1

    下期:
    继续探索partio

  • 相关阅读:
    背包问题学习笔记-混合背包问题
    IoT 从业多年的你,真的懂 SIM、eSIM、iSIM 物联网卡吗?
    C++的阻塞式消息总线message_bus实现
    spring事务出现的超卖问题
    ABAP BOM按层级删除数据
    Set与二分法效率
    基于LDABPSO算法的烟叶复烤配方关联特征挖掘
    Python与CAD系列基础篇(九)图层相关操作
    解决本地jar包导入maven
    web批量导入(包括文本和图片)
  • 原文地址:https://blog.csdn.net/weixin_43940314/article/details/127746739