#0 

30-10-2006 14:30:02

N10
Membre
Date d'inscription: 27-10-2006
Messages: 46

Salut à tous

Voila mon problem, en observant le code pour faire bouger les cubes/sphères (exemple 2),je n'ai pas tout à fait compris comment faire :s mon but étant de pouvoir faire bouger une camera avec les touches que je désire dans un programme.
Est-ce que quelque'un pourai m'expliquer dans un source comment faire  ? smile Merci d'avance

Hors ligne


#1 

31-10-2006 19:24:03

Dekron
Membre
Lieu: Orléans
Date d'inscription: 21-10-2006
Messages: 46
Site web

heu .. j'aurais pu en C++, mais la non dsl hmm


Visitez Arcis : MMORPG ammateur utilisant irrlicht !
Etudiant ingénieur, maitrise C++, connaissances python & php.

Hors ligne


#2 

31-10-2006 19:51:44

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Heu faire bouger une caméra par ton propre code implique un minimum de connaissance dans les vecteurs je pense.
Avant de te lancer dans les mouvements de caméra, il serait peut être plus sage d'observer et comprendre le fonctionnement d'un mouvement basique sur un simple objet smile.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#3 

01-11-2006 10:27:32

wizad
Abonné
Lieu: Caen
Date d'inscription: 30-09-2006
Messages: 106

Sinon pour débuter tu peux aussi faire 6 boutons : chacun pilote le mouvement de la caméra sur un axe (x, y ,z) (un bouton plus et u bouton moins pour chaque axe) et aprés c'est de la manipulation basique de vector3d.

Bon courage

Hors ligne


#4 

02-11-2006 10:57:38

N10
Membre
Date d'inscription: 27-10-2006
Messages: 46

En fai je cherche surtout à faire un code simple du style

//de façon grossière:
if (key_z press down)
Camera.Posiotion = Vectord 3d +1

Donc si vous avez des expemle du même type je suis preneur car je patoge un peut sur ce domaine smile

Hors ligne


#5 

04-11-2006 11:26:22

N10
Membre
Date d'inscription: 27-10-2006
Messages: 46

En observant de plus près l'example 4 en C# j'ai pu remanier mon code mais je n'arrive pas à comprendre pourquoi les touches que j'ai assignées ne fonctionnes pas voici l'éssentiel de mon code :

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;

namespace _d_real
{
    class Program
    {
        ICameraSceneNode node = null;
        IrrlichtDevice device = null;
        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Program prog = new Program();
            prog.run();
        }
        public bool OnEvent(Event p_e)
        {
            if (node != null && p_e.Type == EventType.KeyInput && !p_e.KeyPressedDown)
            {
                switch (p_e.Key)
                {
                    case KeyCode.KEY_ESCAPE:
                        device.CloseDevice();
                        break;
                    case KeyCode.KEY_KEY_Z:
                    case KeyCode.KEY_KEY_S:
                        {
                            vector3d v = node.Position;
                            v.Z += p_e.Key == KeyCode.KEY_KEY_Z ? 10.0f : 0.0f;
                            node.Position = v;
                        }
                        return true;
                }
            }
            return false;
        }
        public void run()
        {
            // start up the engine
            IrrlichtDevice device = new IrrlichtDevice(Irrlicht.video.DriverType.OPENGL,new dimension2d(1024, 768), 32, false, true, true);
            device.WindowCaption = "Moteur-irrlicht";

           
            //scene et driver en place
            ISceneManager smgr = device.SceneManager;
            IVideoDriver driver = device.VideoDriver;           

            //load map
            IAnimatedMesh levelmesh = smgr.GetMesh("map street/01.dmf");
     
            //envoi collision type OctTree
            ISceneNode levelnode = null;
            if (levelmesh != null)
                levelnode = smgr.AddOctTreeSceneNode(levelmesh.GetMesh(0), null, 0);

            ITriangleSelector selector = null;
            if (levelnode != null)
            {
                levelnode.Position = new vector3d(0, 0, 0);
                selector = smgr.CreateOctTreeTriangleSelector(levelmesh.GetMesh(0), levelnode, 128);               
            }
           
            //camera
            node = smgr.AddCameraSceneNode(null, new vector3d(-3000, 400, -10), new vector3d(), -1);
             
       
            //reponse de collision
            ISceneNodeAnimator anim = smgr.CreateCollisionResponseAnimator(selector, node, new vector3d(10, 150, 10),
            new vector3d(0, -1, 0), new vector3d(0, 50, 0), 0);
            node.AddAnimator(anim);

            int fps = 0;

            while (device.Run())
            {
                if (device.WindowActive)
                {
                    device.VideoDriver.BeginScene(true, true, new Color(100, 100, 100, 100));

                    device.SceneManager.DrawAll();

                    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;
                    }
                }

            }
        }     
    }
}



Si quelqu'un peut m'aider à comprendre pourquoi même ma touche "escape" ne ferme pas mon programme smile

Hors ligne


#6 

04-11-2006 18:20:06

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

sauf erreur de ma part, mais il me semble que pour irrlicht et les events c'est comme ça mais je me trompe peut être de version car j'utilise la svn :
public bool OnEvent(Event &p_e)
Ensuite je ne vois nullle par un endroit ou tu assigne event à device c'est peut être ça qu'il te manque...


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#7 

04-11-2006 23:02:06

N10
Membre
Date d'inscription: 27-10-2006
Messages: 46

[Ensuite je ne vois nullle par un endroit ou tu assigne event à device c'est peut être ça qu'il te manque...]

C'est à dire ? :s

Hors ligne


#8 

05-11-2006 10:12:16

kedu
Modérateur
Date d'inscription: 23-09-2006
Messages: 155

Je crois que tu utilises le wrapper officiel ? Si oui, ne faudrait-il pas que ta classe hérite de IEventReceiver pour que tu puisses utiliser les events ?

En tout cas, de mémoire, c'est ce qu'il faut faire avec ce wrapper hmm

Hors ligne


#9 

05-11-2006 15:39:24

N10
Membre
Date d'inscription: 27-10-2006
Messages: 46

ba en faite t'avais raison Copland (donc par concéquence je croi que je n'utillise pas la version officiel du wrapper Kedu,même si franchement je ne sait pas ce qu'est un "wrapper":s) c'était ça qui manquais:
//
class Program : IEventReceiver
...
device.EventReceiver = this;
            node = smgr.AddCameraSceneNode(null, new vector3d(-3000, 400, -10), new vector3d(), 0);
//

Merci pour votre aide smile,à ce propos j'ai encore un autre soucis,ma camera tourne toujours autour du même point,je pe me déplacer à ma guise mais je fixe toujours le même point.
Comment pourai-je faire pour fixer ma vision par rapport à ma souris ? (comme dans tous bon jeux qui se respecte smile)

Dernière modification par N10 (05-11-2006 15:40:16)

Hors ligne


#10 

05-11-2006 19:04:18

kedu
Modérateur
Date d'inscription: 23-09-2006
Messages: 155

D'après ce que je vois tu utilises effectivement le wrapper officiel d'Irrlicht. Cette librairie officielle permet d'utiliser Irrlicht qui n'est pas développé dans un language .net.

Par contre comme tu l'as remarqué avec ce wrapper officiel il fallait hériter ta classe de IEventReceiver. Ce qui est pas trop dans la phylosophie de .net cette manière de gérer les events. C'est pourquoi je te recommande d'utiliser plutôt le wrapper non officiel IrrlichtCP.net qui est à mon sens moins déroutant que le wrapper officiel.

Et pour répondre à ta question au niveau gestion des caméras, tu as plusieurs types de caméra de disponible. Essaye les pour voir celle qui te semble la plus adaptée. Les tutoriaux pourront t'en donner également des exemples pour aller plus vite.

Hors ligne


#11 

05-11-2006 19:36:29

N10
Membre
Date d'inscription: 27-10-2006
Messages: 46

Merci pour tes infos Kedu tu m'évite de posé un topic à ce sujet smile (entre officiel et non officiel)

En éffets je pourais me servire des cameras préfaites seulement certain détails me gènes notament  la simmulation pour faire sauter la caméra (camera scene node fps). Je préfère remanier la camera  à ma guise smile

...et donc j'ai toujours se problème de la fixation de vision de ma camera :s

Dernière modification par N10 (05-11-2006 19:37:42)

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
112 invités en ligne
Aucun membre connecté
RSS Feed