Historique des modifications - Message

Message #11302

Sujet: Création d'immeuble


Type Date Auteur Contenu
Création du message 30-05-2013 16:05:23 Kaze
Bonjour,

je cherche à créer une ville, et pour ce faire, j'ai créé un classe qui crée un immeuble en partant d'un cube dont l'échelle est modifiée. Le but étant d'appliquer différentes textures pour avoir des immeubles différents. Voici mon code :

main.cpp

Code c++ :

int i=0;
std::vector<Building> Ville;
Building *immeuble;
for (int k=0;k<2;k++){
immeuble = new Building(device, driver, sceneManager);
Ville.push_back(*immeuble);

if(k==0){Ville[k].construire(1, irr::core::vector3df(10,0,-10), irr::core::vector3df(10,10,10), 2);}
if(k==1){Ville[k].construire(2, irr::core::vector3df(20,0,-40), irr::core::vector3df(10,20,10), 2);}
} 


building.hpp

Code c++ :

#ifndef BUILDING_HPP
#define BUILDING_HPP

#include "newt/Newton.h"
#include "main.hpp"

class Building
{
    public :
    
    Building(irr::IrrlichtDevice *device, irr::video::IVideoDriver *driver, irr::scene::ISceneManager *sceneManager/*, NewtonWorld *newtonWorld*/);

    void construire(int typeChoix, irr::core::vector3df positionChoix, irr::core::vector3df tailleChoix, int coeffChoix);
    void facade();
    
    private :
    
    irr::IrrlichtDevice* buildingDevice;
    irr::video::IVideoDriver* buildingDriver;
    irr::scene::ISceneManager* buildingSceneManager;
    irr::scene::ISceneNode* buildingNode;
    
    static NewtonWorld* buildingWorld;
    static NewtonBody* buildingBody;
    
    int coeff;
    int type;
    irr::core::vector3df position;
    irr::core::vector3df taille;
};

#endif


Building.cpp

Code c++ :

#include "building.hpp"

// VARIABLES STATIQUES
NewtonWorld* Building::buildingWorld = NULL;
NewtonBody* Building::buildingBody = NULL;
/*
int Building::coeff = 0;
int Building::type = 0;
irr::core::vector3df Building::position = irr::core::vector3df(0,0,0);
irr::core::vector3df Building::taille = irr::core::vector3df(0,0,0);*/
// --------- ---------

Building::Building(irr::IrrlichtDevice *device, irr::video::IVideoDriver *driver, irr::scene::ISceneManager *sceneManager/*, NewtonWorld *newtonWorld*/)
{
    buildingDevice = device;
    buildingDriver = driver;
    buildingSceneManager = sceneManager;
    //buildingWorld = newtonWorld;
    
    buildingNode = NULL;
}

void Building::construire(int typeChoix, irr::core::vector3df positionChoix, irr::core::vector3df tailleChoix, int coeffChoix)
{
    type = typeChoix;
    position = positionChoix;
    taille = tailleChoix;
    coeff = coeffChoix;
    
    facade();
}

void Building::facade()
{
    taille.Y = taille.Y*coeff;
    float longueur = 2*taille.X, hauteur = 2*taille.Y, largeur = 2*taille.Z;
    
    irr::scene::IMesh* buildMesh = buildingSceneManager->getMesh("ressources/immeuble/formeBis.3ds");
    buildingNode = buildingSceneManager->addMeshSceneNode(buildMesh);
    
    if(type == 1){buildingNode->setMaterialTexture(0, buildingDriver->getTexture("ressources/immeuble/1/facade.png"));}
    if(type == 2){buildingNode->setMaterialTexture(0, buildingDriver->getTexture("ressources/immeuble/2/facade.png"));}
    if(type == 3){buildingNode->setMaterialTexture(0, buildingDriver->getTexture("ressources/immeuble/3/facade.png"));}
    if(type == 4){buildingNode->setMaterialTexture(0, buildingDriver->getTexture("ressources/immeuble/4/facade.png"));}
    if(type == 5){buildingNode->setMaterialTexture(0, buildingDriver->getTexture("ressources/immeuble/5/facade.png"));}
    
    buildingSceneManager->getMeshManipulator()->makePlanarTextureMapping(buildMesh, taille.Y/(coeff*2));
    buildingNode->setMaterialFlag(irr::video::EMF_LIGHTING, false);
    buildingNode->setScale(taille);
    buildingNode->setPosition(position);
}


Mes textures représentent une fenêtre et pour modifier cette texture texture en fonction du nombre d'étages de l'immeuble, j'utilise la fonction "makePlanarTextureMapping". Lorsque je fabrique un immeuble, je n'ai aucun problème mais lorsque j'en fais un second, la texture du premier est aussi multipliée et donc le nombre d'étages n'est plus respecté. Pourriez vous m'aider ?

Merci d'avance.
Kaze

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