Example #1
0
//----------------------------------------------------------------------------
TriMesh* StandardMesh::Box (float fXExtent, float fYExtent, float fZExtent)
{
    int iVQuantity = 8;
    int iTQuantity = 12;
    CreateData(iVQuantity,iTQuantity);

    // generate geometry
    m_akVertex[0] = Vector3f(-fXExtent,-fYExtent,-fZExtent);
    m_akVertex[1] = Vector3f(+fXExtent,-fYExtent,-fZExtent);
    m_akVertex[2] = Vector3f(+fXExtent,+fYExtent,-fZExtent);
    m_akVertex[3] = Vector3f(-fXExtent,+fYExtent,-fZExtent);
    m_akVertex[4] = Vector3f(-fXExtent,-fYExtent,+fZExtent);
    m_akVertex[5] = Vector3f(+fXExtent,-fYExtent,+fZExtent);
    m_akVertex[6] = Vector3f(+fXExtent,+fYExtent,+fZExtent);
    m_akVertex[7] = Vector3f(-fXExtent,+fYExtent,+fZExtent);

    if (m_bUVs)
    {
        m_akUV[0] = Vector2f(0.25f,0.75f);
        m_akUV[1] = Vector2f(0.75f,0.75f);
        m_akUV[2] = Vector2f(0.75f,0.25f);
        m_akUV[3] = Vector2f(0.25f,0.25f);
        m_akUV[4] = Vector2f(0.0f,1.0f);
        m_akUV[5] = Vector2f(1.0f,1.0f);
        m_akUV[6] = Vector2f(1.0f,0.0f);
        m_akUV[7] = Vector2f(0.0f,0.0f);
    }

    // generate connectivity (outside view)
    m_aiIndex[ 0] = 0;  m_aiIndex[ 1] = 2;  m_aiIndex[ 2] = 1;
    m_aiIndex[ 3] = 0;  m_aiIndex[ 4] = 3;  m_aiIndex[ 5] = 2;
    m_aiIndex[ 6] = 0;  m_aiIndex[ 7] = 1;  m_aiIndex[ 8] = 5;
    m_aiIndex[ 9] = 0;  m_aiIndex[10] = 5;  m_aiIndex[11] = 4;
    m_aiIndex[12] = 0;  m_aiIndex[13] = 4;  m_aiIndex[14] = 7;
    m_aiIndex[15] = 0;  m_aiIndex[16] = 7;  m_aiIndex[17] = 3;
    m_aiIndex[18] = 6;  m_aiIndex[19] = 4;  m_aiIndex[20] = 5;
    m_aiIndex[21] = 6;  m_aiIndex[22] = 7;  m_aiIndex[23] = 4;
    m_aiIndex[24] = 6;  m_aiIndex[25] = 5;  m_aiIndex[26] = 1;
    m_aiIndex[27] = 6;  m_aiIndex[28] = 1;  m_aiIndex[29] = 2;
    m_aiIndex[30] = 6;  m_aiIndex[31] = 2;  m_aiIndex[32] = 3;
    m_aiIndex[33] = 6;  m_aiIndex[34] = 3;  m_aiIndex[35] = 7;

    if (m_bInside)
    {
        ReverseTriangleOrder(iTQuantity);
    }

    TransformData(iVQuantity);
    TriMesh* pkMesh = WM3_NEW TriMesh(m_spkVertices,m_spkIndices,false);
    if (m_spkNormals)
    {
        pkMesh->Normals = m_spkNormals;
        pkMesh->UpdateMS(true);
    }
    return pkMesh;
}