跳转到内容

metaimport

int  metaimport(int handle, string attrib, vector P, <type>&value)

<type>[] metaimport(string file, string attribute, vector P)

这种形式不是逐个迭代所有值,而是同时从所有元球中导入值。与标量形式一样,您可以使用以下关键字…

  • meta:density
  • meta:prim
  • meta:transform

…来从元球中导入非属性信息。

当您使用metastartmetanext获取元球句柄后,就可以用metaimport查询元球的属性。

有三种”特殊”属性可以查询:

float meta:density: 当前元球的密度

float meta:prim: 当前元球的图元编号

matrix meta:transform: 与当前元球关联的变换矩阵。应用此变换的逆矩阵可以将点转换到元球的”空间”中。

例如,metaweight函数可以用以下方式表示:

float
metaweight(string file; vector P)
{
int handle;
float density, tmp;
density = 0;
handle = metastart(file, P);
while (metanext(handle))
{
if (metaimport(handle, "meta:density", P, tmp))
density += tmp;
}
return density;
}

评估的属性不会被该位置元球权重预乘,必须进行乘法运算才能混合。例如,要评估元球上的矢量属性(比如颜色),可以使用以下函数:

vector
meta_attribute(string file, attrib_name; vector P)
{
int handle;
vector result, tmp;
float density;
handle = metastart(file, P);
result = 0;
while (metanext(handle))
{
if (metaimport(handle, "meta:density", P, density))
{
if (metaimport(handle, attrib_name, P, tmp))
result += density * tmp;
}
return result;
}

在i3d上下文中,有一个默认的元球几何体(由i3dgen程序的命令行-g选项指定)。如果文件名为空字符串,则将使用默认几何体。