VOP | Point Cloud

12 篇文章 0 订阅

目录

Point Cloud Open —— 打开点云文件并搜索源位置周围的点

Point Cloud Find —— 返回最近点的点号列表

Point Cloud Find Radius —— 返回最近点的点号列表并考虑被搜索点的半径

Point Cloud Filter —— 过滤查询到的点以生成加权值

Point Cloud Farthest —— 查找最远点距离

Point Cloud Iterate —— 前进到下一迭代点

Point Cloud Import —— 在pcunshaded或pciterate循环内导入点数据

Point Cloud Import by Index —— 在pcunshaded或pciterate循环内导入点数据

Point Cloud Num Found —— 返回搜索到的点总数

Point Cloud Export —— 在pcunshaded循环内导出点数据

Point Cloud Unshaded —— 前进到下一unshaded迭代点

Point Cloud Close —— 关闭由pcopen打开的句柄

Point Cloud Write —— 将写出数据到点云文件


Point Cloud Open —— 打开点云文件并搜索源位置周围的点

        打开点云文件(.pc)并排队访问点(以某位置为中心),底层调用的是pcopen函数;

  • handle,点云句柄(将作为pcfilter或pciterate等的输入);

  • file,待加载文件的名字(点云文件使用.pc扩展名,也可加载几何体文件作为点云);
  • pchannel,通道名(包含将被搜索的位置);
  • P,查询位置(将从此位置搜索文件中的点);
  • nchannel,可选的法线通道(限制搜索点的法线与之对齐);
  • N,查询法线(搜索点需符合dot(N, Npoint) > cos(cone),即可认为是夹角);
  • radius,最大搜索半径(如事先知道搜索半径,指定此值以加速);
  • maxpoints,搜索最大的点数;
  • preload,在执行搜索前是否加载整个点云文件,关闭会降低性能但可提高内存使用率;

Point Cloud Find —— 返回最近点的点号列表

        打开几何体文件并返回点列表(在P位置的radius半径内),对应pcfind函数;

i[]@pts = pcfind(1, 'P', @P, ch('radius'), chi('maxpoints'));

Point Cloud Find Radius —— 返回最近点的点号列表并考虑被搜索点的半径

        打开几何体文件并返回点列表(在P位置的radius半径内),每个被搜索点会被指定半径属性扩展,对应pcfind_radius函数;如指定半径属性不存在,则等价于pcfind;

i[]@pts = pcfind_radius(1, 'P', 'pscale', 1, @P, ch('radius'), chi('maxpoints'));

Point Cloud Filter —— 过滤查询到的点以生成加权值

         过滤由pcopen查询到的点,以生成加权值,对应pcfilter函数;

//maxd最远点,w_i是距离d_i处给定点的权重
//距离越近权重越高
w_i = 1-smooth(0, maxd*1.1, d_i);

Point Cloud Farthest —— 查找最远点距离

         返回最远点距离,对应pcfarthest函数;

Point Cloud Iterate —— 前进到下一迭代点

        既可开始一个点迭代或前进到下一迭代点,通常作为while循环的条件输入,在循环体内使用Point Cloud Import来获取迭代点信息,对应pciterate函数;

        通常应遍历所有点,如未迭代所有点,在shader内执行其他操作前,应使用Point Cloud Close关闭点云;

//帮助案例由vop改为vex
int handle = pcopen(1, 'P', @P, 10, 50);

int condition = 1;
float constant = 0;
int condition2 = -1;

while(condition)
{
    condition = pciterate(handle); //迭代成功返回1
    if(condition)
    {
        float data;
        pcimport(handle, 'check', data); //获取搜索点的信息        
        constant += data;
    }
    condition2++;    
}

@Cd = constant/condition2;

Point Cloud Import —— 在pcunshaded或pciterate循环内导入点数据

        在pcunshadedpciterate context内导入点信息,返回的数据应与当前迭代点对应;pcimport应仅与点云迭代一起使用,对应pcimport函数;

两个特别的通道名

  • point.number,点号;
  • point.distance,距离,仅在unshaded points下有效;

Point Cloud Import by Index —— 在pcunshaded或pciterate循环内导入点数据

        从pcunshadedpciterate context内导入点信息,返回指定索引的数据;通过使用此节点和Point Cloud Num Found,可使用For遍历所有点,对应pcimportbyidx*函数;

  • idx,指定搜索的哪个点(0~pcnumfound()-1);

两个特别的通道名

  • point.number,点号;
  • point.distance,距离,仅在unshaded points下有效;

Point Cloud Num Found —— 返回搜索到的点总数

        返回由pcopen查找到的点总数;

Point Cloud Export —— 在pcunshaded循环内导出点数据

        在Point Cloud Unshaded context内导出点信息,返回的数据应与当前迭代点对应;一旦为给定迭代点导出了数据,该点就再也不会被pcunshaded循环处理;pcexport只能与pcunshaded循环一起使用,否则其行为将是未定义的;通道名应与提供给pcunshaded循环的通道匹配,通道不应已存在于点云文件中;对应pcexport函数;

Point Cloud Unshaded —— 前进到下一unshaded迭代点

        既可开始一个新unshaded点迭代或前进到下一unshaded迭代点;unshaded迭代与迭代不同,点仅被迭代一次,因此每个点的计算可以执行一次并过滤多次;通常应用作while循环条件的输入,在循环体内使用Point Cloud Import来获取迭代点信息,Point Cloud Export来存储shaded信息;对应pcunshaded函数;

        通常应遍历所有点,如未迭代所有点,在shader内执行其他操作前,应使用Point Cloud Close关闭点云;

int handle = pcopen(texturename, "P", P, maxdistance, maxpoints);
while (pcunshaded(handle, "irradiance"))
{
    pcimport(handle, "P", cloudP);
    pcimport(handle, "N", cloudN);
    ir = computeIrraciance(cloudP, cloudN);
    pcexport(handle, "irradiance", ir);
}
pcfilter(handle, radius, "irradiance", ir);

Point Cloud Close —— 关闭由pcopen打开的句柄

        关闭由pcopen打开的句柄,以便该句柄不在被其他点云节点使用;通常没有必要使用,但如果迭代部分点,可能需要使用该节点以避免在shader计算期间出现警告;

Point Cloud Write —— 将写出数据到点云文件

        最多两个label/value,写出数据;点云文件可用于计算subsurface scattering,ambient occlusion,及indirect diffuse;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值