【问题标题】:set/unset active state for all openvdb::Grid node为所有 openvdb::Grid 节点设置/取消设置活动状态
【发布时间】:2014-09-19 13:47:14
【问题描述】:

我有一个 openvdb 网格,我想重置所有非背景体素的活动状态。

目前我正在使用一个运算符和函数 openvdb::tools::foreach 迭代所有值节点。 特别是我可能只想对给定边界框内的元素执行此操作

openvdb::CoordBBox myBoundingBox;

struct Activator {
    static inline void op(const openvdb::FloatGrid::ValueAllIter& iter) {

        if ( [not background] )
          iter->setActiveState(myBoundingBox.isInside(iter->getCoord()));
    }
};

// Apply the function to all values.
openvdb::tools::foreach(grid->beginValueAll(), Activator ::op);

1) 有没有更好的方法来打开/关闭所有这些体素?

2) 此外,可以快速设置为打开(或关闭)位于给定轴对齐边界框内且不是背景的所有体素?

例如

openvdb::tree::setActiveState(const CoordBBox &bbox, bool on)

【问题讨论】:

    标签: c++ sparse-matrix voxel


    【解决方案1】:

    openvdb::Grid 公开了以下在这种情况下可能有用的方法

    void clear()
    

    清空此网格,使所有体素变为非活动背景体素。

    void fill   (   const CoordBBox &   bbox,
                    const ValueType &   value,
                    bool                active = true 
                 ) 
    

    将给定轴对齐框中的所有体素设置为恒定值。

    【讨论】:

    • 这些方法改变了相应体素的值。我想做同样的事情,但只改变活动状态,保持值不变。
    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2021-02-02
    • 2020-04-13
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多