ich wollte gerade meinen Code etwas optimieren, in dem ich nicht benötigte Vierecke gar nicht erst berechnen (Position berechnen und dann an die GPU übergeben). Das wolte ich per gluUnProject machen. Aber irgendwie liefert er mir unpassende Ergebnis. Sprich die alle zurückgegeben Koordinaten sind unter 1 - außer wenn ich das Fenster extrem breit mache und flach. Dann komme ich für X auf knappe 2.
Nach der Transformation liegen die Z-Koordinaten zwischen -1 und 1. Dabei ist -1 das Near-Plane und 1 das Far-Plane. Insofern versuchs mal mit (0,0,-1).
Zitat:
ich wollte gerade meinen Code etwas optimieren, in dem ich nicht benötigte Vierecke gar nicht erst berechnen
Ich weiß natürlich nicht genau was du da machst, aber du willst jedes Viereck einzeln testen? In einem solchen Fall ist es üblicherweise schneller einfach zu rendern, den die Grafikkarte macht einen solchen Test sowieso, aber natürlich viel schneller als das auf der CPU möglich ist. Wenn du viele Objekte zeichnest und nur einige davon sichtbar sind, versuche eine Baumstruktur aufzubauen. So kannst du mit wenigen groben Tests auf der CPU viele Objekte vom rendern ausschließen. Im Wiki findet sich dazu sicherlich etwas. Stichworte: QuadTree, OctTree, BSP.
Nach der Transformation liegen die Z-Koordinaten zwischen -1 und 1. Dabei ist -1 das Near-Plane und 1 das Far-Plane. Insofern versuchs mal mit (0,0,-1).
Ah ok. Ich dachte das übersetzt er schon automatisch. Lag auch daran .
Coolcat hat geschrieben:
Ich weiß natürlich nicht genau was du da machst, aber du willst jedes Viereck einzeln testen? In einem solchen Fall ist es üblicherweise schneller einfach zu rendern, den die Grafikkarte macht einen solchen Test sowieso, aber natürlich viel schneller als das auf der CPU möglich ist. Wenn du viele Objekte zeichnest und nur einige davon sichtbar sind, versuche eine Baumstruktur aufzubauen. So kannst du mit wenigen groben Tests auf der CPU viele Objekte vom rendern ausschließen. Im Wiki findet sich dazu sicherlich etwas. Stichworte: QuadTree, OctTree, BSP.
Der Algorithmus kennt nur die Anzahl der Objekte die er rendern soll. Die Position eines jeden Objektes berechnet er dann in einer Schleife. Da die Objekte unabhängig voneinander sind, brauche ich die nicht sichtbaren ja nicht berechnen.
PS: Der Algo zur Berechnung sieht so aus (wie du siehst, muss ich nur die Schleife einschränken ):
Code:
procedure TSunFlow.DrawGL; var i: integer; ox, nx, x, rot, z: TGLfloat; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
if FProgress <> 0.0 then FProgress := Power(0.995, FCurrentTimeStamp - FStartTimeStamp);
for i := 0 to FItemCount-1 do begin ox := i* 0.5 - FOffset; nx := (i - FCurrentItem) * 0.5; x := FProgress*(ox-nx) + nx;
z := 0.0; if x <= -0.5 then begin x := x - 1.5; rot := FDefaultAngle; end else if x >= 0.5 then begin x := x + 1.5; rot := -FDefaultAngle; end else begin rot := -FDefaultAngle * 2*x;
Mitglieder in diesem Forum: Google [Bot] und 13 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.