Exemplo n.º 1
0
	bool ImporterOBJ::ProcessFile()
	{
		bool result;
		result = ReadInfileAndElementCounts();
		if(!result)
			return false;

		result = FillMeshData();
		if(!result)
			return false;

		result = MakeScene();
		if(!result)
			return false;

		return true;
	}
Exemplo n.º 2
0
bool CMayaMesh::Save( FILE * pFile )
{
    if ( NULL == pFile )
    {
        return false;
    }

    m_bValid &= ExtractVertices();
    m_bValid &= ExtractUVSets();
    /*m_bValid &=*/ ExtractSurfaces();
    m_bValid &= FillMeshData();

    // Настраиваем ссылки ( для удобства чтения кода )
    const uint & nComponentCount	= m_MeshData.tHeader.nComponentCount;
    const uint & nVertexCount		= m_MeshData.tHeader.nVertexCount;
    const uint & nVertexSize		= m_MeshData.tHeader.nVertexSize;
    const uint & nSurfaceCount		= m_MeshData.tHeader.nSurfCount;

    //--------------------------------------------------------------------------
    // Tip: Сохранение заголовка объекта
    //--------------------------------------------------------------------------
    TObjectHdr tHeader;
    FillObjectHeader( &tHeader );

    //tHeader.szParent[ 0 ] = 0;
    tHeader.nShapeBlockSize = 0;

    if ( m_bValid )
    {
        tHeader.nShapeBlockSize =
            sizeof( TMeshData::THeader ) +
            nComponentCount * sizeof( TVertexComponent ) +
            nVertexCount * nVertexSize +
            nSurfaceCount * sizeof( TSurface::THeader );
    }

    // Пишем заголовок object'а
    fwrite( &tHeader, sizeof( TObjectHdr ), 1, pFile );

    if ( !m_bValid )
    {
        return false;
    }

    //--------------------------------------------------------------------------
    // Tip: Сохранение mesh'а
    //--------------------------------------------------------------------------

    // Пишем заголовок mesh'а
    fwrite( &m_MeshData.tHeader, sizeof( TMeshData::THeader ), 1, pFile );

    // Пишем компоненты вершины
    fwrite( m_MeshData.pComponents,
            nComponentCount * sizeof( TVertexComponent ), 1, pFile );

    // Пишем массив вершин
    fwrite( m_MeshData.pVertices, nVertexCount * nVertexSize, 1, pFile );

    // Записываем каждый материал ( surface )
    for ( uint n = 0; n < nSurfaceCount; ++n )
    {
        TSurface & tSurf = m_MeshData.pSurfaces[ n ];

        // Пишем заголовок surface'а
        fwrite( &tSurf.tHeader, sizeof( TSurface::THeader ), 1, pFile );

        // Пишем индексы вершин
        fwrite( tSurf.pIndices,
                tSurf.tHeader.nIndexCount * tSurf.tHeader.nIndexSize,
                1, pFile );
    }

    return true;
}