|
Dernière modification
|
24-11-2009 18:02:04
|
T6D98U
|
la question n'est pas le mien (j'ai quand même vérifié en créant une app avec juste l'initialisation même pas la boucle de rendu ni rien ça plante toujours). mais bon voilà: data.h Code c++ :
class Data
{
public:
Data()
{
device = irr::createDevice(irr::video::EDT_OPENGL,irr::core::dimension2d<irr::u32>(800,600),32,false,true,false,0);
driver = device->getVideoDriver();
sceneManager = device->getSceneManager();
gui = device->getGUIEnvironment();
irr::SKeyMap keyMap[5];
//forward
keyMap[0].Action = irr::EKA_MOVE_FORWARD;
keyMap[0].KeyCode = irr::KEY_KEY_Z;
//backward
keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
keyMap[1].KeyCode = irr::KEY_KEY_S;
//left
keyMap[2].Action = irr::EKA_STRAFE_LEFT;
keyMap[2].KeyCode = irr::KEY_KEY_Q;
//right
keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
keyMap[3].KeyCode = irr::KEY_KEY_D;
//jump
keyMap[4].Action = irr::EKA_JUMP_UP;
keyMap[4].KeyCode = irr::KEY_SPACE;
camera = sceneManager->addCameraSceneNodeFPS(0, 100.0f, 0.5f, -1, keyMap, 5, true, 2.0);
camera->setPosition(irr::core::vector3df(0.f,196.f,0.f));
curseur = device->getCursorControl();
worldUp = irr::core::vector3df(0,1,0);
world = irr::newton::createWorld(data.device);
sounds = irrklang::createIrrKlangDevice();
}
virtual ~Data()
{
device->drop();
sounds->removeAllSoundSources();
sounds->drop();
delete world;
}
irr::IrrlichtDevice *device;
irr::video::IVideoDriver* driver;
irr::scene::ISceneManager *sceneManager;
irr::scene::ICameraSceneNode *camera;
irr::gui::IGUIEnvironment *gui;
irr::gui::ICursorControl *curseur;
irr::newton::IWorld *world;
irrklang::ISoundEngine *sounds;
irr::core::vector3df worldUp;
DLGUIManager *guiManager;
};
window.h Code c++ :
#ifndef WINDOW_H_INCLUDED
#define WINDOW_H_INCLUDED
#include "3D\\mesh.h"
#include "3D\\datas.h"
#include "3D\\actions.h"
#include "GUI\\dgui.h"
class Window : public irr::IEventReceiver
{
public:
Window();
~Window();
virtual bool OnEvent(const irr::SEvent &event);
void run();
protected:
void init();
enum{AMBIENT = 443, DIFFUSE, SPECULAR};
enum{BOX = 215,CYLINDER,MESH,POINT,RING,SPHERE};
void draw2D(string src,unsigned int x,unsigned int y,unsigned int w = 0,unsigned int h = 0,
unsigned int ccr = 255,unsigned int ccg = 255,unsigned int ccb = 255,
unsigned int r = 255,unsigned int g = 255,unsigned int b = 255,unsigned int a = 255);
void light(float r,float g,float b,float a,int flags = AMBIENT,
irr::core::vector3df v = irr::core::vector3df(0,0,0),float radius = 100.f,
irr::video::E_LIGHT_TYPE type = irr::video::ELT_POINT,irr::core::vector3df dir = irr::core::vector3df(0,-1,0),
float sr = 0.0,float sg = 0.0,float sb = 0.0,float sa = 0.0);
protected:
bool boucle;
vector<Mesh*> objects;
vector<Action> actions;
Materials materials;
};
window.cpp Code c++ :
#include "window.h"
extern Data data;
Window::Window() : boucle(true)
{
materials = *initMaterials();
init();
}
void Window::init()
{
data.curseur->setVisible(false);
Particle::Ball fire(irr::core::vector3df(0.f,128.f,0.f),irr::core::vector3df(0.f,0.05f,0.f));
fire.setRadius(2.f);
fire.setLife(100,500);
fire.setSize(irr::core::dimension2df(4.f,4.f),irr::core::dimension2df(5.f,5.f));
fire.setTexture("media/fire.bmp");
fire.setPartPerSec(300,400);
fire.setAttractAffector(true,irr::core::vector3df(0.f,256.f,0.f),1.f,true,false,true);
fire.setFadeOutAffector(irr::video::SColor(0,0,0,0));
fire.setAngle(0);
objects.push_back(new Mesh(true,"media/room.3ds",irr::core::vector3df(0,0,0)));
objects[0]->setTex("media/rockwall.jpg",true,0.004f);
actions.push_back(Action());
actions[0].setActive(false);
objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),10,&materials["sphere"]));
actions.push_back(Action());
actions[1].setActive(false);
objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),9999,&materials["sphere"]));
actions.push_back(Action());
actions[2].setActive(false);
light(0.2,0.2,0.2,1.0,AMBIENT);
irr::core::stringw titre(data.driver->getFPS());
data.device->setWindowCaption(titre.c_str());
}
Window::~Window()
{
}
bool Window::OnEvent(const irr::SEvent &event)
{
if(objects.size() > 0 && objects[0] != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT)
{
switch(event.KeyInput.Key)
{
case irr::KEY_ESCAPE:
boucle = false;
return true;
break;
}
}
return false;
}
void Window::run()
{
irr::core::stringw titre(data.driver->getFPS());
data.device->setWindowCaption(titre.c_str());
data.device->setEventReceiver(this);
while(data.device->run() && boucle)
{
data.world->update();
data.driver->beginScene(true, true, irr::video::SColor(0,0,0,0));
data.sceneManager->drawAll();
data.gui->drawAll();
data.driver->endScene();
}
}
window2.cpp Code c++ :
#include "window.h"
extern Data data;
void Window::draw2D(string src,unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int ccr,unsigned int ccg,unsigned int ccb,unsigned int r,unsigned int g,unsigned int b,unsigned int a)
{
irr::video::ITexture *image = data.driver->getTexture(src.c_str());
data.driver->makeColorKeyTexture (image, irr::video::SColor(ccr,ccg,ccb,255));
w = w == 0 ? image->getSize().Width : w;
h = h == 0 ? image->getSize().Height : h;
data.driver->draw2DImage(image, irr::core::position2d<irr::s32>(x,y),
irr::core::rect<irr::s32>(0,0,w,h), 0,
irr::video::SColor(r, g, b, a), true);
}
void Window::light(float r,float g,float b,float a,int flags,irr::core::vector3df v,float radius,irr::video::E_LIGHT_TYPE type,irr::core::vector3df dir,float sr,float sg,float sb,float sa)
{
switch(flags)
{
case AMBIENT:
data.sceneManager->setAmbientLight(irr::video::SColorf(r,g,b,a));
break;
case DIFFUSE:
irr::scene::ILightSceneNode* lumiere = data.sceneManager->addLightSceneNode(0,v,irr::video::SColorf(0.0,0.0,0.0,0.0),radius);
lumiere->getLightData().DiffuseColor = irr::video::SColorf(r,g,b,a);
lumiere->getLightData().SpecularColor = irr::video::SColorf(sr,sg,sb,sa);
break;
}
}
et le main: Code c++ :
#include "3D\\window.h"
int main()
{
Window window;
window.run();
return 0;
}
Il y a pas mal de types indéfinis ici mais si je mettais toutes les sources je me retrouverai à devoir vous copier au moins 50 fichiers.
|
|
Création du message
|
24-11-2009 17:54:16
|
T6D98U
|
la question n'est pas le mien (j'ai quand même vérifié en créant une app avec juste l'initialisation même pas la boucle de rendu ni rien ça plante toujours). mais bon voilà: data.h Code c++ :
class Data
{
public:
Data()
{
device = irr::createDevice(irr::video::EDT_OPENGL,irr::core::dimension2d<irr::u32>(800,600),32,false,true,false,0);
driver = device->getVideoDriver();
sceneManager = device->getSceneManager();
gui = device->getGUIEnvironment();
irr::SKeyMap keyMap[5];
//forward
keyMap[0].Action = irr::EKA_MOVE_FORWARD;
keyMap[0].KeyCode = irr::KEY_KEY_Z;
//backward
keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
keyMap[1].KeyCode = irr::KEY_KEY_S;
//left
keyMap[2].Action = irr::EKA_STRAFE_LEFT;
keyMap[2].KeyCode = irr::KEY_KEY_Q;
//right
keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
keyMap[3].KeyCode = irr::KEY_KEY_D;
//jump
keyMap[4].Action = irr::EKA_JUMP_UP;
keyMap[4].KeyCode = irr::KEY_SPACE;
camera = sceneManager->addCameraSceneNodeFPS(0, 100.0f, 0.5f, -1, keyMap, 5, true, 2.0);
camera->setPosition(irr::core::vector3df(0.f,196.f,0.f));
curseur = device->getCursorControl();
worldUp = irr::core::vector3df(0,1,0);
world = irr::newton::createWorld(data.device);
sounds = irrklang::createIrrKlangDevice();
}
virtual ~Data()
{
device->drop();
sounds->removeAllSoundSources();
sounds->drop();
delete world;
}
irr::IrrlichtDevice *device;
irr::video::IVideoDriver* driver;
irr::scene::ISceneManager *sceneManager;
irr::scene::ICameraSceneNode *camera;
irr::gui::IGUIEnvironment *gui;
irr::gui::ICursorControl *curseur;
irr::newton::IWorld *world;
irrklang::ISoundEngine *sounds;
irr::core::vector3df worldUp;
DLGUIManager *guiManager;
};
window.h Code c++ :
#ifndef WINDOW_H_INCLUDED
#define WINDOW_H_INCLUDED
#include "3D\\mesh.h"
#include "3D\\datas.h"
#include "3D\\actions.h"
#include "GUI\\dgui.h"
class Window : public irr::IEventReceiver
{
public:
Window();
~Window();
virtual bool OnEvent(const irr::SEvent &event);
void run();
protected:
void init();
enum{AMBIENT = 443, DIFFUSE, SPECULAR};
enum{BOX = 215,CYLINDER,MESH,POINT,RING,SPHERE};
void draw2D(string src,unsigned int x,unsigned int y,unsigned int w = 0,unsigned int h = 0,
unsigned int ccr = 255,unsigned int ccg = 255,unsigned int ccb = 255,
unsigned int r = 255,unsigned int g = 255,unsigned int b = 255,unsigned int a = 255);
void light(float r,float g,float b,float a,int flags = AMBIENT,
irr::core::vector3df v = irr::core::vector3df(0,0,0),float radius = 100.f,
irr::video::E_LIGHT_TYPE type = irr::video::ELT_POINT,irr::core::vector3df dir = irr::core::vector3df(0,-1,0),
float sr = 0.0,float sg = 0.0,float sb = 0.0,float sa = 0.0);
protected:
bool boucle;
vector<Mesh*> objects;
vector<Action> actions;
Materials materials;
};
window.cpp Code c++ :
#include "window.h"
extern Data data;
Window::Window() : boucle(true)
{
materials = *initMaterials();
init();
}
void Window::init()
{
data.curseur->setVisible(false);
Particle::Ball fire(irr::core::vector3df(0.f,128.f,0.f),irr::core::vector3df(0.f,0.05f,0.f));
fire.setRadius(2.f);
fire.setLife(100,500);
fire.setSize(irr::core::dimension2df(4.f,4.f),irr::core::dimension2df(5.f,5.f));
fire.setTexture("media/fire.bmp");
fire.setPartPerSec(300,400);
fire.setAttractAffector(true,irr::core::vector3df(0.f,256.f,0.f),1.f,true,false,true);
fire.setFadeOutAffector(irr::video::SColor(0,0,0,0));
fire.setAngle(0);
objects.push_back(new Mesh(true,"media/room.3ds",irr::core::vector3df(0,0,0)));
objects[0]->setTex("media/rockwall.jpg",true,0.004f);
actions.push_back(Action());
actions[0].setActive(false);
objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),10,&materials["sphere"]));
actions.push_back(Action());
actions[1].setActive(false);
objects.push_back(new Mesh(false,"media/sphere.3ds",irr::core::vector3df(0,256,0),9999,&materials["sphere"]));
actions.push_back(Action());
actions[2].setActive(false);
light(0.2,0.2,0.2,1.0,AMBIENT);
irr::core::stringw titre(data.driver->getFPS());
data.device->setWindowCaption(titre.c_str());
}
Window::~Window()
{
}
bool Window::OnEvent(const irr::SEvent &event)
{
if(objects.size() > 0 && objects[0] != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT)
{
switch(event.KeyInput.Key)
{
case irr::KEY_ESCAPE:
boucle = false;
return true;
break;
}
}
return false;
}
void Window::run()
{
irr::core::stringw titre(data.driver->getFPS());
data.device->setWindowCaption(titre.c_str());
data.device->setEventReceiver(this);
while(data.device->run() && boucle)
{
data.world->update();
data.driver->beginScene(true, true, irr::video::SColor(0,0,0,0));
data.sceneManager->drawAll();
data.gui->drawAll();
data.driver->endScene();
}
}
window2.cpp Code c++ :
#include "window.h"
extern Data data;
void Window::draw2D(string src,unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int ccr,unsigned int ccg,unsigned int ccb,unsigned int r,unsigned int g,unsigned int b,unsigned int a)
{
irr::video::ITexture *image = data.driver->getTexture(src.c_str());
data.driver->makeColorKeyTexture (image, irr::video::SColor(ccr,ccg,ccb,255));
w = w == 0 ? image->getSize().Width : w;
h = h == 0 ? image->getSize().Height : h;
data.driver->draw2DImage(image, irr::core::position2d<irr::s32>(x,y),
irr::core::rect<irr::s32>(0,0,w,h), 0,
irr::video::SColor(r, g, b, a), true);
}
void Window::light(float r,float g,float b,float a,int flags,irr::core::vector3df v,float radius,irr::video::E_LIGHT_TYPE type,irr::core::vector3df dir,float sr,float sg,float sb,float sa)
{
switch(flags)
{
case AMBIENT:
data.sceneManager->setAmbientLight(irr::video::SColorf(r,g,b,a));
break;
case DIFFUSE:
irr::scene::ILightSceneNode* lumiere = data.sceneManager->addLightSceneNode(0,v,irr::video::SColorf(0.0,0.0,0.0,0.0),radius);
lumiere->getLightData().DiffuseColor = irr::video::SColorf(r,g,b,a);
lumiere->getLightData().SpecularColor = irr::video::SColorf(sr,sg,sb,sa);
break;
}
}
et le main: Code c++ :
#include "3D\\window.h"
int main()
{
Window window;
window.run();
return 0;
}
Il y a pas mal de types indéfinis ici mais si je mettais toutes les sources je me retrouverai à devoir vous copier au moins 50 fichiers.
|