Skeletal models can be done with matrix stacks. But if you don't understand how a matrix transforms a vector...I cannot help you.
And let me say this loud and clear and strong.
Knowing an API or how to use it does not make you a good 3D programmer. By all comparisons I totally suck at 3D compared to the guys making the games out there. Do I know DirectX like the back of my hand....sure, most of it. Does that make me a great graphics programmer? No way.
DirectX, OpenGL, blah, blah, blah. My suggestion to you is go back to DOS, get DJGPP, and learn the concepts of rasterization, polygons, vertices, texturing, etc, etc. Then come back to DirectX or GL and rock the world. You will be very grateful you took time to do the less glamorous stuff and figured out what the hell is really going on behind the code.
For instance:
Code:
void Object::Render(void)
{
D3DXMATRIX Translation;
D3DXMatrixTranslation(&Translation,Pos.x,Pos.y,Pos.z);
D3DXMATRIX Rotation;
D3DXMatrixRotationYawPitchRoll(&Rotation,Rot.x,Rot.y,Rot.z);
D3DXMATRIX Scaling;
D3DXMatrixScaling(&Scaling,Scale.x,Scale.y,Scale.z);
D3DXMATRIX World;
World=Rotation*Scaling*Translation;
Device->SetTransform(D3DTS_WORLD,&World);
Device->SetStreamSource(0,(void **)&m_pVertexBuffer,0,0);
Device->SetFVF(ObjectVertex::FVF);
Device->SetTexture(Texture);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
Device->DrawPrimitive(D3DPT_TRIANGLELIST,0,m_dwNumTris);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE,false);
}
And that is a very slow, very rudimentary render function yet a lot is going on and a lot is going on under the hood in DirectX even though those mechanics are not easily seen here.