目录
- Hello World
- Creating and writing a grid
- Populating a grid with values
- Reading and modifying a grid
- Stream I/O
- Handling metadata
- Iteration
- Interpolation of grid values
- Transforming grids
- Combining grids
- Generic programming
- “Hello, World” for OpenVDB Points
- Converting Point Attributes
- Random Point Generation
- Point Iteration, Groups and Filtering
- Strided Point Attributes
- Moving Points in Space
代码示例:
https://www.openvdb.org/documentation/doxygen/codeExamples.html#sHelloWorld
Hello World
初始化
创建网格
从网格获取访问器
创建坐标
修改坐标
访问器访问指定坐标
遍历网格
Creating and writing a grid
创建 openvdb::io::File 类型的对象,使用它来读写 vdb 文件
Populating a grid with values
第一步只创建表面周围的 SDF 值,也就是创建一个窄带
窄带的 SDF 值的区间取为 [-background_SDF, background_SDF]。background_SDF 是正数,是背景的 SDF 值
按照一定的间隔,跳跃着遍历立方体 grid
遍历到的元素的 SDF 值如果在这个区间内,也就是在窄带内,那么就赋值,否则跳过
具体怎么计算遍历到的元素的 SDF 值,是 (x,y,z) - center 的长度减去球的半径
Reading and modifying a grid
遍历一个 openvdb::io::File 对象中的所有网络,根据网格名字查找到某一个网络
用网格基类存储查找到的网格。如果已知网格子类的类型,就可以直接 cast。
遍历 active 的 grid 元素,这些元素对应窄带 narrow band 元素
遍历 inactive 的 grid 元素,这些元素对应内部 interior 的元素
Stream I/O
写入(读取) string 流或者文件流
Handling metadata
元数据
Adding metadata
添加元数据
重复添加相同的名字相同类型的值,那么就是覆盖
如果是重复添加相同的名字不同类型的值,那么就报错
Retrieving metadata
已知元数据的数据类型,根据名字可以获取值
遍历元数据 map
可以获得元数据的 string 形式的类型名称,进而得知某个元数据的数据类型,进而进行类型转换
Removing metadata
删除不存在的元数据,不会报错,但是也没有效果
Iteration
Node Iterator
遍历树
Leaf Node Iterator
遍历叶子节点
遍历常量叶子节点
转换成引用或者指针
Value Iterator
遍历 active 的 grid 元素,这些元素对应窄带 narrow band 元素
遍历 inactive 的 grid 元素,这些元素对应内部 interior 的元素
Iterator Range
怎么使用 tbb 的 parallel_for 并行执行任务
首先要输入 openvdb 提供的迭代器
然后要自己创建一个重载了括号运算符的结构体
输入这个结构体作为任务
这个结构体的括号运算符的重载就是任务主体。它接受一个迭代器
,这个迭代器的范围是由 tbb 划分的,原始迭代范围的子区间
Interpolation of grid values
需要在分数坐标的值的时候,就需要在整数坐标的值之间插值
GridSampler 用于插值
GridTransformer 用于对所有值进行变换
Index-space samplers
在索引空间中插值
零阶插值 最近邻
一阶插值 线性
二阶插值 二次函数
通过树 grid.tree() 来访问是线程安全的,但是因为没有缓存,所以是次优的
最佳的是通过访问器,例如 grid.getConstAccessor()
因为访问器采用了缓存
也因此,访问器必须是一个线程一个访问器
Grid Sampler
GridSampler 可以在索引空间或者世界空间中插值
使用网格来构造 GridSampler,GridSampler 会自动获得索引空间到世界空间的变换
但是使用树或者访问器来构造 GridSampler,需要提供变换
用访问器构造 GridSampler 更快
Dual Grid Sampler
有些时

最低0.47元/天 解锁文章
5787






