Historique des modifications - Message

Message #10398

Sujet: C++ Création d'une sphere icosa


Type Date Auteur Contenu
Création du message 22-03-2012 22:07:47 johnplayer
Voici une autre classe qui elle utilise des index 32 bits. Ceux-ci ne sont pas compatibles avec toutes les cartes graphiques. Niveau perfs 245fps pour une itération 8 soit 1 311 000 triangles sur une GTX590 avec VBO activé.
Par contre pour ma part je ne dépasse pas l'itération 8 car la 9ème plante (environ 5 000 000 de triangles).
Ce n'est pas vraiment génant de ne pouvoir monter que jusqu'à 1 311 000 triagles.^^

// fichier : SphereIcosaUnlimited.h

#ifndef SPHEREICOSAUNLIMITED_H
#define SPHEREICOSAUNLIMITED_H


#include "irrTypes.h"
#include "vector3d.h"
#include "aabbox3d.h"
#include "CDynamicMeshBuffer.h"
#include "SMaterial.h"


class SphereIcosaUnlimited
{
    public:
        SphereIcosaUnlimited(irr::video::SMaterial material, irr::f32 rayon=1, irr::u16 iterations=0);
        SphereIcosaUnlimited(irr::f32 rayon=1, irr::u16 iterations=0);
        virtual ~SphereIcosaUnlimited();

        bool createNewSphere(irr::f32 rayon=1, irr::u16 iterations=0);
        irr::scene::CDynamicMeshBuffer* getBuffer();
        irr::video::SMaterial& getMaterial();
        void setMaterial(irr::video::SMaterial material);
        irr::core::aabbox3df& getBoundingBox();
        void setUseVBO(irr::scene::E_HARDWARE_MAPPING vbo=irr::scene::EHM_NEVER);

    protected:
        irr::f32 Rayon;
        irr::u8 NbIterations;
        irr::scene::CDynamicMeshBuffer* Buffer;
        irr::core::aabbox3df BoundingBox;

        void createBoundingBox();

    private:

};

#endif // SPHEREICOSAUNLIMITED_H

// fichier SphereIcosaUnlimited.cpp

#include "SphereIcosaUnlimited.h"

SphereIcosaUnlimited::SphereIcosaUnlimited(irr::video::SMaterial material, irr::f32 rayon, irr::u16 iterations) : Rayon(rayon), NbIterations(iterations)
{
    /// initialisation du buffer
    Buffer = new irr::scene::CDynamicMeshBuffer(irr::video::EVT_STANDARD, irr::video::EIT_32BIT);
    Buffer->Material = material;
    /// créé la sphère
    createNewSphere(rayon, iterations);
}

SphereIcosaUnlimited::SphereIcosaUnlimited(irr::f32 rayon, irr::u16 iterations) : Rayon(rayon), NbIterations(iterations)
{
    /// créé la sphère
    createNewSphere(rayon, iterations);
}

SphereIcosaUnlimited::~SphereIcosaUnlimited()
{
    /// libère la mémoire
}

bool SphereIcosaUnlimited::createNewSphere(irr::f32 rayon, irr::u16 iterations)
{
    /// array contenant les vertices
    irr::core::array<irr::core::vector3df> listevertex;
    /// calcul des termes de base
    irr::core::vector3df normalise(1, ((1+irr::core::squareroot(5.f))/2), 0);
    normalise.setLength(rayon);
    irr::f32 terme1 = normalise.X;
    irr::f32 terme2 = normalise.Y;
    /// calcul des 4 points du plan : XY
    listevertex.push_back( irr::core::vector3df(-terme1,-terme2,0) );
    listevertex.push_back( irr::core::vector3df(-terme1,terme2,0) );
    listevertex.push_back( irr::core::vector3df(terme1,terme2,0) );
    listevertex.push_back( irr::core::vector3df(terme1,-terme2,0) );
    /// calcul des 4 points du plan : YZ
    listevertex.push_back( irr::core::vector3df(0,-terme1,-terme2) );
    listevertex.push_back( irr::core::vector3df(0,terme1,-terme2) );
    listevertex.push_back( irr::core::vector3df(0,terme1,terme2) );
    listevertex.push_back( irr::core::vector3df(0,-terme1,terme2) );
    /// calcul des 4 points du plan : XZ
    listevertex.push_back( irr::core::vector3df(-terme2,0,-terme1) );
    listevertex.push_back( irr::core::vector3df(-terme2,0,terme1) );
    listevertex.push_back( irr::core::vector3df(terme2,0,terme1) );
    listevertex.push_back( irr::core::vector3df(terme2,0,-terme1) );
    /// mise dans le buffer dans la forme première
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[0], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[3], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[7], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 0 ); Buffer->getIndexBuffer().push_back( 1 ); Buffer->getIndexBuffer().push_back( 2 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[3], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[0], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[4], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 3 ); Buffer->getIndexBuffer().push_back( 4 ); Buffer->getIndexBuffer().push_back( 5 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[2], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[1], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[6], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 6 ); Buffer->getIndexBuffer().push_back( 7 ); Buffer->getIndexBuffer().push_back( 8 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[1], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[2], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[5], irr::core::vector3df(0), irr::video::SColor(255,000,255,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 9 ); Buffer->getIndexBuffer().push_back( 10 ); Buffer->getIndexBuffer().push_back( 11 );



    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[4], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[5], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[11], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 12 ); Buffer->getIndexBuffer().push_back( 13 ); Buffer->getIndexBuffer().push_back( 14 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[5], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[4], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[8], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 15 ); Buffer->getIndexBuffer().push_back( 16 ); Buffer->getIndexBuffer().push_back( 17 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[7], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[6], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[9], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 18 ); Buffer->getIndexBuffer().push_back( 19 ); Buffer->getIndexBuffer().push_back( 20 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[6], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[7], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[10], irr::core::vector3df(0), irr::video::SColor(255,000,000,255), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 21 ); Buffer->getIndexBuffer().push_back( 22 ); Buffer->getIndexBuffer().push_back( 23 );



    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[9], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[8], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[0], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 24 ); Buffer->getIndexBuffer().push_back( 25 ); Buffer->getIndexBuffer().push_back( 26 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[8], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[9], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[1], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 27 ); Buffer->getIndexBuffer().push_back( 28 ); Buffer->getIndexBuffer().push_back( 29 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[10], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[11], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[2], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 30 ); Buffer->getIndexBuffer().push_back( 31 ); Buffer->getIndexBuffer().push_back( 32 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[11], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[10], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[3], irr::core::vector3df(0), irr::video::SColor(255,255,000,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 33 ); Buffer->getIndexBuffer().push_back( 34 ); Buffer->getIndexBuffer().push_back( 35 );




    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[0], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[8], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[4], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 36 ); Buffer->getIndexBuffer().push_back( 37 ); Buffer->getIndexBuffer().push_back( 38 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[0], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[7], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[9], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 39 ); Buffer->getIndexBuffer().push_back( 40 ); Buffer->getIndexBuffer().push_back( 41 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[1], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[5], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[8], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 42 ); Buffer->getIndexBuffer().push_back( 43 ); Buffer->getIndexBuffer().push_back( 44 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[1], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[9], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[6], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 45 ); Buffer->getIndexBuffer().push_back( 46 ); Buffer->getIndexBuffer().push_back( 47 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[2], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[6], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[10], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 48 ); Buffer->getIndexBuffer().push_back( 49 ); Buffer->getIndexBuffer().push_back( 50 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[2], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[11], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[5], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 51 ); Buffer->getIndexBuffer().push_back( 52 ); Buffer->getIndexBuffer().push_back( 53 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[3], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[10], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[7], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 54 ); Buffer->getIndexBuffer().push_back( 55 ); Buffer->getIndexBuffer().push_back( 56 );

    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[3], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,0)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[4], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0,1)) );
    Buffer->getVertexBuffer().push_back( irr::video::S3DVertex( listevertex[11], irr::core::vector3df(0), irr::video::SColor(255,200,200,000), irr::core::vector2df(0.5,0.5)) );
    Buffer->getIndexBuffer().push_back( 57 ); Buffer->getIndexBuffer().push_back( 58 ); Buffer->getIndexBuffer().push_back( 59 );

    for(irr::u16 nbIterations=0; nbIterations < iterations; ++nbIterations )
    {
        /// variables
        irr::scene::IVertexBuffer* VBuffer = new irr::scene::CVertexBuffer(irr::video::EVT_STANDARD);
        irr::scene::IIndexBuffer* IBuffer = new irr::scene::CIndexBuffer(irr::video::EIT_32BIT);
        VBuffer->setHardwareMappingHint( Buffer->getVertexBuffer().getHardwareMappingHint() );
        IBuffer->setHardwareMappingHint( Buffer->getIndexBuffer().getHardwareMappingHint() );
        /// créations des couleurs
        irr::video::SColor color1(255,255,000,000);
        irr::video::SColor color2(255,000,255,000);
        irr::video::SColor color3(255,000,000,255);
        irr::video::SColor color4(255,255,255,000);
        /// pour chaque triangles on en créé 4 nouveaux par subdivisions
        for(irr::u32 a=0; a < Buffer->getIndexBuffer().size(); a+=3)
        {
            /// on enregistre l'index
            irr::u32 index = VBuffer->size();
            /// on enregistre les 3 points existant
            irr::core::vector3df A( Buffer->getVertexBuffer()[Buffer->getIndexBuffer()[a]].Pos );
            irr::core::vector3df B( Buffer->getVertexBuffer()[Buffer->getIndexBuffer()[a+1]].Pos );
            irr::core::vector3df C( Buffer->getVertexBuffer()[Buffer->getIndexBuffer()[a+2]].Pos );
            /// on calcule les 3 nouveaux points
            irr::core::vector3df D( irr::core::line3df(A, B).getMiddle().setLength(rayon) );
            irr::core::vector3df E( irr::core::line3df(B, C).getMiddle().setLength(rayon) );
            irr::core::vector3df F( irr::core::line3df(C, A).getMiddle().setLength(rayon) );
            /// on insère les 4 nouveaux triangles
            /// ADF
            VBuffer->push_back( irr::video::S3DVertex( A, irr::core::vector3df(0), color1, irr::core::vector2df(0,0)) );
            VBuffer->push_back( irr::video::S3DVertex( D, irr::core::vector3df(0), color1, irr::core::vector2df(0,1)) );
            VBuffer->push_back( irr::video::S3DVertex( F, irr::core::vector3df(0), color1, irr::core::vector2df(0.5,0.5)) );
            IBuffer->push_back( index ); IBuffer->push_back( index+1 ); IBuffer->push_back( index+2 );
            /// DBE
            VBuffer->push_back( irr::video::S3DVertex( D, irr::core::vector3df(0), color2, irr::core::vector2df(0,0)) );
            VBuffer->push_back( irr::video::S3DVertex( B, irr::core::vector3df(0), color2, irr::core::vector2df(0,1)) );
            VBuffer->push_back( irr::video::S3DVertex( E, irr::core::vector3df(0), color2, irr::core::vector2df(0.5,0.5)) );
            IBuffer->push_back( index+3 ); IBuffer->push_back( index+4 ); IBuffer->push_back( index+5 );
            /// FDE
            VBuffer->push_back( irr::video::S3DVertex( F, irr::core::vector3df(0), color3, irr::core::vector2df(0,0)) );
            VBuffer->push_back( irr::video::S3DVertex( D, irr::core::vector3df(0), color3, irr::core::vector2df(0,1)) );
            VBuffer->push_back( irr::video::S3DVertex( E, irr::core::vector3df(0), color3, irr::core::vector2df(0.5,0.5)) );
            IBuffer->push_back( index+6 ); IBuffer->push_back( index+7 ); IBuffer->push_back( index+8 );
            /// FEC
            VBuffer->push_back( irr::video::S3DVertex( F, irr::core::vector3df(0), color4, irr::core::vector2df(0,0)) );
            VBuffer->push_back( irr::video::S3DVertex( E, irr::core::vector3df(0), color4, irr::core::vector2df(0,1)) );
            VBuffer->push_back( irr::video::S3DVertex( C, irr::core::vector3df(0), color4, irr::core::vector2df(0.5,0.5)) );
            IBuffer->push_back( index+9 ); IBuffer->push_back( index+10 ); IBuffer->push_back( index+11 );

        }
        /// on change les buffers
        Buffer->setVertexBuffer( VBuffer );
        Buffer->setIndexBuffer( IBuffer );
    }
    /// on mets à jour les paramètres de création de la sphere
    Rayon = rayon;
    NbIterations = iterations;
    /// on met à jour la Bounding Box
    createBoundingBox();
    /// tout s'est bien passé on quitte
    return true;
}


irr::scene::CDynamicMeshBuffer* SphereIcosaUnlimited::getBuffer()
{
    return Buffer;
}

irr::video::SMaterial& SphereIcosaUnlimited::getMaterial()
{
    return Buffer->Material;
}

void SphereIcosaUnlimited::setMaterial(irr::video::SMaterial material)
{
    Buffer->Material = material;
}

irr::core::aabbox3df& SphereIcosaUnlimited::getBoundingBox()
{
    return BoundingBox;
}

void SphereIcosaUnlimited::setUseVBO(irr::scene::E_HARDWARE_MAPPING vbo)
{
        Buffer->getVertexBuffer().setHardwareMappingHint(vbo);
        Buffer->getIndexBuffer().setHardwareMappingHint(vbo);
}

void SphereIcosaUnlimited::createBoundingBox()
{
    BoundingBox = irr::core::aabbox3df( irr::core::vector3df(-Rayon), irr::core::vector3df(Rayon) );
}

Utilisation :
SMaterial blanc;
blanc.Lighting = false;

SphereIcosaUnlimited sphere(blanc, 1000, 8);
sphere.setUseVBO(EHM_STATIC);
CdynamicMeshBuffer* bufferessai32 = sphere.getBuffer();


// à mettre entre beginscene et endscene
Driver->drawMeshBuffer( SphereBuffer );

ATTENTION : Je ne l'ai pas précisé avant mais il faut libérer les buffers car ce n'est pas fait dans la classe.


Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
240 invités en ligne
membre en ligne: -
RSS Feed