Position Rotation and Scaling on Matrix Data
There are a few OpenGL objects in Max that work with 3D position data stored in a matrix, e.g. jit.gl.mesh, jit.gl.multiple, and jit.phys.multiple. With the introduction of jit.gen, it is very easy to apply position, scaling, and rotation transformations to this data, prior to sending it to the receiving object.
Below is a basic patch that demonstrates the gen patch on matrix data sent to jit.gl.mesh: <maxpat>
begin_max5_patcher----------
1785.3oc2as0bZiCE9YxuBO7XWJit3q6SY+SruzoCiAKHp0XSkEIzsS+uuRV 1DavxHRrUnLjAHRx1emuyQmKRhe8vjoKyOPJl572NewYxje8vjIkMIaXR0+O Y513CqRiKJG1zLxK4K+1zYpt3jC7xlKbVFmsgxq6flT1rXne10utwr8ay2yS I7xaEnp0B9OSIkitw3nY0CCV03tX9pmnYaVvHq3JD6G.mCl4fhhje3gK+Gzb fyWkWxue3A4ayFOAyarDLbTvnKXL8BFVifUiXUS7etinf6zoNe0LYFnWlg3v RgsTx8fVVWhcGKcYn6bOgn3CG.UYLmy1S6B9390XxKrbv+XeLuIur3EZB+IY Wdf4f2s98h7.Fqrr8beWDw5zbwysKh.0MQfNBLV7VBmvVPxhWpDE8h8LmoRK l9D+04rswkhn+ay6ELPYwCFIKCfgVFEqhEh1GhoQ.1ug6NXHXbrMPfWUZY7L gcPYW+CiFm9ga0HgTA8+JGFDcjuu1PgfvAvXROCBueYv.LX3XPMAf3NKcR6h WQcxq+KgkDmE2OydF6Uxby5eloFtZUdZNqJbrT9Ay8.vHen7axYlR13MZXph +gUt8wCtgI9N1vLzczML2E+cg1U8WWzq20RuuoTEk270wqZoCFXKU7ksTwdx OBFIWnP26WK0pxVFlLZzyfd2uLnqm+vwfWYPHXvcaPn55ownwLHDL790vzCB FcCSYPn0xWcwsQVKBjch1TaRphpGMRqK.zz0EXWdAkSyy5t.Pe2ws.vJ2dUE .hfiTsvPjgrAKmGyIKxYID1zwTvgBEubUQ.Ut8wiSHyf6WGSpkUZjS43NNiC H1e3HPMN1+FkO+kbVZhyiJZvA10rytoR7EoqYCjSHfhAJyQ.BwVcA.Buay8p Z8uG2TuP92wyPi.i9Lz9R8BEbmk5UkE4fj4UOd7H6SILTyMboIo5NfS3SoE7 asI70oz..uqY78vuaHYcQrCHuJdJKDykYzC2NrqJJkKrbQpbidkbadIDVEkV woB.RSIOSXExT7e8AHR4c2tFMOowkHUDeSg9fYGahloZBbrIF4YZ806er0Xl .3bAp2yTL0gvZWzxaStHw5LQN5RnnZTXR7P8M7XMRdkxG12Ws2okSUc8AuJt BymMMHYv7nYMdC1bfjDQANBpz3KX4lz7UemjzTbmluijQy1wHEjLQMBUx8wt SHqi2mxWzs8P69OYkNa2oFK2IS2vnI4YRXzROJat9AJL1TlWsHpxQjEuqiKV LuQv4Z5rPHl6KVFyjp4p.jn5N444os6530kRVyq5dGMK6DdjmuSemL5lm54Z WlK5bae26xdJVrOS06Bg6D9hh3may273zzJ+Ksu8Ghynh48DNUoDPficpRR3 ohUr7zzVxqpmm6nmDwLjUjiESCZZNHFNcWsYzziZ4D5FRAuca73MEsa4L+Ph l1urxCvBNY6tTgTzd.sNvOMmt2zSbq16yi7oYQHxkxobijcfxWMGUCezgMau OqcsoVbgzKzvNZ1igd7fq8DrnMYMjqpRdUzOXT6neSpi.V4xa30AeRCm6Mhb ZKBB0OA4G1XIdB7rM87WZnG7ME8fAAeLziZFb8hA5.juzvXn69IwnpCnS0oS w5pAYoCJUfVOoA28JA0twBQg1VG7CVNWCq6+Ay5lvtF4mAh75rHswmcoYZso g+AvtWv1s5vtTRtppVrI2Jjbsjq6ambACF6AMJFnqpbOTuz2q02jRyzkXa4y P1e27ZQ9d1pZqjpPaNfVVKhD0EEOdrduubLoAQVtMG2SzjDR1orUBsPVafpJ EirAtVDGXHh8OabeTHFdEH91fiCMDwd2LHFaHhcuYrJ7uBN91.wdWguhg.wU dAUsLLKlZZdbhZOiNeO47Gr09+x6aRifG3q+jSAd8WORXvXslyjC6XNOV9dQ VNa6W.e8SvpuBkeEzEIBdyGa524RR26goTCGitDGCQfFmSxwfkUBnC1Ysvzj iQhDTE+0AyFE7GDwdQi2HE85FMZ6XR57sjhmbdLgE+xB4hvKJ0mJPtyiketP JBcyz9+AQzQWb2Sp1D0vtsfKgT67IUD+owFpn+9yezjLwNOVv4wANyLvXzDX .bPg1COgMSPRGdbsGd7MgejjHxJ3wyT3.sBbBLEN1QaAMQaEYO7DYB+TlAfs HnSdVZzX1COl3MzhS2g3aK5w0D6mH6gGOSwicb+.CMEO1w67IpBM3wh9CCLH Z5I17iIdj+diugldI+kUdQ54DLOp3wnn6VjeLxanm0ldgflhG639AALEOVZ5 kQQSA2X3AdigGK5N71JaCjIYafsH83cakMOxjrMvt1M59kviqmcCmdQ77VWa C0BubxQRUBkSNJpmbLTO+Hnp+3md5QOU7j+8C+OP2+mnT
end_max5_patcher-----------
</maxpat>
Taking this a step further, you can utilize the jit.anim family of objects, creating complex transform node hierarchies, or automatically animating transformations, simply by querying the "worldpos", "worldquat", and "worldscale" values of jit.anim.node.
A basic example of this below: <maxpat>
begin_max5_patcher----------
1637.3oc2Z1rbihCD.9rySgJebVutP7qYOk8kXujZJWxFEGkEKXDhDO6Ty69 pe.LXirwS.LYpTE1oEH59Sc2pkr9wCyluI4.NaN3u.OAlM6GOLalRjTvrh+e 178nCaiQYpaaNE+dxlWmuP2DGefqDGmfh1fn6JafDoDKt0+zoTFMeeRNOFyU 8DrPpVD+6oXsZLW0MfuVzbF+6wpVlWqaHzS6kTDe6KD5t0L7VttiBsW5s.33 XuzZAv2Rd0V7cvWkOwOe3A4kEczp2lreOlxOyrQTxdDW7dAzjHbKFusAq2xn 4sIeyFsHXCIYjHkT6FRSSHTkpHsuaiO1vPESBgxOB8jWcB6Y.khXBwFoi8jk NtPWEcrBjeDD7gnChyY4j1.f0kCNjOnliIYDNIgVGvqemDweQ1ruek8cV3Te DJ4F5nfgm9CmOVvjgTHuR3KEASLxgV.UP6bx1jUK5r0kcVOw.kQC0dBddCAA xx2jwI7bNF7dBKNJaKJFCTWaAIvvajI2DIru.IVoBMbBTYVgENECLK9VNhCj WZiDqtSjvQGITRBW2wfDhTAfSSGTGFA2IX.UYgN5VrZnRRHmzcogYTftCo0e wzCg0RQFD9gL983rLzN7YV+NLuzEXAn7ejAEG+OiYKt0xv5QWhp4MfCgKAGr AroMKFditB55W6uBPKsdKUjfyfjbfAhXn2ay5sFpwaqqZwESRNPoCMYwg2Zs jcdgDgxER3oG.c8uGo0VcmxpUlSWuHpOXVsqY6QLxaXvixgWdB3cQxLvi7bF E.k+0BUtW45sCpSEaa3PgEUF8BRfoHwJZZkCFRz4bINTlrq+JM1yROwuyfMw +NbaE7TsFxmSnbJZu1F9GLKBQQC1xFjurLx+oWJpc0xu1lDmvJhcjXvZomEL zGt.nW9fDJ+Rz0sH8iNDzoV+ndDLq.oELUnfjX7aXVlrJwiu.wRJSSqIdVsG QNP7pV6CVTIhP0hrpDwvuQJed+JoHlPw4BsNmoI0gU9yO1Mh7ZLpXMvRUQKT 3R7PYGVUPsmx9bzoc7bbzobsNZtB2mc0fr0xvE0t.qei3HhbqYV24GXyt3js +KNpt4NOIESIzTFNCS4HdgcW0bD9YTdLec69CMa+YzVrwG1fm6r46XjnDpTM ZLNJEW9BENaZ2qFfRcGTTZKOrHtQvbCMlILy7rMHlbXtX2VrKajmjD2ropmK F+Lun4TBkdBG4IolajQ18xEd1MIhF2eo9V0R15bpt00hzI70Yn2ZxaNJNtH+ Ryt+fdi7vbhdPv1ppQcd2Wx1xRhiaXu5VdqkVhDQHawUaOiUc2AwsSRKcilW MJGQ1gy3MkwQ6xZJ4r7PyjKOrHCvZNdeZrvJZdCM1h25g60yD2P9kxHe116g 1q2ghFyRap9kqkm1bAqWonUCzo70cZjm4L3Fq20XIR1t5Zd0k9Bqkft74Ty. Vjxq+GC9hAl6MfLssE.ZBP955AzYnB7Fa77GFviyjBONE6y7niGcDb49IArj +YfX1+1GDaG.0kv5eeFFTaxoZHvXlzfe6GDbTw.P6Ui8Xv2XIbCT2+NS8tP2 NkmAZqoqk0XSWB0nOM7S.cuhuqO7nqqiyXyVgkaDtt+5v0p2nGrSyA5pWtm8 Ew2w02DSnlJrU8Njs2NWyRxYaK8RJlZCX0vaQTntXwiUq26ophFDU4V+9dgD EgomRqHRlbsA5UozIefaUiC5nF6e18cuzX3MnwSCFupiZr2jQic5nF6NY7J7 uAFOMzXuaHWQenwEYA0R5mMS8BmVKneqam5eyHn3d9fb0XxCma+D5n20Y05l VEzbNi9aOmwGRYfGUWynIr8OY80u.K9JT9UqV+w2f2JE6osj9jxy6Disu5gd wtnZQughxZCD3.dV3ZxcrEEnBfsQ1vfOQf8pNugZ75FNTbcW7x83rWz+nZqk aBOPcl3x.Op9bszDZmz9eh.c3U+0S70HdU6dvJUpY8jZve5bCE3+7ZaZjr2v DBMJm37ICNehfy7C5r5.qWQhA0A5NZ5i7XNdU7Lh5CD1A8IXzTmfNnM1iGbr lVzIrK34TkdPAjeGTnvwCPcIXObDce5xvEbZEqeR96AUebmTSUrpKyTLh9xA cQeFwYR6DeBGW9LglqX0zRcBmTpyzJR2tCZi+noMCYAy5x4O4fNIUjSNfSmb 3lN+fMY9PMc5AZR7l+4C+OfMYm7D
end_max5_patcher-----------
</maxpat>