Aktuelle Zeit: 13.05.2025, 17:46

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bullet in Irrlicht integrieren
BeitragVerfasst: 05.12.2008, 15:57 
Offline

Registriert: 05.12.2008, 15:52
Beiträge: 3
Greetz,
für mein Projekt benötige ich eine Physik Engine und ich habe mich dabei für Bullet entschieden.
Mit diesem Tutorial habe ich die Grundlagen von Bullet gelernt
http://www.bulletphysics.com/mediawiki- ... ello_World
Das hilft aber lieder nicht so viel weiter, da ich es in meinem 3D Projekt verwenden will.
Hier ist mal mein 1. Versuch
Code:
#include <btBulletDynamicsCommon.h>
#include <irrlicht.h>
#include <iostream>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
       
// convert bullet vector to irrlicht vector
core::vector3df toIrrVec(const btVector3& v);

// convert
btVector3 toBtVec(const core::vector3df& v);

// get Euler angles in YXZ-order from bullet quaternion
core::vector3df quaternionToEuler(const btQuaternion& q);

// get bullet quaternion from angles in YXZ-order
btQuaternion eulerToQuaternion(const core::vector3df& euler);

// transform irrlicht matrix to bullet transform
btTransform toBtTransform(const core::matrix4& m);

// choose coordinates from vector
core::vector3df vecAxes(const core::vector3df& v, bool x, bool y, bool z);

// null vector
const btVector3 NullVector(0.0f, 0.0f, 0.0f);



int main ()
{
   std::cout << "Hello World!" << std::endl;
   int maxProxies = 1024;
   btVector3 worldAabbMin(-10000,-10000,-10000);
    btVector3 worldAabbMax(10000,10000,10000);
   btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies);
   btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
    btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
   btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
   btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
   dynamicsWorld->setGravity(btVector3(0,-10,0));

   btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),1);
   btCollisionShape* fallShape = new btSphereShape(1);
    btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,-1,0)));
   btRigidBody::btRigidBodyConstructionInfo groundRigidBodyCI(0,groundMotionState,groundShape,btVector3(0,0,0));
    btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI);
   dynamicsWorld->addRigidBody(groundRigidBody);
    btDefaultMotionState* fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,50,0)));
   btScalar mass = 1;
    btVector3 fallInertia(0,0,0);
    fallShape->calculateLocalInertia(mass,fallInertia);
   btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia);
    btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
    dynamicsWorld->addRigidBody(fallRigidBody);

   // Irrlicht
   IrrlichtDevice *device = createDevice(EDT_DIRECT3D9, core::dimension2d<s32>(640, 480));
    if (device == 0)
      return 1; // could not create selected driver.
     video::IVideoDriver* driver = device->getVideoDriver();
     scene::ISceneManager* smgr = device->getSceneManager();
meraSceneNodeFPS(0, 100.0f, 300.0f, -1, 0, 5, true, 1.0);
   device->getFileSystem()->addZipFileArchive("map.pk3");
   IAnimatedMesh* mesh = smgr->getMesh("addit.bsp");
   ISceneNode* node = 0;
   node = smgr->addOctTreeSceneNode(mesh->getMesh(0), 0, -1, 128);
    node->setPosition(core::vector3df(-1300,-144,-1249));
   ITriangleSelector* selector=smgr->createOctTreeTriangleSelector(mesh->getMesh(0), node,128);
    node->setTriangleSelector(selector);
   if (selector)
    {
      ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
        selector, camera, vector3df(20,40,35),
        vector3df(0,-1,0),
        vector3df(0,50,0));
        selector->drop();
        camera->addAnimator(anim);
        anim->drop();
   }

      // car
   IAnimatedMesh* mesh2 = smgr->getMesh("bat.3DS");
   ISceneNode *node3 = smgr->addAnimatedMeshSceneNode( mesh2 );
   node3->setMaterialFlag(EMF_LIGHTING, false);

    while(device->run())
     {

                driver->beginScene(true, true, SColor(255,100,101,140));
                smgr->drawAll();
                driver->endScene();
        }




   delete dynamicsWorld;
    delete solver;
    delete dispatcher;
    delete collisionConfiguration;
    delete broadphase;

   system("PAUSE");
   return 0;
}

vector3df toIrrVec(const btVector3& v)
{
   return (vector3df&)v;
}

btVector3 toBtVec(const vector3df& v)
{
   // btVector requires special byte alignment so better not take my chances.
   return btVector3(v.X, v.Y, v.Z);
}

vector3df quaternionToEuler(const btQuaternion& q) {
  vector3df euler;
  quaternion(q.getX(), q.getY(), q.getZ(), q.getW()).toEuler(euler);
  return euler;
}

btQuaternion eulerToQuaternion(const vector3df& euler) {
  return btQuaternion(euler.Y, euler.X, euler.Z);
}

btTransform toBtTransform(const matrix4& m) {
  btScalar* p = (btScalar*)m.pointer();
  return btTransform(
    btMatrix3x3(p[0], p[1], p[2], p[4], p[5], p[6], p[8], p[9], p[10]),
    btVector3(p[12], p[13], p[14])
    );
}

core::vector3df vecAxes(const core::vector3df& v, bool x, bool y, bool z) {
  vector3df c;
  if(x) c.X = v.X;
  if(y) c.Y = v.Y;
  if(z) c.Z = v.Z;
  return c;
}



Was haltet ihr davon?
Kann mir jemand ein Beispiel geben wie genau ich jetzt etwas von der Engine zu sehen bekomme?
Wie adde ich die Physics zu meinem Car?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Bullet in Irrlicht integrieren
BeitragVerfasst: 08.12.2008, 07:32 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Sorry, ich hab mir jetzt nicht alles durchgelesen, da ich grad ein wenig Eile hab, aber guck dir doch mal diesen Thread im engslichen Forum an:

http://irrlicht.sourceforge.net/phpBB2/ ... hp?t=17910


Da ist auch jede Menge Code dabei...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Bullet in Irrlicht integrieren
BeitragVerfasst: 09.12.2008, 20:11 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Hallo zusammen!

Eine kleine Frage zwischendurch: Gibt es keinen Wrapper für Bullet?
Wenn es einen geben sollte, würde ich an erster Stelle es mit diesem versuchen.

Wenn garnichts mehr geht, wirf einen Blick auf Havok. 8)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de