Pack
Transform Packed Geo
Position:
simply stored in point position
Rot&Scale:
is stored in intrinsic:transform(matrix 3) in primitive level
attribVOP
use Set Attribute
attribWrangle
primintrinsic(0,"transform",@primnum)
setattrib($handle, $atype, $attrib, $i1, $i2, $value, $mode); *i1 is prim number
setattrib(0, "primintrinsic", "transform", @primnum, -1, 3@opinput1_mat, "set");
f[]@intrinsic_bounds = primintrinsic(0, "bounds", @primnum);
*order is (xmin, xmax,ymin, ymax,zmin, zmax)
matrix3 trans = primintrinsic(0, "transform", @primnum);
intrinsics
bounds
fragmentattribute
fragmentname
indexorder
measuredarea
measuredprimeter
measuredvolume
memoryusage
packedbounds
packedfulltransform
packedlocaltransform
packedprimitivename
packedrenderbounds
packedtypelabel
packedtypename
pivot
primitivetokens
transform
typeid
typename
vertexcount
viewportlod
Pack Transform
vector restP = point(1,"P",0);
matrix restR = primintrinsic(1,"packedfulltransform",0);
matrix moveR = primintrinsic(2,"packedfulltransform",0);
vector moveP = point(2,"P",0);
@P -= restP;
@P *= invert(matrix3(restR));
@P *= matrix3(moveR);
setattrib(0, "primintrinsic", "transform", @primnum, -1, invert(matrix3(restR)) * matrix3(moveR), "set");
@P += moveP;
Pack Bound
float bound[] = primintrinsic(0,"packedbounds",@primnum);
@size = (bound[1] - bound[0]) * (bound[3] - bound[2]) * (bound[5] - bound[4]);