Salut à tous !
Dans le cadre d'un éditeur de terrain je dois créer un TerrainSceneNode. Je le déclare comme d'habitude, je compile, et quand je le lance, gros plantage...
La référence d'objet n'est pas définie à une instance d'un objet.Voilà le code en question :
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Windows.Forms;
using IrrlichtNETCP;
namespace XTremEditor
{
class Program
{
IrrlichtDevice device;
TerrainSceneNode map;
string heightmap;
string texturemap;
string detailmap;
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormGeneral());
}
public void startEngine(Control c, string mapfile)
{
device = new IrrlichtDevice(DriverType.Direct3D9, new Dimension2D(c.Width, c.Height), 32, false, false, false, false, c.Handle);
VideoDriver driver = device.VideoDriver;
// Chargement de ma map
loadMap(mapfile);
//******************************************
// Ajouter la camera
//******************************************
SceneManager smgr = device.SceneManager;
CameraSceneNode camera = smgr.AddCameraSceneNode(null);
camera.Position = new Vector3D(1900 * 2, 255 * 2, 3700 * 2);
camera.FarValue = 12000.0f;
//******************************************
// Ajouter la map
//******************************************
// Erreur ICI :
map = smgr.AddTerrainSceneNode(heightmap, null, -1, new Vector3D(), new Vector3D(40, 4.4f, 40),new Vector3D(0,0,0), new IrrlichtNETCP.Color(255, 255, 255, 255), 1, TerrainPatchSize.TPS65);
map.SetMaterialFlag(MaterialFlag.Lighting, false);
map.SetMaterialType(MaterialType.DETAIL_MAP);
map.SetMaterialTexture(0, driver.GetTexture(texturemap));
map.SetMaterialTexture(1, driver.GetTexture(detailmap));
//******************************************
// Ajouter la skybox
//******************************************
driver.SetTextureFlag(TextureCreationFlag.CreateMipMaps, false);
smgr.AddSkyBoxSceneNode(null, new Texture[] {
driver.GetTexture("media\\\\irrlicht2_up.jpg"),
driver.GetTexture("media\\\\irrlicht2_dn.jpg"),
driver.GetTexture("media\\\\irrlicht2_lf.jpg"),
driver.GetTexture("media\\\\irrlicht2_rt.jpg"),
driver.GetTexture("media\\\\irrlicht2_ft.jpg"),
driver.GetTexture("media\\\\irrlicht2_bk.jpg")}, -1);
driver.SetTextureFlag(TextureCreationFlag.CreateMipMaps, true);
// Rendu de la scene
while (device.Run() && c.Enabled)
{
device.VideoDriver.BeginScene(true, true, new IrrlichtNETCP.Color(255, 0, 0, 50));
device.SceneManager.DrawAll();
device.VideoDriver.EndScene();
}
}
public void loadMap(string mamap)
{
XmlTextReader loadmap=new XmlTextReader(mamap);
loadmap.WhitespaceHandling = WhitespaceHandling.None;
while (loadmap.Read())
{
if (loadmap.LocalName == "heightmap")
{
heightmap = loadmap.ReadString();
MessageBox.Show(heightmap);
}
if (loadmap.LocalName == "texturemap")
{
texturemap = loadmap.ReadString();
MessageBox.Show(texturemap);
}
if (loadmap.LocalName == "detailmap")
{
detailmap = loadmap.ReadString();
MessageBox.Show(detailmap);
}
}
loadmap.Close();
}
}
}
Et je ne parviens pas à déterminer d'ou vient l'erreur, car j'ai à peu près suivi l'exemple fourni avec Irrlicht (je l'ai juste adapté pour IrrlichtNETCP).
Merci de votre attention, et encore plus merci à ceux qui trouveront l'erreur ou du moins essaieront