void CActor::Render( IDirect3DDevice9* device, CCamera* cam )
{
//VertexDeclaration setzen
device->SetVertexDeclaration(Vertex::decl);
//IndexBuffer setzen
device->SetIndices(m_pIndexBuffer);
//VertexBuffer holen
device->SetStreamSource(0, m_pVertexBuffer, 0, Vertex::strideSize);
//Technique setzen
m_pFx->SetTechnique(m_hTechnique);
//Positionsmatrix
D3DXMATRIX trans, rot, scale;
D3DXMatrixTranslation(&trans, m_position.x, m_position.y, m_position.z);
//Rotationsmatrix
D3DXMatrixRotationYawPitchRoll(&rot, m_rotation.y, m_rotation.x, m_rotation.z);
//Skalierungsmatrix
D3DXMatrixScaling(&scale, m_scale.x, m_scale.y, m_scale.z);
//WVP setzen
m_pFx->SetMatrix(m_hWVP, &(scale * rot * trans * cam->GetViewMatrix() * cam->GetProjectionMatrix()));
//Textur setzen
m_pFx->SetTexture(m_hColorTexture, m_pTexture);
//Farbe
m_pFx->SetValue(m_hAmbientColor, &m_ambientColor, sizeof(D3DXCOLOR));
//Passes durchlaufen
UINT passes = 0;
//Beginne Shader
m_pFx->Begin(&passes, 0);
for( UINT i = 0; i < passes; i++)
{
//For Sprites
if(m_isSprite)
{
m_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
m_pFx->BeginPass(i);
RECT rct;
rct.left = m_iActualFrameNumber * m_iFrameWidth;
rct.right = m_iActualFrameNumber * m_iFrameWidth + m_iFrameWidth;
rct.top = 0;
rct.bottom = m_iHeight;
m_pSprite->Draw(m_pTexture,&rct,NULL, &m_position,0xFFFFFFFF);
m_pFx->EndPass();
m_pSprite->End();
}
else
{
//Beginne Pass
m_pFx->BeginPass(i);
device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, m_vertexCount, 0, m_indexCount / 3);
m_pFx->EndPass();
}
}
m_pFx->End();
}