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

Aktuelle Zeit: Fr Jul 18, 2025 16:45

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Feb 10, 2004 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 24, 2003 21:28
Beiträge: 28
Wohnort: Kiel
Es geht um folgendes Codefragment innerhalb der Funktion "selection":

if Puffer[(i*4)+1] < Z_Wert then
begin
getroffen := Puffer[(i*4)+3];
Z_Wert := Puffer[(i*4)+1];
end;

Hier sortieren wir ja die angeklickten Objekte nach ihrer Tiefe entlang der Z-Achse. Da aber in OpenGL (im Gegensatz zu DirectX) die Z-Werte "nach hinten hin" negativ werden, also das am weitesten entfernte Objekt den kleinsten Z-Wert hat, wuerden wir mit obiger Funktion ja das Objekt selektieren, dass am weitesten entfernte Objekt selektieren. Das ist doch so bestimmt nicht beabsichtigt, oder? In einem Ego-Shooter zum Beispiel koennte es so passieren dass man ploetzlich einen Lichtschalter aktiviert der hinter 8 Waenden liegt, nur weil er aus der momentanen Perspektive sich mit dem Lichschalter direkt vor einem ueberdeckt.

Ich hab den Code in mein C++-Projekt uebernommen, das "<" allerdings durch ein ">" ersetzt, da ich sonst immer nur den Wert von "Hight(GLuint)" zurueckbekommen habe.

Besides, weiss wer wie das Pendant in C++ zu dem "High"-Befehl lautet? Ich hab jetzt manuell den hoechstmoeglichen Integerwert eingetrage, find ich aber nich allzu schoen.

Oder bin ich da irgendwie missgeleitet?

mfG, McFly


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 10, 2004 15:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 24, 2003 21:28
Beiträge: 28
Wohnort: Kiel
uebrigens, wenn die Funktion -1 zurueckgeben soll, falls nichts getroffen wurde, muss dann nicht die Vorbelegung von "getroffen" -1 sein statt High(GLuint)? Dann gibt die Funktion bei keinem Treffer ja ein verdammt riesige Zahl aus.

Oder versteht ich dies Prozedur "Hight" falsch? Eigentlich ist das doch vom Namen her suggestiv dass die hoechstmoegliche Integerzahl gewaehlt wird.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Feb 10, 2004 15:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
McFly hat geschrieben:
Hier sortieren wir ja die angeklickten Objekte nach ihrer Tiefe entlang der Z-Achse. Da aber in OpenGL (im Gegensatz zu DirectX) die Z-Werte "nach hinten hin" negativ werden, also das am weitesten entfernte Objekt den kleinsten Z-Wert hat, wuerden wir mit obiger Funktion ja das Objekt selektieren, dass am weitesten entfernte Objekt selektieren. Das ist doch so bestimmt nicht beabsichtigt, oder? In einem Ego-Shooter zum Beispiel koennte es so passieren dass man ploetzlich einen Lichtschalter aktiviert der hinter 8 Waenden liegt, nur weil er aus der momentanen Perspektive sich mit dem Lichschalter direkt vor einem ueberdeckt.


Das ist falsch. Je weiter ein Fragment vom Betrachter entfernt, desto größer sein Z-Wert.
Siehe dazu auch folgende Stelle im Redbook :
Redbook hat geschrieben:
Depth Buffer
The depth buffer stores a depth value for each pixel. As described in "Hidden-Surface Removal Survival Kit" depth is usually measured in terms of distance to the eye, so pixels with larger depth-buffer values are overwritten by pixels with smaller values.


In Sachen "High"-Funktion liegst du richtig. Sie gibt dir den Höchstwert eins ordinären Datentyps zurück.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 10, 2004 15:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 24, 2003 21:28
Beiträge: 28
Wohnort: Kiel
was ist denn eigentlich der hoechstmoegliche Wert fuer GLuint? Ich hab da 2.147.483.647 (stand in einem Buch beim Wertebereich fuer Integer) - oder koennen GLuints groesser werden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 10, 2004 15:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Im Normalfall ist GLuint (steht für gl-unsigned-integer) als 32-Bit vorzeichenloser Integer (in Delphi = Cardinal) definiert. 2^32 = 4.294.967.295 . Deine Angabe bezieht sich auf einen vorzeichenbehafteten Integer und ist daher falsch.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 10, 2004 21:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zitat:
In Sachen "High"-Funktion liegst du richtig. Sie gibt dir den Höchstwert eins ordinären Datentyps zurück.


Auch wenn manche Datentypen prolligerweise dem gewöhnlichen Volke entsprungen sein mögen (=Plebs), handelt es sich in diesem Fall um ordinale Datentypen (=Ordnungszahlen), die dadurch ausgezeichnet werden, dass eindeutige Nachfolger definiert sind (z.B. -3,-2,-1,0,1,2,..., 'a','b','c', ...oder aber auch Aufzählungen wie Montag, Dienstag, Mittwoch u.s.w, nicht aber z.B. Fließkommazahlen, Felder oder Records, da es hier keine eindeutigen Nachfolger gibt). :wink:

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 11, 2004 14:49 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ach ja... fällt mir grad so ein für die cpp entwickler: bei unsigned ints lässt sich ein hight durch ein 0 - 1 "simulieren"... denn null weniger eins gibt bei vorzeichenlosen zahlen die höchstmögliche


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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
[ Time : 0.007s | 14 Queries | GZIP : On ]