Hey Folks,
Just to say that a beta version of my side project, The Lightbox Swingers Club, has just gone live. Its an online flipbook and animation collaboration application. Please try it out and let me know what you think.
Choose an animation you want to extend and get drawing!
For anyone interested in the technical info, its coded in HTML5 canvas, with javascript doing the interactivity, and php with mySQL running the databases. Let me know if you run into any problems.
Josh
Showing posts with label code. Show all posts
Showing posts with label code. Show all posts
Monday, 12 September 2011
Wednesday, 5 January 2011
Progress on the auto-walker
I spent most of yesterday just hitting dead ends. My code became far too complex and it was almost impossible to find bugs. I went for a full re-factor of the walking algorithm and now I'm getting much smoother motion. It takes a few frames of pre-roll to get the legs in order - notice some jittering in the first second or so as legs are hurriedly placed to stabilise the bug. By stabilisation I mean that if all the legs on one side of the bug (or in any given 'leg group' set by the user) become lifted then the algorithm will hurriedly place the leg which has been airborne the longest to keep the bug upright. Still no body motion, but I've made a preliminary start on leg sequencing.
Labels:
auto walker,
blender,
blender 2.5,
code,
procedural walk,
python,
walk cycle
Thursday, 4 November 2010
Week 4 Line Test and Maya
Week 4 - pushing and pulling and last week's bouncy ball with a mesh deform to vertex color based shader I coded in MEL.
code...
int $numberOfVertices[]=`polyEvaluate -vertex pSphere1`;
string $neighbouredges[];
string $neighbourverts[];
float $edge_start_original[3];
float $edge_end_original[3];
float $edge_start_deformed[3];
float $edge_end_deformed[3];
float $diff_original[3];
float $diff_deformed[3];
float $total_length_original;
float $total_length_deformed;
float $stretch_amount[];
int $edges[];
int $i=0;
for($i=0;$i<$numberOfVertices[0];$i++)
{
//find neighbour edges
$neighbouredges=`polyInfo -ve pSphereShape1.vtx[$i]`;
string $buffer[];
int $num_tokens = `tokenize $neighbouredges[0] $buffer`;
$num_tokens-=2;
for ($k=0;$k<$num_tokens;$k++)
{
$edges[$k]=(int)$buffer[$k+2];
}
//now convert the edges to lengths
$total_length_original=0;
$total_length_deformed=0;
for ($l=0;$l<$num_tokens;$l++)
{
$neighbourverts=`polyInfo -ev pSphereShape1.e[$edges[$l]]`;
tokenize $neighbourverts[0] $buffer;
int $verts[2];
$verts[0]=(int)$buffer[2];
$verts[1]=(int)$buffer[3];
//get edge lengths
$edge_start_original=`xform -ws -q -t pSphereShape1Orig.vtx[$verts[0]]`;
$edge_end_original=`xform -ws -q -t pSphereShape1Orig.vtx[$verts[1]]`;
$edge_start_deformed=`xform -ws -q -t pSphereShape1.vtx[$verts[0]]`;
$edge_end_deformed=`xform -ws -q -t pSphereShape1.vtx[$verts[1]]`;
$diff_original[0]=$edge_end_original[0]-$edge_start_original[0];
$diff_original[1]=$edge_end_original[1]-$edge_start_original[1];
$diff_original[2]=$edge_end_original[2]-$edge_start_original[2];
$diff_deformed[0]=$edge_end_deformed[0]-$edge_start_deformed[0];
$diff_deformed[1]=$edge_end_deformed[1]-$edge_start_deformed[1];
$diff_deformed[2]=$edge_end_deformed[2]-$edge_start_deformed[2];
$total_length_original+=sqrt(pow($diff_original[0],2)+pow($diff_original[1],2)+pow($diff_original[2],2));
$total_length_deformed+=sqrt(pow($diff_deformed[0],2)+pow($diff_deformed[1],2)+pow($diff_deformed[2],2));
}
$stretch_amount[$i]=($total_length_deformed/$total_length_original);
}
//find max and min
float $max_stretch=-1;
float $min_stretch=-1;
for($i=0;$i<$numberOfVertices[0];$i++)
{
if($max_stretch==-1 && $min_stretch==-1)
{
$max_stretch=$stretch_amount[$i];
$min_stretch=$stretch_amount[$i];
}
if($max_stretch<$stretch_amount[$i])$max_stretch=$stretch_amount[$i];
if($min_stretch>$stretch_amount[$i])$min_stretch=$stretch_amount[$i];
}
for($i=0;$i<$numberOfVertices[0];$i++)
{
if($min_stretch!=$max_stretch)$stretch_amount[$i]=($stretch_amount[$i]-$min_stretch)*(1/($max_stretch-$min_stretch));
else $stretch_amount[$i]=0;
polyColorPerVertex -colorR $stretch_amount[$i] pSphereShape1.vtx[$i];
polyColorPerVertex -colorG $stretch_amount[$i] pSphereShape1.vtx[$i];
polyColorPerVertex -colorB $stretch_amount[$i] pSphereShape1.vtx[$i];
}
code...
int $numberOfVertices[]=`polyEvaluate -vertex pSphere1`;
string $neighbouredges[];
string $neighbourverts[];
float $edge_start_original[3];
float $edge_end_original[3];
float $edge_start_deformed[3];
float $edge_end_deformed[3];
float $diff_original[3];
float $diff_deformed[3];
float $total_length_original;
float $total_length_deformed;
float $stretch_amount[];
int $edges[];
int $i=0;
for($i=0;$i<$numberOfVertices[0];$i++)
{
//find neighbour edges
$neighbouredges=`polyInfo -ve pSphereShape1.vtx[$i]`;
string $buffer[];
int $num_tokens = `tokenize $neighbouredges[0] $buffer`;
$num_tokens-=2;
for ($k=0;$k<$num_tokens;$k++)
{
$edges[$k]=(int)$buffer[$k+2];
}
//now convert the edges to lengths
$total_length_original=0;
$total_length_deformed=0;
for ($l=0;$l<$num_tokens;$l++)
{
$neighbourverts=`polyInfo -ev pSphereShape1.e[$edges[$l]]`;
tokenize $neighbourverts[0] $buffer;
int $verts[2];
$verts[0]=(int)$buffer[2];
$verts[1]=(int)$buffer[3];
//get edge lengths
$edge_start_original=`xform -ws -q -t pSphereShape1Orig.vtx[$verts[0]]`;
$edge_end_original=`xform -ws -q -t pSphereShape1Orig.vtx[$verts[1]]`;
$edge_start_deformed=`xform -ws -q -t pSphereShape1.vtx[$verts[0]]`;
$edge_end_deformed=`xform -ws -q -t pSphereShape1.vtx[$verts[1]]`;
$diff_original[0]=$edge_end_original[0]-$edge_start_original[0];
$diff_original[1]=$edge_end_original[1]-$edge_start_original[1];
$diff_original[2]=$edge_end_original[2]-$edge_start_original[2];
$diff_deformed[0]=$edge_end_deformed[0]-$edge_start_deformed[0];
$diff_deformed[1]=$edge_end_deformed[1]-$edge_start_deformed[1];
$diff_deformed[2]=$edge_end_deformed[2]-$edge_start_deformed[2];
$total_length_original+=sqrt(pow($diff_original[0],2)+pow($diff_original[1],2)+pow($diff_original[2],2));
$total_length_deformed+=sqrt(pow($diff_deformed[0],2)+pow($diff_deformed[1],2)+pow($diff_deformed[2],2));
}
$stretch_amount[$i]=($total_length_deformed/$total_length_original);
}
//find max and min
float $max_stretch=-1;
float $min_stretch=-1;
for($i=0;$i<$numberOfVertices[0];$i++)
{
if($max_stretch==-1 && $min_stretch==-1)
{
$max_stretch=$stretch_amount[$i];
$min_stretch=$stretch_amount[$i];
}
if($max_stretch<$stretch_amount[$i])$max_stretch=$stretch_amount[$i];
if($min_stretch>$stretch_amount[$i])$min_stretch=$stretch_amount[$i];
}
for($i=0;$i<$numberOfVertices[0];$i++)
{
if($min_stretch!=$max_stretch)$stretch_amount[$i]=($stretch_amount[$i]-$min_stretch)*(1/($max_stretch-$min_stretch));
else $stretch_amount[$i]=0;
polyColorPerVertex -colorR $stretch_amount[$i] pSphereShape1.vtx[$i];
polyColorPerVertex -colorG $stretch_amount[$i] pSphereShape1.vtx[$i];
polyColorPerVertex -colorB $stretch_amount[$i] pSphereShape1.vtx[$i];
}
Subscribe to:
Posts (Atom)