Exemple #1
0
void RBExport::FillVertexBuffer( BYTE* pVert, const VertexDeclaration& vertexDecl, 
                                 int startVert, int nVert )
{
    int stride = vertexDecl.m_VertexSize;
    //  positions
    BYTE* pV = pVert;
    for (int i = 0; i < nVert; i++)
    {
        *((Vec3*)pV) = m_Vertices[startVert + i]->pos;
        pV += stride;
    }

    //  normals
    int offset = -1;
    int size   = 0;
    if (m_pConfig->m_bExportNormals && 
        vertexDecl.GetElementParam( VertexComponent_Normal, offset, size ))
    {
        pV = pVert + offset;
        for (int i = 0; i < nVert; i++)
        {
            *((Vec3*)pV) = m_Vertices[startVert + i]->normal;
            pV += stride;
        } 
    }

    //  binormals/tangents

    //  vertex colors
    if (m_pConfig->m_bExportVertexColors && 
        vertexDecl.GetElementParam( VertexComponent_Diffuse, offset, size ))
    {
        pV = pVert + offset;
        for (int i = 0; i < nVert; i++)
        {
            *((DWORD*)pV) = m_Vertices[startVert + i]->color;
            pV += stride;
        } 
    }

    //  uv's
    if (vertexDecl.GetElementParam( VertexComponent_TexCoor0, offset, size ))
    {
        pV = pVert + offset;
        for (int i = 0; i < nVert; i++)
        {
            *((Vec2*)pV) = m_Vertices[startVert + i]->uv;
            pV += stride;
        } 
    }

    //  blend weights/indices
    if (vertexDecl.GetElementParam( VertexComponent_Blend, offset, size ))
    {
        pV = pVert + offset;
        for (int i = 0; i < nVert; i++)
        {
            const ExpVertex* curV = m_Vertices[startVert + i];
            *((DWORD*)pV) = curV->GetPackedBoneW();
            *((DWORD*)(pV + 4)) = curV->GetPackedBoneIdx();
            pV += stride;
        } 
    }

} // RBExport::FillVertexBuffer