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

Aktuelle Zeit: Di Jul 08, 2025 21:18

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Dez 27, 2002 14:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 04, 2002 21:26
Beiträge: 63
Ich verwende in meinem Programm den Namens-Stack. Wie kann ich herausfinden, ob die "Kamera" mit diesem Objekt kollidiert? (die Koordinaten der Kamera habe ich als in Variablen)
Hier das konkrete Beispiel:

Code:
  1. var posx,posz:glfloat;//Koordinaten der Kamera(posy ist immer 0)
  2.  
  3. const Quadrat1 = 3;//Namensstack Nr.3
  4.  
  5.  
  6.  
  7. Procedure Quadrat;
  8.  
  9. begin
  10.  
  11.  glbegin(GL_POLYGON);
  12.  
  13.  glcolor3f(0.5,0.5,0.5);
  14.  
  15.  glvertex3f(0,0,0);
  16.  
  17.  glvertex3f(0,1,0);
  18.  
  19.  glvertex3f(1,1,0);
  20.  
  21.  glvertex3f(1,0,0);
  22.  
  23.  glend;
  24.  
  25. end;
  26.  
  27.  
  28.  
  29. {...}
  30.  
  31. //In der draw-Prozedur:
  32.  
  33.  
  34.  
  35. glloadname(Quadrat1);
  36.  
  37. Quadrat;


Jetzt möchte ich herausfinden, ob sich die Kamera innerhalb der Koordinaten des Objektes Quadrat1 befindet. Wie geht das?

Mari


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 27, 2002 16:40 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 02, 2002 18:06
Beiträge: 299
Wohnort: Dresden
Guck dir mal das Bounded-Boxes Sample an. Wie wäre es dann einfach die Kamera auch mit einer kleinen Box zu umgeben.

_________________
"Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 28, 2002 10:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 04, 2002 21:26
Beiträge: 63
Eigentlich ja keine schlechte Idee, aber geht es nicht auch anders? Das mit den Bounding Boxes
hat nämlich folgende Nachteile:

1.Ich muss für jedes Objekt eine Box definieren
2.Die Box kann nur rechteckig sein
3.Wie definiere ich die Box, wenn ich noch nicht weiß welche Form/Größe das Objekt hat (Wenn ich das Objekt aus einer externen Datei lade)?

Ich bräuchte eher etwas wie eine Funktion,die prüft ob sich ein von mir angegebener Punkt(die Kameraposition) mit den Polygonen eines Objektes überschneidet, so in etwa wie der Selection Mode, nur dass die Abfrage nicht mit dem Mauscursor sondern mit der Kamera gemacht wird.

Mari


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 29, 2002 15:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 02, 2002 18:06
Beiträge: 299
Wohnort: Dresden
zu 1. Nicht für jedes Objekt (z.B. Ein einfacher Raum: Nicht für jede Wand, sondern für den ganzen Raum eine)
zu 2. stimmt, aber bei z.B. einer Spielerfigur fällt es nicht auf, ob das Teil Rechteckig ist oder nicht
zu 3. einfach für jede Achse den kleinsten und den größten Wert raussuchen (am Anfang einmal ne for-Schleife (jeden Vertex durchgehen)

_________________
"Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 29, 2002 15:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Ich bräuchte eher etwas wie eine Funktion,die prüft ob sich ein von mir angegebener Punkt(die Kameraposition) mit den Polygonen eines Objektes überschneidet, so in etwa wie der Selection Mode, nur dass die Abfrage nicht mit dem Mauscursor sondern mit der Kamera gemacht wird.
Mari


Das was du suchst nennt sich Line-Polygon-Collision.Dabei wird mit Hilfe der Flächenrepräsentation eines Dreiecks getestet, ob eine Linie (eine Spielfigur lässt sich z.B. leicht durch drei Linien auf den drei Achsen repräsentieren) mit einem Dreieck kollidiert.

Das ist nicht unbedingt einfach und recht matheintensiv, aber die beste Methode der Kollisionsabfrage.
Ein Beispielprogramm zu diesem Thema gibts hier :
<a href='http://www.sulaco.co.za/opengl.htm#collide' target='_blank'>http://www.sulaco.co.za/opengl.htm#collide</a>

Der Selection-Mode hat damit aber rein garnix zu tun, weshalb er in deinem Falle auch komplett unbrauchbar wäre...
...und die Sache mit den BoundingBoxen ist zwar nicht schlecht, für genaue Kollisionen jedoch eher unbrauchbar.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 29, 2002 19:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 04, 2002 21:26
Beiträge: 63
Zitat:
Der Selection-Mode hat damit aber rein garnix zu tun, weshalb er in deinem Falle auch komplett unbrauchbar wäre...

Ich meinte, ob es etwas ähnliches gibt: Beim Selection-Mode klicke ich in die Szene und dann wird herausgefunden, ob sich an dieser Stelle ein Objekt befindet und wenn ja, welches. Es gibt doch bestimmt etwas ähnliches, bei dem nicht die Koordinaten der Maus sondern meine eigenen Koordinaten abgefragt werden (hoffe ich zumindest)?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 29, 2002 19:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Es gibt doch bestimmt etwas ähnliches, bei dem nicht die Koordinaten der Maus sondern meine eigenen Koordinaten abgefragt werden (hoffe ich zumindest)?


Nein.Da OpenGL keine Spiele-API ist, gibt es dort auch so etwas wie eine Kollisionsabfrage nicht.

Du wirst dich dann wohl mit der von mir in meinem letzten Posting erwähnten Methode herumschlagen müssen!

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 29, 2002 19:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
der Selection-Mode geht ganz anders an die Sache ran! Da weißt du bestimmten Objekten einen Namen zu, definierst ein Viewing Volume und im Selection-Mode gibt dir Ogl eine Liste aller namen zurück, die in diesem Bereich (z.b. eine Box um die Cursor-Pos) gezeichnet werden würden.

Leider hilft das nicht für Collission-Detection. Da ist die einfachste und meißtens ausreichende Methode die mit den Bounding-Boxen

-lith

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 31, 2002 15:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Sep 04, 2002 21:26
Beiträge: 63
OK,überredet. :wink:
Aber noch eine Frage zu Bounding Boxes:
Wenn ich einen Würfel zeichne und dann eine Bounding Box drumrum mache und vor das ganze glrotatef setze, dreht sich dann die Bounding Box mit oder muss ich dazu erst neue Werte für sie berechnen?


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


Wer ist online?

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