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:
// OpenGL-Funtionen initialisieren
InitOpenGL;
// Gerätekontext holen
DC := GetDC(Handle);
// Renderkontext erstellen (32 Bit Farbtiefe, 24 Bit Tiefenpuffer, Doublebuffering)
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.
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?
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?
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.
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.
Mitglieder in diesem Forum: Google [Bot] und 5 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.