Hey guys this is code from Leviathan, for displaying the models. Its in OpenGl. Model coordinates & rotations are in default order (i mean not swapped or anything). Hope it helps.
void CF7BwDlg::GlDisplayBoneChildren( int bone_parent )
{
int b;
float f;
for( b=0; b<skelet.bones; b++ )
if (( skelet.bone[ b ].parent == bone_parent ) &&
( skelet.bone[ b ].displayed == false )) {
glPushMatrix();
glRotatef( skelet.bone[ b ].roty, 0.0f, 1.0f, 0.0f );
glRotatef( skelet.bone[ b ].rotx, 1.0f, 0.0f, 0.0f );
glRotatef( skelet.bone[ b ].rotz, 0.0f, 0.0f, 1.0f );
if ( ! m_skel ) {
//displaying skeleton
glBegin( GL_TRIANGLES );
f = skelet.bone[ b ].length / 10;
glColor3f( 1.0f, 0.8f, 0.8f );
glVertex3f( f, 0.0f, 0.0f );
glColor3f( 0.8f, 1.0f, 0.8f );
glVertex3f( -f, 0.0f, 0.0f );
glColor3f( 1.0f, 1.0f, 1.0f );
glVertex3f( 0.0f, 0.0f, skelet.bone[ b ].length );
glColor3f( 0.8f, 1.0f, 0.8f );
glVertex3f( -f, 0.0f, 0.0f );
glColor3f( 0.8f, 0.8f, 1.0f );
glVertex3f( 0.0f, f, 0.0f );
glColor3f( 1.0f, 1.0f, 1.0f );
glVertex3f( 0.0f, 0.0f, skelet.bone[ b ].length );
glColor3f( 0.8f, 0.8f, 1.0f );
glVertex3f( 0.0f, f, 0.0f );
glColor3f( 1.0f, 0.8f, 0.8f );
glVertex3f( f, 0.0f, 0.0f );
glColor3f( 1.0f, 1.0f, 1.0f );
glVertex3f( 0.0f, 0.0f, skelet.bone[ b ].length );
glEnd();
}
if ( ! m_model ) {
//display model
if (( skelet.bone[ b ].model_bound ) &&
( skelet.bone[ b ].model_data_set ))
glCallList( skelet.bone[ b ].partId );
}
skelet.bone[ b ].displayed = true;
glTranslatef( 0.0f, 0.0f, skelet.bone[ b ].length );
GlDisplayBoneChildren( b );
glPopMatrix();
}
}