Tutoriels iOS


précédentsommairesuivant

III. Tutoriel 1. Importer des assets

Ce tutoriel montre comment utiliser Assimp pour importer et effectuer le rendu d'assets. Assimp est une bibliothèque open source capable de charger une variété de modèles 3D (3ds, obj, X, modèles quake et doom). En plus des positions des vertices, des normales, des coordonnées de texture, des tangentes, des os et leur poids (utilisés pour l'animation de personnages dans un prochain tutoriel), les matériaux et textures diffuses sont extraits du modèle et stockés dans un CMeshBuffer. Le CMeshBuffer contient tous les groupes et matériaux du mesh. Les groupes peuvent partager des matériaux. Lors du rendu du modèle, nous parcourons chaque groupe du buffer mesh, trouvons le matériau correspondant à chaque groupe, nous associons les propriétés du matériau au shader et dessinons finalement le groupe.

III-A. Code de la procédure

Nous utilisons la classe CAssimpMesh pour charger le mesh dans le tableau OpenGL comme expliqué dans la section précédente. Pour faire le rendu du CMeshBuffer, nous parcourons tous les groupes du buffer mesh, obtenons le matériau correspondant et envoyons les bonnes informations du matériau au shader et dessinons le groupe. Le code ci-dessous montre la façon dont le CMeshEntity effectue le rendu de son buffer mesh.

 
Sélectionnez
    // Récupère le buffer mesh
    CMeshBuffer* buffer = m_pMesh->GetMeshBuffer();
   
    // Parcours de tous les groupes du buffer mesh
    for(uint32 g = 0; g < buffer->GroupsCount(); ++g)
    {
        // Rendu de chaque groupe
        CMeshGroup* grp = buffer->GroupAtIndex(g);
       
        // Récupération du matériau correspondant à chaque groupe
        CMaterial* material = buffer->MaterialForGroup(grp);
       
        // Association des propriétés du matériau au shader (nous associons seulement la texture diffuse car il n'y a pas d'éclairage)
        if(material != NULL )
        {
            if( material->diffuseTexture != NULL && shader->texture0 != -1)
            {
                material->diffuseTexture->ActivateAndBind(GL_TEXTURE0);
                glUniform1i(shader->texture0, 0);
            }
        }
       
        // Activation du Vertex Array Object (VAO)
        grp->MapToGPU(0);
       
        // Dessin de chaque groupe
        glDrawElements(grp->GetDrawingMode(), grp->GetIndices().size(), GL_UNSIGNED_SHORT, 0);
    }
Image non disponible

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Abdallah DIB. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.