Salut
Je sais que les membres d'Irrlicht sont intialisablent soit par
"IrrlichtDevice device = new IrrlichtDevice(DriverType.OPENGL);"
soit par
"ICameraSceneNode cam = device.SceneManager.AddCameraSceneNode(null, camPos, camLookat, 1);"
Mais je ne sais pas comment et quoi exactement initialiser pour integrer le gui...
Voilà mon code compilé sous MSVisual C# 2005 Express:
using System;
using System.Windows.Forms; // pour MessageBox.Show()
using Irrlicht;
using Irrlicht.video;
using Irrlicht.scene;
using Irrlicht.gui;
using Irrlicht.core;
class Esselfe3{
class playGUI{
// ces membres sont public car des méthodes propres à Irrlicht y accèdent... (parex. IrrlichtDevice.CloseDevice())
public IrrlichtDevice device;
public IGUIEnvironment GUIenv;
public irr.gui.IGUIEnvironment; // je crois je n'ai pas à m'en servir... mais c'est ce que je donne au constructeur?
public IGUIElement GUIelem;
public ICameraSceneNode cam;
public ISceneNode cube;
public ITexture texCube;
public float cubeSize;
public vector3d camPos, camLookat, cubePos;
public bool inMenu;
// constructeur
public playGUI(){
cubeSize = 10.0f;
camPos.X = 0.0f;
camPos.Y = 0.0f;
camPos.Z = -20.0f;
camLookat.X = 0.0f;
camLookat.Y = 0.0f;
camLookat.Z = 0.0f;
cubePos.X = 0.0f;
cubePos.Y = 0.0f;
cubePos.Z = 0.0f;
inMenu = new bool();
}
public int initmee(){
// j'ai l'intention de basculer entre cette scene et le gui avec des touches du clavier...
// init device
device = new IrrlichtDevice(DriverType.OPENGL);
device.ResizeAble = true;
device.WindowCaption = "Irrlicht gui";
// device.VideoDriver.SetAmbientLight(new Colorf(0.0f,0.5f,0.0f));
// init cam
cam = device.SceneManager.AddCameraSceneNode(null, camPos, camLookat, 1);
// init cube
cube = device.SceneManager.AddCubeSceneNode(15.0f, null, 1, new vector3d(0.0f,0.0f,0.0f));
texCube = device.VideoDriver.GetTexture(@"C:\irrlicht-1.1\media\wall.bmp");
if (texCube == null){
MessageBox.Show(@"Erreur: C:\irrlicht-1.1\media\wall.bmp", "Erreur lors du chargement de texture");
return -1;
}
cube.SetMaterialTexture(0, texCube);
cube.SetMaterialFlag(MaterialFlag.LIGHTING, false);
GUIenv = device.GUIEnvironment;
GUIenv = IGUIEnvironment.AddWindow(/*...*/);
// boucle principale
while (device.Run()){
if (device.WindowActive){
device.VideoDriver.BeginScene(true, true, new Color(0, 50,50,50));
// device.SceneManager.DrawAll();
GUIenv.DrawAll();
device.VideoDriver.EndScene();
}
}
// ces 2 méthodes générent une exception; "AccessViolationException" (??)
// device.VideoDriver.RemoveTexture(texCube);
// device.CloseDevice();
return 0;
}
}
public static int Main(){
playGUI pg = new playGUI();
pg.initmee();
return 0;
}
}
Juste avant de refaire ce code, j'avais cetteligne de code où mes membres sont présentement:
"IGUIEnvironment GUIenv;"
"IGUIElement GUIelem;"
Comment le membre 'IrrlichtDevice.GUIEnvironment' (qui n'est qu'en mode get;) se trouve à être affecté à ma variable GUIenv?
Dois-je utiliser la méthode Irrlicht.gui.IGUIEnvironment.AddWindow() pour faire aparaître le menu ou est-ce bien la ligne: "GUIenv.DrawAll();" qu'il me faut insérer dans la loop principale?
...
Il n'y a pas de tuto pour le gui d'Irrlicht selon mes recherches...
Dernière modification par Esselfe (13-11-2006 05:03:15)
Hors ligne
D'aprés ton code il semble que tu Utilise la wrapper officiel. Je ne saurais que te conseillé d'utiliser "Irrlicht.NET CP" qui permet d'obtenir une gestion c# de l'interface beacuoup plus clair et plus proche du fonctionnement classique en c#.
Hors ligne
En effet, Irrlicht.NET CP est plus facile à manipuler bien que je n'ai pas encore bien compris pourquoi on a repris l'assembly Irrlicht.NET... (Pour une portabilité assuré?)
Il se trouve dans IrrNetCP_SDK_0.6 un dossier comportant des examples aidants à initialiser un gui... bon départ
Merci
Dernière modification par Esselfe (13-11-2006 20:45:26)
Hors ligne