OpenGL - "Sichtweite"
lima-city → Forum → Programmiersprachen → C/C++ und D
aussehen
berechnung
besonderes augenmerk
code
differenz
distanz
entfernung
erkennen
ersten objekte
gleichen problem
grad
http
liefern
matrizen
objekt
problem
richten
unterschied
url
weit entfernte objekte
-
Ich bin nun auf OpenGL umgestiegen (da mir die Übergabe der Ecken in DirectX zu undurchsichtig wurde) und bin schon erfreut, da den Code verstanden und bereits meine ersten Objekte eingefügt habe. Allerdings habe ich gleich ein Problem: Anscheinend vernachlässigt OpenGL weit entfernte Objekte. Das an sich ist zwar noch vorteilhaft, allerdings ist "weit" relativ.
Gibt es eine Funktion, mit der man diese "Sichweite" verändern kann? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wenn du praktisch den unterschied zwischen hier und hier meinst, stand ich (wie du siehst) vor dem gleichen Problem.
Ich nehme an, du hast dich da mit einem Tutorial rein gearbeitet? Ich hab das Problem auf jeden Fall gelöst, indem ich
angewendet habe, wobei das nun kein c++-Syntax ist. In C++ müsste das ganze dann denke ich in etwa so aussehen:gluPerspective 45#, Width / Height, 0.1, 10000#
wobei besonderes Augenmerk auf den Wert 10000.0f zu richten ist. Dies richtet, wenn ich mich nicht irre die "Tiefe" ein, in die man sehen kann.gluPerspective(45.0f, 1.0f * w / h, .1f, 10000.0f);
Wobei ich meinen Code nicht hier habe, und das grad nicht so ganz nachvollziehen kann. Wenn es nicht funktioniert - vielleicht einfach mal deinen Code posten ;) -
Also wie nerdinator schon geschrieben hat wäre das eine lösung für Frustum-Culling.
Die Problematik dabei ist folgende:
GL wie auch DirectX basieren auf Matrizen zur berechnung von Objekt und Kameratransformationen,
wie auch der Definition des Sichtvolumens.
Durch die begrenzte Bittiefe von Fließkommazahlen (meistens Float, also 32bit) kann GL also nur auch
nur eine begrenzte Auflösung liefern.
Mit den werten 0.1 und 10000.0 liefert nerdinator der GL die Werte für die nahe und die ferne Clipping-Ebene.
Alle Objekte zwischen diesen Ebenen werden angezeigt alle anderen werden abgeschnitten.
Dies wär nicht weiter schlimm, wenn dieses Clipping nicht darüber erreich würde, dass alle Objekte bei der
Sichtberechnung skaliert werden, sodass die ferne Clippingebene einem Z-Wert von 1 entspricht.
Durch die oben genannte begrenzte Auflösung von Fließkommazahlen führt dies dazu dass je größer die
Differenz der Entfernung von naher zu ferner Clipping-Ebene ist, desto ungenauer die Berechnung der darin
liegenden Objekte wird.
Würde man bei zwei objekten mit der entfernung 1 und 2 bei den Clippingplanes 0.1 5 noch den unterschied erkennen,
so wäre bei bei den Clippingplanes 0.1 und 100000000 ein Anzeigefehler (Z-Fighting) vorprogrammiert!
Daraus schlussfolgert man: Die Distanz zwischen naher und ferner Clipping-Ebene ist so klein wie möglich zu wählen! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage