¡¡¡¡³§¤µ¤ó¤³¤ó¤Ë¤Á¤ï¡£hgimg4¤ÇInverceKinematics¤Î¤è¤¦¤Ê¤â¤Î¤¬¤Ç¤¤Ê¤¤¤«¤ÈÄ©À路¡¢¤ä¤Ï¤ê¥Ï¥Þ¤ê¤Þ¤·¤¿¡£
¡¡¥µ¥ó¥×¥ë¤Îtamene¤Á¤ã¤ó¤Ë¤Ï¡¢±¦É¨¤Î(kuru_R_)¡¢±¦Â¼ó¤Î(asi_R_)¤¬¤¢¤ê¤Þ¤¹¡£
¡¡ÌÜɸ¡§±¦Â¼ó¤ò¥¿¡¼¥²¥Ã¥È¤Ë¸þ¤±¤ë¢ª¤¤¤¤Ê¤ê¤³¤³¤Çíµ¤¤Þ¤·¤¿¡£
¡¡¡¥ï¡¼¥ë¥É¤Î²óž¥¼¥í¤Î¥Ù¥¯¥È¥ë¡Êvec0)¤È±¦É¨¤ò¸¶ÅÀ¤È¤·¤Æ±¦Â¼ó¤Ø¤Î¥Ù¥¯¥È¥ë¡Êvec1¡Ë¤È¤Î³ÑÅÙ¤ò»»½Ð
¡¡¢±¦É¨¤ò¸¶ÅÀ¤È¤·¤Æ±¦Â¼ó¤Ø¤Î¥Ù¥¯¥È¥ë¡Êvec1¡Ë¤È±¦É¨¤ò¸¶ÅÀ¤È¤·¤Æ¥¿¡¼¥²¥Ã¥È¤Ø¤Î¥Ù¥¯¥È¥ë(vec2)¤È¤Î³ÑÅÙ¤ò»»½Ð
¡¡£±¦É¨¤Ë¢¤Î²óž¤òŬÍѤ·¡¢¤µ¤é¤Ë¡¤Î²óž¤òŬÍѤ¹¤ë
¡¡¤Â¼ó¤¬¥¿¡¼¥²¥Ã¥È¤ò¸þ¤¯
¡¡¤È¡¢É¬»à¤Ç¹Í¤¨¤Þ¤·¤¿¤¬¡¢¤Ê¤ó¤«»×¤Ã¤¿¤è¤¦¤Ë¤Ê¤ê¤Þ¤»¤ó¡£¿ô³Ø¤¬¸·¤·¤¤¤Ç¤¹¡£
¡¡¤ª¤«¤·¤ÊÅÀ¡Ê¥¼¥í¥Ù¡¼¥¹¤Ç¤ä¤êľ¤·´Þ¤à¡Ë¡¢¤´»ØÅ¦¤¤¤¿¤À¤±¤ì¤Ð¹¬¤¤¤Ç¤¹¡£
¡¡
¡¡¡Êgplookat¤Ï»Ò¥Î¡¼¥É¤Ë»È¤¨¤Ê¤¤¤è¤¦¤Ç¤¹¡Ë
¡¡¡Ê»Ò¥Î¡¼¥É¤Ø¤Îgetpos¤¬¥«¥á¥é°ÌÃÖ»ÑÀª¤Ë¤è¤Ã¤ÆÃͤ¬ÊѤï¤ë¤Î¤Ïǧ¼±¤·¤Æ¤¤¤ë¤Î¤Ç¡¢cx,cy¤Ï¥«¥á¥é¤Î±Æ¶Á¤ò¤¤¤Ã¤¿¤ó²óÈò¤¹¤ë¤¿¤á¤Ç¤¹
¡¡
¡Ä
¡¡LookAtTarget "asi_R_","kuru_R_",x,y,z
return
#deffunc LookAtTarget str _myname,str _parentname,double _tgtx,double _tgty,double _tgtz
gpnodeinfo id,id_model2,GPNODEINFO_NODE,_parentname
setquat id,0,0,0,-1
getpos id,lx1,ly1,lz1
gpnodeinfo id,id_model2,GPNODEINFO_NODE,_myname
getpos id,lx2,ly2,lz2
vec0(0)=0.0f:vec0(1)=0.0f:vec0(2)=1.0f;¥ï¡¼¥ë¥É¤Î´ð½à¥Ù¥¯¥È¥ë
vec1(0)=(double(lx2)+cx)-(double(lx1)+cx)
vec1(1)=(double(ly2)+cy)-(double(ly1)+cy)
vec1(2)=(double(lz2)+cz)-(double(lz1)+cz)
Vec3dNormalize vec1;¢ªÀµµ¬²½(¸µ¡¹Àµµ¬²½¤Î¸ÇÄê¤Ê¤éÉÔÍ×)
Vec3dCrossProduct vec3,vec1,vec0;¼ó¤È´ð½à¤È¤Î³°ÀÑ
Vec3dNormalize vec3;¢ªÀµµ¬²½
Vec3dDotProduct val,vec1,vec0;ÆâÀÑ
theta=acos(val)*180/3.141592;ÆâÀѤ«¤é³ÑÅÙ¤òµá¤á¤ë
QuatRotate vec3,theta;vec3¤È¤¤¤¦¼´¤ËÂФ·¤ÆthetaÅ٤β󞥯¥ª¡¼¥¿¥Ë¥ª¥ó
;¥ï¡¼¥ë¥É¤Ë¤ª¤±¤ë»ÑÀª¤¬¼èÆÀ¤µ¤ì¤¿
vec2(0)=_tgtx-(double(lx1)+cx)
vec2(1)=_tgty-(double(ly1)+cy)
vec2(2)=_tgtz-(double(lz1)+cz)
Vec3dNormalize vec2;¢ªÀµµ¬²½
Vec3dCrossProduct vec4,vec1,vec2;¼ó¤È¥¿¡¼¥²¥Ã¥È¤Î³°ÀÑ
Vec3dNormalize vec4;¢ªÀµµ¬²½
Vec3dDotProduct val,vec1,vec2;ÆâÀÑ
theta=acos(val)*180/3.141592;ÆâÀѤ«¤é³ÑÅÙ¤òµá¤á¤ë
QuatRotate vec4,theta;vec3¤È¤¤¤¦¼´¤ËÂФ·¤ÆthetaÅ٤β󞥯¥ª¡¼¥¿¥Ë¥ª¥ó
gpnodeinfo id,id_model2,GPNODEINFO_NODE,_parentname
getquat id,x,y,z,w
quatmul q3,vec4(0),vec4(1),vec4(2),vec4(3),x,y,z,w;²óžquat¡ß¥â¥Ç¥ë¡Êkuru_R_)¤Îquat
quatmul q3,vec3(0),vec3(1),vec3(2),vec3(3),q3(0),q3(1),q3(2),q3(3);²óžquat¡ß¥â¥Ç¥ë¤Îquat
setquat id,q3(0),q3(1),q3(2),q3(3);·ë²Ì¤òŬÍÑ