n planes matrices as input of jit.gen / how to retrieve planes ..?

Julien Bayle's icon

if I sent an n planes matrix to a jit.gen, what is the rule to retrieve a particular plane ??

I'm currently sending an 1x1 matrix with 4 planes to the first inlet of my jit.gen
I'm mapping the in 1 to a codebox, on the first inlet too
so in1.x, .y, .z are the first 3 planes

how can I have the fourth and more generally, the n-th for an m planes matrix ?

ćwiek's icon

if i am right the swiz message works like unpack. for example swiz r - red plane, or for geometry swiz 0 for x :)
have you checked out gen tutorials? they are great!
https://cycling74.com/tutorials/gen-tutorial-1-the-garden-of-earthly-delays/

Julien Bayle's icon

I checked those. probably not enough.

so swiz n would "unpack" the plane n ..?
mmmh
testing.

Julien Bayle's icon

it works (of course it does, I didn't think ever you pointed me on a wrong way :)

I thought about a solution inside a codebox/genexpr, but this is totally ok to split things before then to wire the codebox.

MAXi thanks, napentro :)

dtr's icon

in1.0, in1.1, etc doesn't work?

Julien Bayle's icon

it doesn't
in1.x, in1.y, in1.z ... works very fine
but grabbing the 4th planes (and the other) ... I don't know.

swiz works correctly. but if you wanted to do all in codebox .. I couldn't help :-/

4047.in0.1.PNG
PNG
dtr's icon

4th plane you should get with in1.w .x .y .z or .r .g .b .a (doesn't matter if it's not colors in your matrix). 4+ planes i don't know...

Julien Bayle's icon

oh .. so 6 would be u, v, w, y ,x,z ?
I'll test that asap :p

but you know, swiz is the way I guess
easy numbering 0, 1 ,2 with swiz 0, swiz 1 for the 2 first planes etc

(still in the view frustum culling stuff here :)

FineCutBodies's icon

A bit different question, but I'm trying to swiz a 12 plane matrix, but

"swiz 10 11" will be translated as "swiz_3 = swiz(in1, vec(1, 0, 1, 1));"

so seems swiz can handle only 0-9 planes?

is there a workaround for this?

thanx in adv,
Kevin

ps: i can do it if i write in a codebox "out1 = swiz(in1, vec(3,4,5,6,7,8,9,10, 11));" but i'm not sure it's the best solution...

Eldar Sadykov's icon

The syntax for codebox is: out=swiz(in1,n);

metamax's icon

The first four elements of a vector can be addressed with r, g, b, a or x, y, z, w, respectively.
ex: var.b or var.yyz.

The swiz operator takes two args and can address any vector element using the above variables, a number or a vector.
ex. swiz(var, z) is the same as var.z... or swiz(var, 8) is the 9th element of the var vector.
ex: swiz(var, vec(3, 2, 1, 0)) is equivalent to var.wzyx.

You can use swiz in place of letter variables but you must use swiz for any element beyond the fourth.

What you can not do is include more than two arguments for swiz.
ex: swiz(var, 8,7,6,5) is NOT valid. Use swiz(var, vec(8,7,6,5)).

For something more flexible, you can create a param to map planes and a function to swiz the planemapping vector.

In [codebox], it might look something like:

mapthis (x, n) {
return vec( swiz(x, swiz(n, 0)), swiz(x, swiz(n, 1)), swiz(x, swiz(n,2)), swiz(x, swiz(n,3)), 
            swiz(x, swiz(n, 4)), swiz(x, swiz(n, 5)), swiz(x, swiz(n,6)), swiz(x, swiz(n,7)), 
            swiz(x, swiz(n, 8)), swiz(x, swiz(n, 9)), swiz(x, swiz(n,10)), swiz(x, swiz(n,11)) );
}
Param mplane(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
out = mapthis(in1, plane);

Note that it's NOT possible, given the above example, to simply use:

out = swiz(in1, mplane);

Not sure why that is. [jit.gen] seems to be interpreting the param variables as single elements not a vector (resulting in more than one arg for swiz?) , which is odd because [jit.pix] (which limits vectors to 4 elements) limits the number of param elements that can be used as if multi-value params were equivalent to vectors. If anyone knows of a simpler way to reproduce the behavior of the planemap operator in an genexpr function, please share.

Last thing.. as mentioned, pix objects handle plane mapping differently than [jit.gen]. Specifically, vector length limits and the way that alpha is mapped. Be sure to look it up.

metamax's icon

To clarify, the [swiz] patcher object can take more than one variable. Only the [codebox] version seems to require multi-element references to be packed into a single vector.