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

Aktuelle Zeit: Mo Jul 14, 2025 11:29

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Höhenberechnung
BeitragVerfasst: Sa Okt 06, 2007 08:32 
Offline
DGL Member

Registriert: Sa Okt 06, 2007 07:41
Beiträge: 2
Ich arbeite schon seit einer Weile an einem Spieleprojekt, in dem man sich die normale Kameraansicht der Welt wie in GTA vorstellen kann: also aus der Vogelperspektive, wobei die Welt sich horizontal in der x-y-Koordinatenebene ausbreitet.

Mein Ziel ist es nun, dass sich Objekte, welche sich über die Oberfläche der Welt bewegen, bei sich verändernden z-Koordinaten des Untergrunds in der Höhe entsprechend anpassen (vergleichbar mit einem Fussgänger, welcher von einer Straße auf einen Bordstein steigt, und damit etwas höher steht als vorher).

Mein Frage ist nun, ob es einen eleganten Weg gibt bzw. jemand schon Erfahrung damit hat, diese Höhenkoordinaten pixelgenau zu berechnen/auszulesen.

Wie z.B., das man von einem bestimmten Koordinatenpunkt aus startet und sich solange in negativer Z-Richtung bewegt, bis man auf die Fläche eines Quads oder eines anderen 3D-Objektes stößt und somit weiß, welche Koordinaten sozusagen "den Boden" des Levels darstellen.

Ich hoffe, ich habe das Problem halbwegs verständlich beschrieben und bedanke mich im Vorraus für jegliche Antworten, die mich hoffentlich weiterbringen. :)

Mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 06, 2007 09:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Wenn ich dich recht verstanden habe meinst du "Selektion".
Um an einer gegebenen Position die Tiefe bzw das getroffene Objekt zu ermitteln. Ist allerdings langsamer da man vor dem Rendern jedes Objekts einen Namen festlegen muss. Muss gestehen, dass ichs nochnie benutzt habe und verweise auf: click

Alternativ zur Selektion kann ich den Beitrag von Phobeus empfehlen: click
Dadurch inspiriert hab ich meine Landschaft komplett einbefärbt, sprich auf der x-achse rot, y-achse grün und z-achse blau. damit bekommt "recht genaue" angaben über die Weltkoordinaten, auf die man gerade mit der maus zeigt. Das wäre also ähnlich wie beim Depthbuffer. Nur dass du evtl noch weitere nützliche Werte beim Rendern mit raushauen kannst. Aber da du ja Vogelperspektive hast interessiert dich eh nur die z-achse.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 06, 2007 10:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Zerberus,

wenn du nicht allzuhohe Anforderungen an deine Oberfläche stellst, könntest du sie auch auf Grundlage einer Heightmap rendern.

Dann kannst du die Höhen für deine Objekte ohne viel Aufwand in deinem Programm bestimmen. ;)

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 07, 2007 08:27 
Offline
DGL Member

Registriert: Sa Okt 06, 2007 07:41
Beiträge: 2
Erstmal danke für die schnellen Antworten!

@dj3hut1: Da die Karte nicht wie in einer Outdoor-engine aus Dreiecken aufgebaut ist, die auf Basis einer Heightmap generiert werden, kann ich diese Methode wohl leider nicht anwenden. Trotzdem danke für die Idee :wink:

@damadmax: An die Selektionsmethode hatte ich garnicht gedacht, und habe sie direkt mal versucht zu implementieren. Bin dabei wohl auf Performanceprobleme gestossen, da diese Selektion nicht nur für ein Objekt, sondern für eine ganzen Reihe durchgeführt werden muss.
Ansonsten hört sich der Artikel von Phobeus wirklich interessant an und ich werd die nächsten Tage mal versuchen, dass zu realisieren.
Vielen Dank für den Hinweis.

Mfg,
Zerberus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 07, 2007 15:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Zerberus,

sorry, ich hätte deinen Beitrag am Anfang nochmal genauer durchlesen sollen.
Wenn du ausschliesslich senkrecht von oben auf deine Welt schaust, wäre es am einfachsten den Tiefenpuffer an der passenden Stelle auszulesen (mit glReadpixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, pixel) )

glReadpixels ist eigentlich eine ziemlich langsame Funktion, aber wenn man damit nur wenige Pixel ausliest (wie in diesem Fall), kann die Methode unbesorgt angewendet werden.

Viele Grüße
djehut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 09, 2007 19:57 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Wenn die Höhe nicht nur rein grafisch sein soll, sind alle Mittel die auf opengl zurückgreifen imo eklig, da grafik und physik getrennt sein sollten. Du musst einfach einen Ray-Mesh-Intersect Algo coden. Aus Performancegründen könnten BSP-Trees nötig sein. Für genauere Hilfe müssten wir erstmal wissen wie du dein Level im Speicher repräsentierst.

_________________
Bild


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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 | 15 Queries | GZIP : On ]