le 26 September 2006 à 15h 51mn 23s
5447 visualisations
using System;
using Irrlicht; // Erreur de compilation içi? jetez un oeil au commentaire suivant
using Irrlicht.Video;
using Irrlicht.Core;
using Irrlicht.Scene;
// Des problèmes avec cette source?
// Quelques solutions qui pourraient vous aider :
//
// - Si votre compilateur dit qu'Irrlicht ne peut pas être trouvé,
// ajoutez Irrlicht.NET.dll (in bin\\win32-VisualStudio) comme Reference
// dans l'explorateur de solutions (solutions browser)
//
// - Si cela compile, mais mais que votre application rencontre une exception du type :
// "An unhandled exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module.
// Additional information: File or assembly name Irrlicht.NET, or one of its dependencies,
// was not found."
// Irrlicht.dll est manquant. Copiez le dans le dossier Windows/System32 ou ajoutez-la dans l'explorateur de solutions
namespace _01.HelloWorld
{
/// <summary>
/// application exemple d'Irrlicht utilisant .NET
/// Un tout petit peu plus compliqué que la version C++
/// </summary>
class Example
{
/// <summary>
/// Le point d'entrée ("main") de l'application
/// </summary>
[STAThread]
static void Main(string[] args)
{
// Initialisation du moteur, création d'un objet "device"
IrrlichtDevice device = new IrrlichtDevice(DriverType.OPENGL);
// Propriétés de la fenêtre, pas besoin de toucher aux WinForms, Irrlicht gère tout seul cela.
device.ResizeAble = true;
device.WindowCaption = "Irrlicht.NET C# example 01 - Hello World";
// Chargement des textures en mémoire
ITexture texSydney = device.VideoDriver.GetTexture(@"..\\..\\media\\sydney.bmp");
ITexture texWall = device.VideoDriver.GetTexture(@"..\\..\\media\\wall.bmp");
ITexture texLogo = device.VideoDriver.GetTexture(@"..\\..\\media\\irrlichtlogoaligned.jpg");
// Chargement du mesh animé Sydney.md2.
// Rq : le "@" devant la chaîne de caractères sert à ne pas doubler les antislashs "\\" qui sont interpretés comme des commandes internes (e.g. \
pour les saut de ligne)
// et à garder la chaîne tel qu'elle est inscrite. (doc c#)
Irrlicht.Scene.IAnimatedMesh mesh =
device.SceneManager.GetMesh(@"..\\..\\media\\sydney.md2");
// Test si le mesh sydney existe bien, sinon on génere une erreur (utile pour le déboguage)
if (mesh == null)
{
System.Windows.Forms.MessageBox.Show(
@"Could not load mesh ..\\..\\media\\sydney.md2, exiting.",
"Problem starting program");
return;
}
// ajout de la camera
ICameraSceneNode cam =
device.SceneManager.AddCameraSceneNodeFPS(null, 100, 100, -1);
cam.Position = new Vector3D(20,0,-50);
// ajout d'un node ("noeud") cube
ISceneNode node = device.SceneManager.AddCubeSceneNode(15,null,-1,new Vector3D(30,-15,0));
// assignation de la texture au cube
node.SetMaterialTexture(0, texWall);
// et sans oublier d'ajouter le mesh animé au node, sinon il ne sera pas consideré dans la scène et ne sera pas rendu à l'écran.
node = device.SceneManager.AddAnimatedMeshSceneNode(mesh, null, -1);
node.SetMaterialTexture(0, texSydney);
node.SetMaterialFlag(MaterialFlag.LIGHTING, false);
device.CursorControl.Visible = false;
// Début de la boucle principale
int fps = 0;
while(device.Run())
{
if (device.WindowActive)
{
// Début du rendu
device.VideoDriver.BeginScene(true, true, new Color(0,100,100,100));
// rendu de tous les meshs
device.SceneManager.DrawAll();
// Logo
device.VideoDriver.Draw2DImage(
texLogo, new Position2D(10,10),
new Rect(0,0,88,31),
new Rect(new Position2D(0,0),device.VideoDriver.ScreenSize),
new Color(0xffffff), false);
// fin du rendu
device.VideoDriver.EndScene();
// ... et un petit affichage des fps (frame per second = images/seconde) "pour le fun" ;)
if (fps != device.VideoDriver.FPS)
{
fps = device.VideoDriver.FPS;
device.WindowCaption = "Irrlicht.NET C# example 01 - Hello World ["+
device.VideoDriver.Name + "] fps:" + fps;
}
}
} // fin de la boucle
} // fin de la fonction main
} // fin de la class
} // fin du namespace