Salutation nouvelle mon chère Kedu (^^)
pourais-tu m'expliquer comment implémenter ce type de configuration sans utiliser "void animermeshs" mettre directement à la suite du programme initiale la référence qui permet de lier en ce qui me concerne un objet appellé "ballnode" avec "mGeomSphere" ???
void AnimerLesMeshs()
{
//Mise à jour de la sphere
updateEntitiesAfterPhysics(ref SphereSceneNode, maPhysique.oGeomSphere);
}
Hors ligne
Houla j'ai plus la tête de dedans ^^
Le manque cruel de temps m'empeche de te répondre avec quelque chose de pret à l'emploi malheureusement... J'espère que toi ou quelqu'un d'autre pourra proposer une méthode qui met à jour le positionnement/rotation des sceneNode d'Irrlicht par rapport aux objets physiques de Newton :-)
Qu'as tu essayé pour le moment comme méthode ?
Hors ligne
Dsl d'avoir mi autant de temps mais j'aivais des exams als pour faire cour voila mon programme si tu peut y voir plus claire et m'aider merci d'avance.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Irrlicht;
using Irrlicht.video;
using Irrlicht.core;
using Irrlicht.scene;
using Irrlicht.gui;
using Irrlicht.io;
using System.ComponentModel;
using System.Data;
using System.Threading;
using System.Drawing;
using ODE;
using ODE.Geoms;
using ODE.NoMDX;
using _d_real;
using IrrCP_Ode;
namespace real
{
class Program
{
// start up the engine
private Physique maPhysique;
private Thread monThreadDeRenduPhysique;
// Point d'entrée principal de l'application.
[STAThread]
static void Main(string[] args)
{
Program prog = new Program();
prog.run();
}
public void run()
{
//device
IrrlichtDevice device = new IrrlichtDevice(Irrlicht.video.DriverType.DIRECT3D9, new dimension2d(1024, 768), 32, false, true, true);
//scene et driver en place
ISceneManager smgr = device.SceneManager;
IVideoDriver driver = device.VideoDriver;
//load map
IAnimatedMesh levelmesh = smgr.GetMesh("media/zone 01/01.dmf");
IAnimatedMesh ball = smgr.GetMesh("media/ball/ball.dmf");
//envoi collision type OctTree
ISceneNode levelnode = null;
if (levelmesh != null)
levelnode = smgr.AddOctTreeSceneNode(levelmesh.GetMesh(0), null, 0);
levelnode.Scale = new vector3d(1, 1, 1);
//ball
float z = 35;
float y = 160;
float x = 0;
ISceneNode ballnode = null;
if (ball != null)
ballnode = smgr.AddOctTreeSceneNode(ball.GetMesh(0), null, 0);
ITriangleSelector sb = null;
if (ballnode != null)
{
ballnode.Position = new vector3d(x,y,z);
ballnode.Scale = new vector3d(1, 1, 1);
sb = smgr.CreateOctTreeTriangleSelector(ball.GetMesh(0), ballnode, 128);
}
//reponse de collision ball
ISceneNodeAnimator collision = smgr.CreateCollisionResponseAnimator(sb, levelnode, new vector3d(10, 50, 10),
new vector3d(0, 0, 0), new vector3d(0, 10, 0), 0);
levelnode.AddAnimator(collision);
//physik initialisation ball
maPhysique = new Physique();
monThreadDeRenduPhysique = new Thread(new ThreadStart(maPhysique.PhysiqueRenderLoop));
monThreadDeRenduPhysique.IsBackground = true;
monThreadDeRenduPhysique.Start();
//add font
IGUIFont font = device.GUIEnvironment.GetFont("media/font/fontcourier.bmp");
rect imp1 = new rect(349, 15, 385, 78);
//camera
ICameraSceneNode cam = smgr.AddCameraSceneNode(null, new vector3d(-600, 700, z), new vector3d(0, x, z), 0);
//Add a light
smgr.AddLightSceneNode(null, new vector3d(0, 1000, 0),
new Colorf(1.0f, 1.0f, 1.0f, 1.0f), 5000, 500);
//add skybox
device.SceneManager.AddSkyBoxSceneNode(
device.VideoDriver.GetTexture("media/sky/_up.jpg"),
device.VideoDriver.GetTexture("media/sky/_dn.jpg"),
device.VideoDriver.GetTexture("media/sky/_lf.jpg"),
device.VideoDriver.GetTexture("media/sky/_rt.jpg"),
device.VideoDriver.GetTexture("media/sky/_ft.jpg"),
device.VideoDriver.GetTexture("media/sky/_bk.jpg"),
null, -1);
//retirer le cursor
device.CursorControl.Visible = false;
int fps = 0;
while (device.Run())
{
if (device.WindowActive)
{
device.VideoDriver.BeginScene(true, true, new Irrlicht.video.Color(100, 100, 100, 100));
device.SceneManager.DrawAll();
if (font != null)
{
font.Draw("x ->" + ballnode.Position.X.ToString(), new rect(10, 10, 10, 10), new Irrlicht.video.Color(255, 200, 0, 0), false, false);
font.Draw("y ->" + ballnode.Position.Y.ToString(), new rect(10, 20, 10, 10), new Irrlicht.video.Color(255, 200, 0, 0), false, false);
font.Draw("z ->" + ballnode.Position.Z.ToString(), new rect(10, 30, 10, 10), new Irrlicht.video.Color(255, 200, 0, 0), false, false);
}
device.VideoDriver.EndScene();
// display frames per second value
if (fps != device.VideoDriver.FPS)
{
fps = device.VideoDriver.FPS;
device.WindowCaption = "Moteur - irrlicht [" + device.VideoDriver.Name + "] fps:" + fps;
}
}
}
}
}
}
Hors ligne
Aaah d'accord, tu utilises ODE ; j'avais pas compris étant donné le titre de ce thread...
As-tu créé dans la classe Physique ton geom et ton body qui représentent ta baballe ?
Hors ligne
excuse moi je me suis trompé de moteur physique :s "dsl" bon voici ma partie physique cela t'aidera surment à m'aider à trouver une solution
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using ODE;
using ODE.Geoms;
using ODE.NoMDX;
namespace IrrCP_Ode
{
/// <summary>
/// Description of Physique.
/// </summary>
public class Physique
{
private World World;
private Space Space;
private Geom GroundPlane;
private DefaultCollider Collider;
public Body[] Body;
public Sphere GeomSphere;
private int vitesseBoucle = 1000 / 70;
public Physique()
{
World = new World();
World.Gravity = new Vector3(0, -2f, 0f);
Collider = new DefaultCollider(World);
Space = new Space();
Space.Collider = new CollisionDelegate(Collider.Collide);
GroundPlane = new Plane(new Vector3(0, 1, 0), 0);
Space.Add(GroundPlane);
Body = new Body[1];
GeomSphere = new Sphere(1);
GeomSphere.RigidBody = Body[1];
Space.Add(GeomSphere);
Body[1] = new Body(World);
Body[1].Mass = Mass.SphereTotal(0.2f, 5);
Body[1].Position = new Vector3(0, 5f, -55f);
Body[1].AutoDisable = true;
}
public void PhysiqueRenderLoop() //boucle de rendu physique
{
while (1 == 1)
{
Stopwatch stopWatch = Stopwatch.StartNew();
Space.Collide();
World.QuickStep(0.15f, 10);
Collider.ClearContactJoints();
if ((vitesseBoucle - stopWatch.ElapsedMilliseconds) > 0)
{
try
{
System.Threading.Thread.Sleep((vitesseBoucle - Convert.ToInt16(stopWatch.ElapsedMilliseconds)));
}
catch
{
}
}
}
}
}
}
Dernière modification par N10 (27-01-2007 15:04:24)
Hors ligne
N10 :
pourais-tu m'expliquer comment implémenter ce type de configuration sans utiliser "void animermeshs" mettre directement à la suite du programme initiale la référence qui permet de lier en ce qui me concerne un objet appellé "ballnode" avec "mGeomSphere" ???
void AnimerLesMeshs()
{
//Mise à jour de la sphere
updateEntitiesAfterPhysics(ref SphereSceneNode, maPhysique.oGeomSphere);
}
Et bien si je me rappelle bien les choses, il suffit d'appeler dans ta boucle de rendu d'Irrlciht la methode updateEntitiesAfterPhysics(ref taSphereSceneNode, taPhysique.tonGeoSphereDeOde);
J'ai peur de ne pas trop bien saisir ta demande ^^
Hors ligne
en fai si tu regarde bien mon prog (pas ma classe physique) par rapport au tien je n'ai qu'une gd méthode "void run" et dans ton exemple il y avais plusieurs méthodes y compris
void AnimerLesMeshs()
{
//Mise à jour de la sphere
updateEntitiesAfterPhysics(ref SphereSceneNode, maPhysique.oGeomSphere);
}
mais dans mon progra je voudrais l'implémenter directement sans écrire de nouvelle méthode et c'est la que je ne sais pas comment faire (je sais pas si tu me suis,mais sa bUg lol) ?
Dernière modification par N10 (28-01-2007 18:32:20)
Hors ligne
Non j'ai du mal à suivre là lol
Pourquoi tu ne recopies pas la méthode updateEntitiesAfterPhysics(...,...) dans ton programme ?
Apres il n'y a plus qu'à l'appeler dans ta boucle de rendu ^^
Hors ligne
Je me suis permis de renomer le topic pour plus de clarté sur le forum en "Ode C#".
Voilou @+
Hors ligne
Oui j'y avai pas pensé ds ma boucle atant je vais tester (merci copland tu as bien fait,dsl pour le nom du topic)
Dernière modification par N10 (30-01-2007 14:31:12)
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 22 invités en ligne Aucun membre connecté RSS Feed |