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

Aktuelle Zeit: Fr Jul 11, 2025 02:53

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Tiefentest haut nicht ganz hin
BeitragVerfasst: Do Jan 29, 2004 18:48 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Hallöchen, ich leg mal gleich los
-> Ich hab ein kleines Problem mit dem Tiefentest, und zwar, wenn man nah an Objekten steht, wo sich zwei Flächen schneiden oder aufeinander stehen, läufts perfekt, wenn ich mich jedoch weiter weg begebe, fäng das an den Stellen, wo sich die beiden flächen begegnen, aufeinmal an zu flackern, und die hintere Fläche ist nicht selten vorne, was ja nun nicht ganz so sein soll...
Beispiel in den Anhängen!

Ich kann mir schon denken, dass es irgendeine simple einstellungssache ist, wo kein Mensch, der die Parameter nicht kennt, drauf kommen kann, also hier meine Init-Prozedur:

Code:
  1. // OpenGL-Funtionen initialisieren
  2. InitOpenGL;
  3. // Gerätekontext holen
  4. DC := GetDC(Handle);
  5. // Renderkontext erstellen (32 Bit Farbtiefe, 24 Bit Tiefenpuffer, Doublebuffering)
  6. RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  7. // Erstellten Renderkontext aktivieren
  8. ActivateRenderingContext(DC, RC);
  9.  
  10.   glEnable(GL_TEXTURE_2D);         // Aktiviert Texture Mapping
  11.   glShadeModel(GL_SMOOTH);         // Aktiviert weiches Shading
  12.   glClearColor(0.0, 0.0, 0.0, 0.5);    // Bildschirm löschen (schwarz)
  13.   glClearDepth(1.0);               // Depth Buffer Setup
  14.   glEnable(GL_DEPTH_TEST);         // Aktiviert Depth Testing
  15.   glDepthFunc(GL_LEQUAL);          // Bestimmt den Typ des Depth Testing
  16.   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Qualitativ bessere Koordinaten Interpolation
  17.  
  18.   glEnable(GL_LIGHT0);
  19.   glEnable(GL_LIGHTING);
  20.   glEnable(GL_NORMALIZE);
  21.  
  22.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  23.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  24.  


So. Bitte sehr.


Danke für Antworten!


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 29, 2004 18:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie definierst du denn deine Near- und Far-Clipping-Planes? Dein Problem sieht nämlich definitiv so aus als wäre dein Tiefenpuffer zu niedrig aufgelöst, was sich recht einfach dadurch lösen lässt dass du die Near-Clipping-Plane so weit wie möglich rausschiebst. Dazu wenn nötig einfach die Modelle größer Skalieren, aber ne Near-Clipping-Plane < 1 ist "Gift" für die Z-Buffer-Auflösung.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 29, 2004 19:03 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Au. Sehr gut. Das hat geholfen.

Wusste nicht, dass es da so eine psychologische Grenze gibt!

Danke sehr! :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 29, 2004 19:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Liebe deinen Z-Puffer ;)

Bei 24-Bit Z-Puffer hast du z.B. folgende Konstellationen :
  • Fall A :
    Z-Near = 0.1
    Z-Far = 512
    -> Z-Auflösung bei Tiefe 512 = 0.03906
  • Fall B :
    Z-Near = 1
    Z-Far = 512
    -> Z-Auflösung bei Tiefe 256 = 0.00389


Wie du siehst hast du in Fall B ne weitaus höhere Z-Auflösung als bei Fall A. Also die Near-Clipping-Plane immer so weit wie möglich herausschieben.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 30, 2004 10:11 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Da hab' ich bis jetzt aber immer ein problem bekommen. Denn wenn ich das Near-Klipping-Plane z.b. auf 1 gesetzt und einen Raum betrachtet hab, dann hat die Wand des Raumes nie bis an den Rand des Monitors gereicht. Die Wände des Raumes sind immer zu früh abgeschnitten worden. Ich will das mal anhand der Screenshots von Jahn Horns "BasicEngine" zeigen. Ich hab' lediglich das Near-Clipping Plane von 0.1 auf 1 erhöht! Das kam dabei 'raus. Wie kann man das Problem umgehen?

Im Quake-Source ist zu sehen, das Carmack einen Near-Clipping Wert von 4 verwendet hat. Aber warum hat er das Wand-Problem wie in den Screen-Shots dann nicht?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 30, 2004 10:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Ach ja, noch was: wenn ich vor dem Zeichnen ein glScale(3, 3, 3) mache, dann ist das Problem nicht mehr so stark vorhanden, aber immer noch beim näher an die Wände gehen. Außerdem hab' ich mal gehört, das von einem Scale mit den Werten 3, 3, 3 eher abzuraten wäre.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 30, 2004 10:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ne, das mit dem Skalieren ist eigentlich die beste Möglichkeit. Habs früher auch z.B. mit 3DS-Modellen so gemacht das ich die ganz klein skaliert hab, damits bei 0.1 keine Clipping-Probleme gibt.
Das mach ich inzwischen nicht mehr so, weshalb ich z.B. in meiner neogyptischen Szene zwar riesige Modelle hab, die aber trotz Near-Clipping von 1.0 nicht abgeschnitten werden.
Denn laut dem Rechner auf der mir verlinkten Seiten ist ne Z-Range von 1.0-2048 immernoch genauer als 0.1-512. Von daher also Z-Near soweit rausschieben wie machbar, Modelle notfalls dann auch größer skalieren.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 30, 2004 11:19 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Von einem Scale abraten? Warum?
Wenn man MD2 oder MD3 Modelle lädt, dann sind die riesig. Was du eher nicht machen solltest, ist in der ModelView Matrix Skalierungen ungleich (1,1,1) zu verwenden, weils dann z.B. mit der OpenGL Beleuchtung Probleme gibt (mal ganz abgesehen davon, dass es dann schwieriger wird, Kindobjekte relativ zum Elternobjekt zu positionieren, weil auch noch die Skalierung der aktuellen ModelViewmatrix berücksichtigt werden muss) - mit was du aber die Koordinaten deiner Modelle vormultiplizierst, ist doch nun wirklich egal.
Am Einfachsten tut man sich, wenn man z.B. eine Konstante Meter definiert, und die ist dann halt irgendeine Zahl (0.1, 1, 100, 75.312, 123456) - völlig wurscht, und die Koordinaten in der Welt sind dann immer in "Metern" angegeben, dann kann man auch rumskalieren wie man will, man muss ja nur den "Einheitsmeter" anpassen, um die selben Koordinaten wie vorher zurückzubekommen.

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


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


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]