Aktuelle Zeit: 22.12.2024, 15:19

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Kamera auf Kollision einstellen
BeitragVerfasst: 25.05.2011, 15:45 
Offline

Registriert: 25.02.2011, 15:22
Beiträge: 179
hallo,
ich habe mir mit blender ein raumähniches-mesh erstellt, dass ich dann mit irrlicht texturiert habe. funktioniert auch alles, der raum lässt sich allerdings nur mit der fliegenden fps-kamera begutachten. das wäre dann auch schon meine frage: wie muss ich die kamera modifizieren, damit ich nicht mehr aus diesem raum "rausfliegen" kann, sondern eben dann an eine wand stoße und allgemein nicht durch objekte "fliegen" kann?

_________________
Irrlicht - from Noob to Pro
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 25.05.2011, 16:43 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Hab das zwar noch nie gemacht, weil ich zu sehr auf 2D stehe, aber ich denke mal du kannst die Kamera auch als Kollisionsobjekt von dem MetaTriangleSelector angeben. Ist ja nix weiter als n SceneNode (genauer ne Klasse, die von ISceneNode erbt).

Ansonsten naiver Ansatz: Da der Raum ja Rechteckig ist (nehme ich mal an), kannste sagen, falls x Position ist kleiner als bla und größer als blubb ist die Kamera im Raum (genau das gleiche für Y und Z). Also bebietest du einfach ein Movement, falls die neue Position außerhalb des Raumes wäre (Sprich das was der Kollisionsdetector eig machen sollte).

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 25.05.2011, 17:32 
Offline

Registriert: 25.02.2011, 15:22
Beiträge: 179
also dann werde das mit dem triangle selector machen. das problem: das zeug in der api scheint fehlerhaft zu sein.

_________________
Irrlicht - from Noob to Pro
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 25.05.2011, 18:06 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Welche Stelle meinst du genau?

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 25.05.2011, 18:12 
Offline

Registriert: 25.02.2011, 15:22
Beiträge: 179
ich poste mal meinen ganzen quelltext:

Code:

#include <irrlicht.h>
using namespace irr;
using namespace video;
using namespace core;
using namespace scene;
using namespace gui;
using namespace io;
int main()
{
    IrrlichtDevice *device=
    createDevice(EDT_OPENGL, dimension2d<u32>(640,480),0,false,false,false,0);
    if (!device)
       return 1;
    device->setWindowCaption(L"Zimmer");
    IVideoDriver *driver=device->getVideoDriver();
    ISceneManager *smgr=device->getSceneManager();
    IAnimatedMesh *mesh=smgr->getMesh("C:/Dokumente und Einstellungen/###########/Desktop/Zimmer.3ds");
    smgr->getMeshManipulator()->makePlanarTextureMapping(mesh->getMesh(0), 1.008f);
    scene::ISceneNode* node = 0;

   node = smgr->addAnimatedMeshSceneNode(mesh);
   node->setMaterialTexture(0,   driver->getTexture("../../media/wall.jpg"));
   node->getMaterial(0).SpecularColor.set(0,0,0,0);








   scene::ITriangleSelector* selector = 0;

    scene::ICameraSceneNode* camera =
                smgr->addCameraSceneNodeFPS(0, 100.0f, .3f/*, ID_IsNotPickable*/, 0, 0, true, 3.f);
        camera->setPosition(core::vector3df(0,0,0));
        camera->setTarget(core::vector3df(-70,30,-60));

        if (selector)
        {
                scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
                        selector, camera, core::vector3df(30,50,30),
                        core::vector3df(0,-10,0), core::vector3df(0,30,0));
                selector->drop();
                camera->addAnimator(anim);
                anim->drop(); 
        }

      device->getCursorControl()->setVisible(false);






    node = smgr->addLightSceneNode(0, core::vector3df(0,0,0),
      video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600.0f);



    while(device->run())
    {
        driver->beginScene(true,true,0);
        smgr->drawAll();
        driver->endScene();
    }
    device->drop();
    return 0;



}



funktioniert alles, mesh wird geladen und so, aber die kamera bewegt sich halt immernoch frei und durch die wände hindurch.

_________________
Irrlicht - from Noob to Pro
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 27.05.2011, 06:44 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Hab ich zwar noch nicht gemacht, aber ich hab da ne Vermutung. Du hast den Beispielcode ausm Tutorial genommen, wie ich sehe. Du hast angegeben, dass deine Kamera ein Objekt ist, was auf Kollision reagieren soll. Irrlicht weiß aber nicht, welche Objekte eine Kollision verursachen, das musst du dem auch sagen, da ja manche Objekte nicht kollidierbar sein dürfen (Wolken, Rauch, etc...).

Daher solltest du mal, das hier adden:
Code:
scene::ITriangleSelector* selector = smgr->createTerrainTriangleSelector(node, 0);
terrain->setTriangleSelector(node);

//Dann Kamera...

So weiß Irrlicht, dass die Kamera mit deinem Zimmer kollidieren soll und wird das auch berechnen. Hoffe das war so richtig, wie gesagt hab mich damit nicht groß rumgeschlagen^^

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 27.05.2011, 15:06 
Offline

Registriert: 25.02.2011, 15:22
Beiträge: 179
es kommen folgende fehlermeldungen:

Zitat:
C:\Dokumente und Einstellungen\#####\Desktop\visualc++++++\Raum\main.cpp||In function 'int main()':|
C:\Dokumente und Einstellungen\######\Desktop\visualc++++++\Raum\main.cpp|28|error: invalid conversion from 'irr::scene::ISceneNode*' to 'irr::scene::ITerrainSceneNode*'|
C:\Dokumente und Einstellungen\#####\Desktop\visualc++++++\Raum\main.cpp|28|error: initializing argument 1 of 'virtual irr::scene::ITriangleSelector* irr::scene::ISceneManager::createTerrainTriangleSelector(irr::scene::ITerrainSceneNode*, irr::s32)'|
C:\Dokumente und Einstellungen\#####\Desktop\visualc++++++\Raum\main.cpp|29|error: 'class irr::scene::IAnimatedMesh' has no member named 'setTriangleSelector'|
||=== Build finished: 3 errors, 0 warnings ===|

_________________
Irrlicht - from Noob to Pro
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 27.05.2011, 17:22 
Offline

Registriert: 11.07.2010, 10:11
Beiträge: 8
Hi noob,

Dieses Stück Code ist aus dem Kollisions Demo,für die 'q3node' nimmst Du Dein Raum Mesh.
Code:
scene::ITriangleSelector* selector = 0;

   if (q3node)
   {
      q3node->setPosition(core::vector3df(-1350,-130,-1400));

      selector = smgr->createOctreeTriangleSelector(
            q3node->getMesh(), q3node, 128);
      q3node->setTriangleSelector(selector);
      // We're not done with this selector yet, so don't drop it.
   }


Den erstellten 'selector' als Parameter der Funktion 'createCollisionResponseAnimator()' übergeben.
Code:
if (selector)
   {
      scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
         selector, camera, core::vector3df(30,50,30),
         core::vector3df(0,-10,0), core::vector3df(0,30,0));
      selector->drop(); // As soon as we're done with the selector, drop it.
      camera->addAnimator(anim);
      anim->drop();  // And likewise, drop the animator when we're done referring to it.
   }


Gruß
Nighthawk

_________________
IrrlichtWrapper C#/VB/PB
http://www.druid3d.de/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 27.05.2011, 17:37 
Offline

Registriert: 25.02.2011, 15:22
Beiträge: 179
auch hier kommen ein haufen fehler:

Code:
In function 'int main()':|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|30|error: 'class irr::scene::IAnimatedMesh' has no member named 'setPosition'|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|33|error: no matching function for call to 'irr::scene::IAnimatedMesh::getMesh()'|
C:\Dokumente und Einstellungen\Name\Desktop\SDK-Irrlicht3D\irrlicht-1.7.1\include\IAnimatedMesh.h|
81|note: candidates are: virtual irr::scene::IMesh* irr::scene::IAnimatedMesh::getMesh(irr::s32, irr::s32, irr::s32, irr::s32)|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|34|error: 'class irr::scene::IAnimatedMesh' has no member named 'setTriangleSelector'|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|43|error: redeclaration of 'irr::scene::ITriangleSelector* selector'|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|26|error: 'irr::scene::ITriangleSelector* selector' previously declared here|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|43|error: invalid conversion from 'irr::scene::ISceneNode*' to 'irr::scene::ITerrainSceneNode*'|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|43|error:   initializing argument 1 of 'virtual irr::scene::ITriangleSelector* irr::scene::ISceneManager::createTerrainTriangleSelector(irr::scene::ITerrainSceneNode*, irr::s32)'|
C:\Dokumente und Einstellungen\Name\Desktop\visualc++++++\Raum\main.cpp|
44|error: 'class irr::scene::IAnimatedMesh' has no member named 'setTriangleSelector'|
||=== Build finished: 8 errors, 0 warnings ===|[code][/code]

_________________
Irrlicht - from Noob to Pro
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 27.05.2011, 17:43 
Offline

Registriert: 11.07.2010, 10:11
Beiträge: 8
Poste mal Deinen Code.

_________________
IrrlichtWrapper C#/VB/PB
http://www.druid3d.de/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 27.05.2011, 17:48 
Offline

Registriert: 25.02.2011, 15:22
Beiträge: 179
hier der code, ich habs mir teilweise mit copy&paste aus den irrlicht-beispielcodes zusammengeklaubt, ich mache mir jetzt nicht die mühe und entferne die ganzen kommentare.



Code:
#include <irrlicht.h>
using namespace irr;
using namespace video;
using namespace core;
using namespace scene;
using namespace gui;
using namespace io;
int main()
{
    IrrlichtDevice *device=
    createDevice(EDT_OPENGL, dimension2d<u32>(640,480),0,false,false,false,0);
    if (!device)
       return 1;
    device->setWindowCaption(L"Zimmer");
    IVideoDriver *driver=device->getVideoDriver();
    ISceneManager *smgr=device->getSceneManager();
    //IAnimatedMesh *mesh=smgr->getMesh("C:/Dokumente und Einstellungen/Name/Desktop/Zimmer.3ds");
    IAnimatedMesh *mesh=smgr->getMesh("C:/Dokumente und Einstellungen/Name/Desktop/Zimmer.3ds");
    smgr->getMeshManipulator()->makePlanarTextureMapping(mesh->getMesh(0), 1.008f);
    scene::ISceneNode* node = 0;

   node = smgr->addAnimatedMeshSceneNode(mesh);
   node->setMaterialTexture(0,   driver->getTexture("C:/Dokumente und Einstellungen/Name/Desktop/SDK-Irrlicht3D/irrlicht-1.7.1/media/wall.jpg"));
   node->getMaterial(0).SpecularColor.set(0,0,0,0);

   scene::ITriangleSelector* selector = 0;

   if (mesh)
   {
      mesh->setPosition(core::vector3df(-1350,-130,-1400));

      selector = smgr->createOctreeTriangleSelector(
            mesh->getMesh(), mesh, 128);
      mesh->setTriangleSelector(selector);
      // We're not done with this selector yet, so don't drop it.
   }






    scene::ITriangleSelector* selector = smgr->createTerrainTriangleSelector(node, 0);
mesh->setTriangleSelector(node);











   //scene::ITriangleSelector* selector = 0;

    scene::ICameraSceneNode* camera =
                smgr->addCameraSceneNodeFPS(0, 100.0f, .3f/*, ID_IsNotPickable*/, 0, 0, true, 3.f);
        camera->setPosition(core::vector3df(0,0,0));
        camera->setTarget(core::vector3df(-70,30,-60));


if (selector)
   {
      scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
         selector, camera, core::vector3df(30,50,30),
         core::vector3df(0,-10,0), core::vector3df(0,30,0));
      selector->drop(); // As soon as we're done with the selector, drop it.
      camera->addAnimator(anim);
      anim->drop();  // And likewise, drop the animator when we're done referring to it.
   }



      device->getCursorControl()->setVisible(false);






    node = smgr->addLightSceneNode(0, core::vector3df(0,0,0),
      video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600.0f);



    while(device->run())
    {
        driver->beginScene(true,true,0);
        smgr->drawAll();
        driver->endScene();
    }
    device->drop();
    return 0;



}

_________________
Irrlicht - from Noob to Pro
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kamera auf Kollision einstellen
BeitragVerfasst: 27.05.2011, 18:25 
Offline

Registriert: 11.07.2010, 10:11
Beiträge: 8
Code:
#include <irrlicht.h>
using namespace irr;
using namespace video;
using namespace core;
using namespace scene;
using namespace gui;
using namespace io;
int main()
{
    IrrlichtDevice *device=
    createDevice(EDT_OPENGL, dimension2d<u32>(640,480),0,false,false,false,0);
    if (!device)
       return 1;
    device->setWindowCaption(L"Zimmer");
    IVideoDriver *driver=device->getVideoDriver();
    ISceneManager *smgr=device->getSceneManager();

   //Mesh Laden   
    IAnimatedMesh *mesh=smgr->getMesh("C:/Dokumente und Einstellungen/Name/Desktop/Zimmer.3ds");
    smgr->getMeshManipulator()->makePlanarTextureMapping(mesh->getMesh(0), 1.008f);
  //IMeshSceneNode statt SceneNode
    scene::IMeshSceneNode* node = 0;
   //Dem Mesh einen OctreeSceneNode zuweisen ->gibt IMeshSceneNode* zurück
   node = smgr->addOctreeSceneNode(mesh->getMesh(0));

   
   node->setMaterialTexture(0,   driver->getTexture("C:/Dokumente und Einstellungen/Name/Desktop/SDK-Irrlicht3D/irrlicht-1.7.1/media/wall.jpg"));
   node->getMaterial(0).SpecularColor.set(0,0,0,0);

   scene::ITriangleSelector* selector = 0;
  //Mit IMeshSceneNode weiter
   if (node)
   {
     node->setPosition(core::vector3df(-1350,-130,-1400));

      selector = smgr->createOctreeTriangleSelector(
            node->getMesh(), node, 128);
      node->setTriangleSelector(selector);
      // We're not done with this selector yet, so don't drop it.
   }






//   scene::ITriangleSelector* selector = smgr->createTerrainTriangleSelector(node, 0);
//mesh->setTriangleSelector(node);











   //scene::ITriangleSelector* selector = 0;

    scene::ICameraSceneNode* camera =
                smgr->addCameraSceneNodeFPS(0, 100.0f, .3f/*, ID_IsNotPickable*/, 0, 0, true, 3.f);
        camera->setPosition(core::vector3df(0,0,0));
        camera->setTarget(core::vector3df(-70,30,-60));


if (selector)
   {
      scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
         selector, camera, core::vector3df(30,50,30),
         core::vector3df(0,-10,0), core::vector3df(0,30,0));
      selector->drop(); // As soon as we're done with the selector, drop it.
      camera->addAnimator(anim);
      anim->drop();  // And likewise, drop the animator when we're done referring to it.
   }



      device->getCursorControl()->setVisible(false);





   scene::ISceneNode* lightNode=Null;
    lightNode = smgr->addLightSceneNode(0, core::vector3df(0,0,0),
      video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600.0f);



    while(device->run())
    {
        driver->beginScene(true,true,0);
        smgr->drawAll();
        driver->endScene();
    }
    device->drop();
    return 0;



}


Habe es nicht getestet.
Sry,hab noch einen Fehler im Code übersehen.

Gruß
Nighthawk

_________________
IrrlichtWrapper C#/VB/PB
http://www.druid3d.de/


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de