OpenSubdiv.OPENSUBDIV_VERSION.Bfr
OpenSubdiv.OPENSUBDIV_VERSION.Far
OpenSubdiv.OPENSUBDIV_VERSION.Osd
OpenSubdiv.OPENSUBDIV_VERSION.Sdc
OpenSubdiv.OPENSUBDIV_VERSION.Vtr

OpenSubdiv.OPENSUBDIV_VERSION.Sdc.LocalMask

概述

OpenSubdiv.OPENSUBDIV_VERSION.Sdc.LocalMask类用于表示顶点的掩码信息。顶点掩码可以用于判断顶点是否需要处理或参与细分等操作。

成员函数

构造函数

LocalMask();
LocalMask(const LocalMask& src);
LocalMask(int size, bool defaultValue = false);
  • LocalMask():默认构造函数,新建一个空的掩码。
  • LocalMask(const LocalMask& src):拷贝构造函数,复制一个已存在的掩码。
  • LocalMask(int size, bool defaultValue = false):按照给定的大小创建一个掩码,defaultValue指定掩码的默认值,默认值为false。

成员函数

void Clear();
void Resize(int size);
bool Get(int index) const;
void Set(int index);
void Unset(int index);
bool IsEmpty() const;
void Or(const LocalMask& mask);
void And(const LocalMask& mask);
void AndNot(const LocalMask& mask);
  • Clear():清空掩码,将所有值重置为默认值。
  • Resize(int size):重新调整掩码的大小,如果新的大小比旧的小,则截断多余的部分,如果新的大小比旧的大,则自动扩展。
  • Get(int index) const:获取给定索引位置的掩码值。
  • Set(int index):将给定索引位置的掩码值设置为true。
  • Unset(int index):将给定索引位置的掩码值设置为false。
  • IsEmpty() const:判断掩码是否为空。
  • Or(const LocalMask& mask):将自身的掩码值与另一个掩码值做按位或运算,并保存到自身。
  • And(const LocalMask& mask):将自身的掩码值与另一个掩码值做按位与运算,并保存到自身。
  • AndNot(const LocalMask& mask):将自身的掩码值与另一个掩码值做按位与非运算,并保存到自身。

示例

#include <OpenSubdiv/sdc/local.h>

void TestLocalMask()
{
    OpenSubdiv::Sdc::LocalMask mask(6, true); // 创建一个大小为6的掩码,并将所有值初始设为true

    // 取消第3个和第5个位置的掩码值
    mask.Unset(2);
    mask.Unset(4);

    // 输出掩码的状态
    for (int i = 0; i < mask.GetSize(); ++i)
    {
        printf("%d ", mask.Get(i));
    }
    // Output: 1 1 0 1 0 1

    OpenSubdiv::Sdc::LocalMask mask2(4, false); // 创建一个大小为4的掩码,并且所有值初始设为false
    mask2.Set(1);
    mask2.Set(3);

    // 对两个掩码做按位或运算
    mask.Or(mask2);

    // 输出结果
    for (int i = 0; i < mask.GetSize(); ++i)
    {
        printf("%d ", mask.Get(i));
    }
    // Output: 1 1 1 1 0 1
}

注意事项

  • 控制掩码的使用需要谨慎,如果不正确使用,在细分等操作时可能会出现不可预料的错误。