Amy Mercury

( or Amy Iodyne )

well yesterday i didnt finish the mcjAimAnim

but i found out information which will help me in the future

notably: the getXAxis() function in DS4 ( maybe DS3 too ) returns non-normalized vectors

the getAngleTo() function returns absolute value of the rotation angle

this function here seems to work

let vn = Q.getXAxis()

v1 and v2 have been projected on the XAxis (normal) plane

we want to rotate v1 around the X axis until it's oriented like v2

this seems to work

function getAngleTo( v1, v2, vn ) { v1.normalize(); v2.normalize(); var ca = v1.dot( v2 ); var angle = Math.acos( ca ); cp = v1.cross( v2 ); cp.normalize(); if( vn.dot( cp ) < 0 ) { angle = -angle; } return( angle ); }

`then we add this angle to the joint's XRotation ( Euler ) angle `

function rotateX( t, limbRoot, currnt, wanted ) { var axis = limbRoot.getWSRot( t ).getXAxis(); var a = degrees * rotate( axis, t, limbRoot, currnt, wanted ); var ctl = limbRoot.getXRotControl(); ctl.setValue( t, ctl.getValue( t ) + a ); } function rotate( axis, t, limbRoot, currnt, wanted ) { //todo it's a vector we project on the plane, //make sure we do this properly currnt = projectPointOnPlane( currnt, axis ); wanted = projectPointOnPlane( wanted, axis ); var a = getAngleTo( currnt, wanted, axis ); return( a ); } function projectPointOnPlane( p, n ) { n = n.normalized(); var t = p.dot( n ); var v = new DzVec3( p.x - t * n.x, p.y - t * n.y, p.z - t * n.z ); return( v ); }

## No comments:

## Post a Comment