Dryden
03-04-2009, 03:47 PM
Hi,
I'm working since few weeks on a custom exporter to a real time engine.
I can export mesh, textures without issue. But about animation I still have trouble.
The following code show the matrix creation (performed for each bones), so I guess I'm gonna have issue with parenting animation.
If u have any idea about how to deal with... (translation matrix is the only one who works actually)
string $return = "";
//Gathering data from current bones
// Gathering data from world space for translation, to try to go trought the parent inherit translation
float $t[] = `xform -q -ws -t $bonesName`;
float $s[] = `getAttr ($bonesName+".s")`;
float $r[] = `getAttr ($bonesName+".r")`;
//Initialize matrices
matrix $translate [4][4];
matrix $scale [4][4];
matrix $rotateX [4][4];
matrix $rotateY [4][4];
matrix $rotateZ [4][4];
matrix $multi [4][4];
//Fill Matrices
$scale = <<$s[0],0,0,0; 0,$s[1],0,0; 0,0,$s[2],0; 0,0,0,1>>;
$translate = <<1,0,0,0; 0,1,0,0; 0,0,1,0; $t[0],$t[1],$t[2],1>>;
$rotateX = <<1,0,0,0; 0,`cos $r[0]`,`sin $r[0]`,0; 0,-(`sin $r[0]`),`cos $r[0]`,0; 0,0,0,1>>;
$rotateY = <<`cos $r[1]`,0,-(`sin $r[1]`),0; 0,1,0,0; `sin $r[1]`,0,`cos $r[1]`,0; 0,0,0,1>>;
$rotateZ = <<`cos $r[2]`,`sin $r[2]`,0,0; -(`sin $r[2]`),`cos $r[2]`,0,0; 0,0,1,0; 0,0,0,1>>;
//Combine them.
$multi = $scale * $rotateX * $rotateY * $rotateZ * $translate; // ????
for($i=0;$i<4;$i++)
{
for($j=0;$j<4;$j++)
{
if(($i == 3) && ($j == 3))
{
$return += "M"+($i+1)+"."+($j+1)+":"+$multi[$i][$j];
}else{
$return += "M"+($i+1)+"."+($j+1)+":"+$multi[$i][$j]+",";
}
}
}
I'm working since few weeks on a custom exporter to a real time engine.
I can export mesh, textures without issue. But about animation I still have trouble.
The following code show the matrix creation (performed for each bones), so I guess I'm gonna have issue with parenting animation.
If u have any idea about how to deal with... (translation matrix is the only one who works actually)
string $return = "";
//Gathering data from current bones
// Gathering data from world space for translation, to try to go trought the parent inherit translation
float $t[] = `xform -q -ws -t $bonesName`;
float $s[] = `getAttr ($bonesName+".s")`;
float $r[] = `getAttr ($bonesName+".r")`;
//Initialize matrices
matrix $translate [4][4];
matrix $scale [4][4];
matrix $rotateX [4][4];
matrix $rotateY [4][4];
matrix $rotateZ [4][4];
matrix $multi [4][4];
//Fill Matrices
$scale = <<$s[0],0,0,0; 0,$s[1],0,0; 0,0,$s[2],0; 0,0,0,1>>;
$translate = <<1,0,0,0; 0,1,0,0; 0,0,1,0; $t[0],$t[1],$t[2],1>>;
$rotateX = <<1,0,0,0; 0,`cos $r[0]`,`sin $r[0]`,0; 0,-(`sin $r[0]`),`cos $r[0]`,0; 0,0,0,1>>;
$rotateY = <<`cos $r[1]`,0,-(`sin $r[1]`),0; 0,1,0,0; `sin $r[1]`,0,`cos $r[1]`,0; 0,0,0,1>>;
$rotateZ = <<`cos $r[2]`,`sin $r[2]`,0,0; -(`sin $r[2]`),`cos $r[2]`,0,0; 0,0,1,0; 0,0,0,1>>;
//Combine them.
$multi = $scale * $rotateX * $rotateY * $rotateZ * $translate; // ????
for($i=0;$i<4;$i++)
{
for($j=0;$j<4;$j++)
{
if(($i == 3) && ($j == 3))
{
$return += "M"+($i+1)+"."+($j+1)+":"+$multi[$i][$j];
}else{
$return += "M"+($i+1)+"."+($j+1)+":"+$multi[$i][$j]+",";
}
}
}
