Aktuelle Zeit: 29.03.2024, 10:42

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 11.05.2011, 17:15 
Offline

Registriert: 11.05.2011, 14:49
Beiträge: 6
Hi,

Schonmal in vorraus:
- Ja, ich habe das Forum durchsucht
- Ja ich habe auch schon das Allheilmittel Google befragt

:D

So nun zu mir.

Wir müssen bei uns an der FH ein kleines 3D Spiel programmieren.
Wir wollten ein kleines Rennspiel machen.

Derzeit ist der Stand so, dass wir ein Auto haben, das wir bewegen können.
Ich hatte auch schon mit dem Terrain und mit Kollisionen (createCollisionResponseAnimator) rumgespielt.

Jetzt habe ich aber ein kleines Problem:

Wir wollten die Strecke, auf der das Auto fährt aus kleinen Teilelementen bauen, was auch gut klappt.
Möchte ich jetzt aber dem Auto diese Elemente als Kollision zuweisen, sodass es zum Beispiel NICHT durch die Straße
fällt sondern darauf bleibt, klappt das nicht.

Nehme ich nur ein Straßenelement, so reagiert es mit der Kollision.

Code:
for(int k = 0;k<10;k++)
   {
      ger[k] = smgr->addMeshSceneNode(germ);
      ger[k]->setScale(vector3df(4,1,10));
      ger[k]->setPosition(vector3df(0,0,k*2000));
      selector= smgr->createTriangleSelector(ger[k]);
      ger[k]->setTriangleSelector(selector);
      
      anim2[k] = smgr->createCollisionResponseAnimator(
                        selector, node, core::vector3df(410,125,190),
                        core::vector3df(0,-10,0), core::vector3df(0,-10,0));

        node->addAnimator(anim2[k]);
   }


ger (für Gerade) ist mein Strassenlement und node ist halt das Auto.

Kann mir Jemand vielleicht helfen?


Zuletzt geändert von JoetheJunkie am 12.05.2011, 09:41, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Anfängerfrage zur Kollision
BeitragVerfasst: 11.05.2011, 17:48 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Inwiefern reagiert es denn mit der Straße? Bewegt sich da überhaupt was? Alternativer Tipp: Es gibt ein Physikwrapper für Irrlicht (IrrNewt), da ist sowas direkt als Beispiel mit drin (aber veraltet...). Noch besserer Tipp: Es gibt n anderen Physikwrapper ODE, wird auch in dem hier verwendet. Ist fast genau das was ihr machen wollt nur mit Murmeln ;D

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Anfängerfrage zur Kollision
BeitragVerfasst: 11.05.2011, 18:57 
Offline

Registriert: 11.05.2011, 14:49
Beiträge: 6
Hi,

Du meinst sicher den IrrODE-Wrapper richtig?

Da hab ich mir schonmal die ganzen Sachen angeschaut, aber irgendwie nicht verstanden.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Anfängerfrage zur Kollision
BeitragVerfasst: 11.05.2011, 20:03 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Evtl haste Glück und Brainsaw meldet sich zu Wort, der ist da Spezi drin ;D

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

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


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Anfängerfrage zur Kollision
BeitragVerfasst: 11.05.2011, 20:44 
Offline

Registriert: 11.05.2011, 14:49
Beiträge: 6
Hi,

Erstmal Danke für die Hilfe.

Ich hatte mir evtl was anderes überlegt, was auch noch gehen würde.

Und zwar wollte ich als Ersatz dieses Machen:

Von den Ecken des Autos lass ich Linien laufen.
Diese können ja auch mit anderen Sachen "kollidieren".

Jetzt hab ich aber schon wieder ein anderes Problem :(

Ich setzte die Position meines Auto mit node->setPosition(...);
Lasse ich jetzt die Position auslesen und nehme den Vektor als Startvektor und als Endvektor
nehme ich denselben nur mit Vektor.Y + 300 (so erhalte ich ja eine Linie die nach oben zeigt).

Wenn ich aber nun meinen Wagen bewege so "rennt" mir die Linie davon.
Diese wird dann deutlich weiter hinten angezeigt. Oder wenn ich den Wagen nach links oder rechts bewege
so ist die Linie deutlich weiter links vom Fahrzeug?

Weiß Jemand von Euch ob das nen Bug ist oder mach ich nen Fehler?

Ich schick mal meinen COde, der ist aber sehr durcheinander, weil das erstmal nur Tests sind :D

Code:
node->setPosition(vector3df(0,200,0));
   node->setRotation(vector3df(0,270,0));
   
   u32 then = device->getTimer()->getTime();
    const f32 MOVEMENT_SPEED = 500.f;

   while(device->run())
   {
      
      line3d<f32> line[10];
        const u32 now = device->getTimer()->getTime();
        const f32 frameDeltaTime = (f32)(now - then) / 1000.f;
        then = now;
      vector3df nodepos = node->getPosition();

      nodepos.Y = 200;

      if(rec.IsKeyDown(KEY_UP)){
         
         nodepos.Z += MOVEMENT_SPEED * frameDeltaTime;
      }

      if(rec.IsKeyDown(KEY_DOWN)){
         
         nodepos.Z -= MOVEMENT_SPEED * frameDeltaTime;
      }

      if(rec.IsKeyDown(KEY_LEFT)){
         nodepos.X -= MOVEMENT_SPEED * frameDeltaTime;
      }

      if(rec.IsKeyDown(KEY_RIGHT)){
         nodepos.X += MOVEMENT_SPEED * frameDeltaTime;
      }
      
      node->setPosition(nodepos);
      camera->setPosition(vector3df(node->getPosition().X,node->getPosition().Y + 150,node->getPosition().Z-450));
      camera->setTarget(vector3df(node->getPosition().X,node->getPosition().Y + 75,node->getPosition().Z));
      line[0].start = nodepos;
      line[0].end = vector3df(nodepos.X+1000,nodepos.Y,nodepos.Z);

      if(vel != 0){
         if(vel > 0){
            vel -= 0.01;
         }else{
            vel += 0.01;
         }      
      }

      
      driver->beginScene(true, true, SColor(1,170,170,170));

      driver->draw3DLine(line[0].start,line[0].end);

      smgr->drawAll();
      guienv->drawAll();

      driver->endScene();
      int fps = driver->getFPS();
      
      nodepos = node->getAbsolutePosition();

      if (lastFPS != fps)
      {
         core::stringw str = L"Irrlicht Engine - Render to Texture and Specular Highlights example";
         str += " X: ";
         str += nodepos.X;
         str += " Y: ";
         str += nodepos.Y;
         str += " Z: ";
         str += nodepos.Z;
         str += " X: ";
         str += line[0].start.X;
         str += " Y: ";
         str += line[0].start.Y;
         str += " Z: ";
         str += line[0].start.Z;


         device->setWindowCaption(str.c_str());
         lastFPS = fps;
      }   

   }

   device->drop();

   return 0;
}


Nach oben
 Profil  
 
BeitragVerfasst: 12.05.2011, 09:42 
Offline

Registriert: 11.05.2011, 14:49
Beiträge: 6
Thema hat sich erledigt.

Ich arbeite jetzt einfach mit dem MetaTriangleSelector.
Das funktioniert wunderbar und er erkennt alle Hindernisse.

Nochmals vielen Dank für Eure Hilfe


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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