Historique des modifications - Message

Message #6257

Sujet: C++ mes essais moteur de Terrain


Type Date Auteur Contenu
Création du message 30-03-2009 15:39:03 Magun
voila :

creation de la physique :
    TerrainPhysique::TerrainPhysique(Physique*World,GameEngine::TerrainEngine::CTerrainNode*geom)
    {
        user = NULL;    Node = geom;    phy = World;
        btTransform Transform;
            Transform.setIdentity();
            Transform.setOrigin(btVector3(0,0,0));
        btDefaultMotionState *MotionState = new btDefaultMotionState(Transform);
        formCollide = new CollisionForm(phy->getDevice());
            formCollide->makeTerrain(geom);
        node = new btRigidBody(0.0f,MotionState,formCollide->getShape(),formCollide->getLocalInertia());
            node->setUserPointer((void*)(this));
        //setType(OTP_STATIC);// plante
        phy->getWorldPhysic()->addRigidBody(node);
        //setPosition(irr::core::vector3df(0,0,0));// plante aussi : |
        Kst = NULL;
    }

make terrain :
    void CollisionForm::makeTerrain(GameEngine::TerrainEngine::CTerrainNode*terrain)
    {
        btTriangleMesh *CollisionMesh = new btTriangleMesh();
        int j = 0;
        for(int i=0; i<terrain->numQuad; i++)
            meshBufferToPhysic(terrain->GetQuadNode(i)->mbuffer,CollisionMesh,terrain->getScale());
        Shape = new btBvhTriangleMeshShape(CollisionMesh, true);
        setOrigine(0.0f,terrain->getBoundingBox().getCenter());
    }

trimesh :
    void CollisionForm::meshBufferToPhysic(irr::scene::IMeshBuffer *TMeshBuffer, btTriangleMesh *TCollisionMesh, const irr::core::vector3df &TScale)
    {
        btVector3 TriangleVertices[3];
        irr::u16 *Indices = TMeshBuffer->getIndices();
        if(TMeshBuffer->getVertexType() == irr::video::EVT_STANDARD)
        {
            irr::video::S3DVertex *Vertices = (irr::video::S3DVertex*)TMeshBuffer->getVertices();
            for(irr::u32 i = 0; i < TMeshBuffer->getIndexCount(); i += 3)
            {
                TriangleVertices[0] = btVector3(Vertices[Indices[i]].Pos.X * TScale.X,Vertices[Indices[i]].Pos.Y * TScale.Y,Vertices[Indices[i]].Pos.Z * TScale.Z);
                TriangleVertices[1] = btVector3(Vertices[Indices[i+1]].Pos.X * TScale.X,Vertices[Indices[i+1]].Pos.Y * TScale.Y,Vertices[Indices[i+1]].Pos.Z * TScale.Z);
                TriangleVertices[2] = btVector3(Vertices[Indices[i+2]].Pos.X * TScale.X,Vertices[Indices[i+2]].Pos.Y * TScale.Y,Vertices[Indices[i+2]].Pos.Z * TScale.Z);
                TCollisionMesh->addTriangle(TriangleVertices[0], TriangleVertices[1], TriangleVertices[2],true);
            }
        }
        else
        {
            irr::video::S3DVertex2TCoords *Vertices = (irr::video::S3DVertex2TCoords*)TMeshBuffer->getVertices();
            for(irr::u32 i = 0; i < TMeshBuffer->getIndexCount(); i += 3)
            {
                TriangleVertices[0] = btVector3(Vertices[Indices[i]].Pos.X * TScale.X,Vertices[Indices[i]].Pos.Y * TScale.Y,Vertices[Indices[i]].Pos.Z * TScale.Z);
                TriangleVertices[1] = btVector3(Vertices[Indices[i+1]].Pos.X * TScale.X,Vertices[Indices[i+1]].Pos.Y * TScale.Y,Vertices[Indices[i+1]].Pos.Z * TScale.Z);
                TriangleVertices[2] = btVector3(Vertices[Indices[i+2]].Pos.X * TScale.X,Vertices[Indices[i+2]].Pos.Y * TScale.Y,Vertices[Indices[i+2]].Pos.Z * TScale.Z);
                TCollisionMesh->addTriangle(TriangleVertices[0], TriangleVertices[1], TriangleVertices[2],true);
            }
        }
    }

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
164 invités en ligne
membre en ligne: -
RSS Feed