Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 12:07

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 3DS - BoundingBox Problem
BeitragVerfasst: So Sep 10, 2006 12:37 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Bin gerade dabei ein kleines Rennspiel zu schreiben. Level einladen, uns fahren klappt alles einwandfrei, doch leider kann man durch die Gebäude durchfahren. Hm, da hab ich mir gedacht schreibst du dir halt ne Kollisionskontrolle.
Nachdem mein Spiel zwar 3D ist, aber die Y-Koordinate immer gleich ist (will heißen, das Spiel findet auf einer Ebene statt) will ich alles auf 2D "runterkürzen".
Nachdem ich nur 3DS-Objekte hab, dachte ich mir dass man das über die BoundingBoxes lösen könnte. Als erstes brauch ich dazu die Koordinaten der 4 Punkte die auf der Ebene liegen (die untersten halt). Dazu hab ich mir die RenderBoundBox-Procedure aus der Unit gl3ds angeschaut.

Daraus kann ich das hier ableiten (glaub ich zumindest)
Result ist ein Eigener Typ
Code:
  1. //1.Punkt
  2.  result.X1 := Minimum.x;
  3.  result.Z1 := Minimum.z;
  4. //2.Punkt
  5.  result.X2 := Maximum.x;
  6.  result.Z2 := Minimum.z;
  7. //3.Punkt
  8.  result.X3 := Maximum.x;
  9.  result.Z3 := Maximum.z;
  10. //4.Punkt
  11.  result.X4 := Minimum.x;
  12.  result.Z4 := Maximum.z;


Aber irgendwie geht das nicht, weil wenn ich jetzt z.B. über

Code:
  1. glBegin(GL_LINE_LOOP);
  2.     glVertex3f(x1, 2, z1+1);
  3.     glVertex3f(x2, 2, z2+1);
  4.     glVertex3f(x3, 2, z3+1);
  5.     glVertex3f(x4, 2, z4+1);
  6. glEnd;


probeweiße mein Viereck zeichen möchte tut sich nichts...

Deshalb meine Frage: Wie komm ich an diese verflixten Koordinaten? :?:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 12, 2006 00:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Für eine Bounding Box sind eigentlich nur 2 Koordinaten nötig.

Code:
  1.  
  2. minvec:=vec[0];
  3. maxvec:=vec[0];
  4. for i:=0 to high(vec) do
  5. begin
  6.   minvec.x:=min(vec[i].x,minvec.x);
  7.   minvec.y:=min(vec[i].y,minvec.y);
  8.   minvec.z:=min(vec[i].z,minvec.z);
  9.   maxvec.x:=max(vec[i].x,maxvec.x);
  10.   maxvec.y:=max(vec[i].y,maxvec.y);
  11.   maxvec.z:=max(vec[i].z,maxvec.z);
  12. end;
  13. glBegin(GL_LINE_LOOP);
  14.     glVertex3f(minvec.x, 2, minvec.z);
  15.     glVertex3f(minvec.x, 2, maxvec.z);
  16.     glVertex3f(maxvec.x, 2, maxvec.z);
  17.     glVertex3f(maxvec.x, 2, minvec.z);
  18. glEnd;
  19.  

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 12, 2006 09:13 
Offline
DGL Member

Registriert: Mo Dez 26, 2005 22:27
Beiträge: 117
Programmiersprache: Pascal, C++
Ich weiß das man dafür nur 2 Koordinaten braucht, aber ich habs mir der Übersicht halber jeden Punkt einzeln gespeichert.

Ähm, blöde Frage, aber wer oder was ist Vec? Ein Array aus TVector? :? und woher bekomm ich des?

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 12, 2006 12:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Deine 3Ds File enthält Vertexkoordinaten und vec ist ein array von Vertexkoordinaten vom Objekt, wo die Bounding Box gesucht wird.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


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
[ Time : 0.008s | 16 Queries | GZIP : On ]