OpenGL Problem mit 'glBindTexture'
-
Hm, Objektposition minus Kameraposition. Alle Komponenten des resultierenden Vektors addieren (abs()!), dann hast du ne Entfernung. Wenn du alle Objekte nach Tiefe sortierst hast du den Vorteil, das du auf den Depth Test verzichten kannst. Du renderst dann einfach alles von hinten nach vorne und kannst nochmal Geschwindigkeit rausholen (Das erschlägt auch das Problem mit den Blending-Effekten). Ob das korrekt funktioniert hängt allerdings von der Form der Geometrie ab die du da renderst. Wenn zwei Objekte so nah beisammen sind das sie sich irgendwie überlappen, gibts wieder Probleme.
-
Alle Komponenten des resultierenden Vektors addieren (abs()!), dann hast du ne Entfernung
das ist in diesem zusammenhang falsch!
Du renderst dann einfach alles von hinten nach vorne und kannst nochmal Geschwindigkeit rausholen
eigentlich rendert man von vorne nach hinten um durch den zbuffer overdraw zu verhindern.
Wenn du alle Objekte nach Tiefe sortierst hast du den Vorteil, das du auf den Depth Test verzichten kannst.
nur wenn alle objekte konvex und gleich gross waeren.
sind sie aber meistens nicht.
-
Ich will außerdem nur wissen wie weit ein Objetk von der Z-Achse aus von der Kamera entfernt ist, jedoch unabhängig von der X und Y Koordinate.
Z | | Objekt | * | | \ ^ / | | \ | / <- Sichtfeld | | \ | / | | * | Kamera Y--------------------X
-
Ich will außerdem nur wissen wie weit ein Objetk von der Z-Achse aus von der Kamera entfernt ist, jedoch unabhängig von der X und Y Koordinate.
Z | | Objekt | * | | \ ^ / | | \ | / <- Sichtfeld | | \ | / | | * | Kamera Y--------------------X
-
Einfach die Länge des Vektors berechnen:
http://de.wikipedia.org/wiki/Vektor#Betrag_eines_Vektors
rya.
-
hellihjb schrieb:
Alle Komponenten des resultierenden Vektors addieren (abs()!), dann hast du ne Entfernung
das ist in diesem zusammenhang falsch!
Erklärung?
Du renderst dann einfach alles von hinten nach vorne und kannst nochmal Geschwindigkeit rausholen
eigentlich rendert man von vorne nach hinten um durch den zbuffer overdraw zu verhindern.
Ähm ja, je nachdem wo bei dir "vorne" ist und ob deine Motivation darin liegt, den Depth Test zu umgehen oder nicht

-
Alle Komponenten des resultierenden Vektors addieren (abs()!), dann hast du ne Entfernung
das ist in diesem zusammenhang falsch!
Erklärung?
du schlaegst vermutlich deshalb die sog. manhattan metrik vor um quadrat und wurzel des euklidischen abstands zu sparen.
man braucht aber den abstand vom bildschirm (ebene) und nicht den abstand vom projektionszentrum (punkt).
beispiel:
zwei punkte im kamera-raum:
[-4,-4,-2] -> distanz= 10
[+1,+1,-5] -> distanz= 7
obwohl der zweite punkt weiter hinten ist, hat er nach deiner rechnung eine kleinere entfernung.
-
scheiss server

-
Stimmt, leuchtet ein. Danke.
-
@Scorcher24: wie man die länge eines Vektors berechnet weiß ich ja, aber ich hab ja versucht mit meinem, zugegeben etwaas abstraktem, Bild zu zeigen welche länge ich haben will.
Nicht die Entfernung von einem Objetk bis zur Kamera, sondern die Tiefe eines Objektes der aktuellen Sichtperspektieve. Wenn ich die Kamera drehe würden sich die Tiefen also laufend verändern.
-
transformiere den punkt zunaechst mit der modelviewmatrix, dann mit der projektionsmatrix und nimm dir die z-koordinate.
da du vermutlich den objektmittelpunkt (0,0,0) betrachtest bleibt auch nicht mehr viel von der berechnung uebrig.
die matrizen bekommst du mit:float matrix1[16], matrix2[16]; glGet(GL_MODELVIEW_MATRIX, matrix1); glGet(GL_PROJECTION_MATRIX, matrix2);alternative:
transformiere die projektionsebene der kamera mit der inversen modelviewmatrix in den (untransformierten) objektraum und entnimm den abstand ursprung/ebene der ebenengleichung.