Einzelnen Beitrag anzeigen

Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#2

Re: Spectrum geht durch wand (OpenGl)

  Alt 6. Jul 2008, 16:54
Warum dass genau bei dir bei an einer bestimmten FPS-Zahl liegt, weiß ich nicht - wahrscheinlich werden die einzelnen FFT-Peaks zu lang und gehen dann zu weit nach hinten (im Tiefenpuffer). Dann gehen sie durch die QUADS des Bildes durch und kommen dahinter dann wieder zum vorschein.

Um zu verhindern, dass die FFT-Balken hinter den Quads weitergezeichnet werden ist es sinnvoll, ClipPlanes zu verwenden. Eine ClipPlane ist eine einfache mathematische Gleichung. Wenn man in diese Gleichung einen Vektor-Wert einsetzt (z.B. x, y, und z-Koordinate), gibt einem die Gleichung den Abstand des Punktes zur Ebene heraus. Wenn das Ergebniss positiv ist, liegt der Punkt vor der Ebene und ist er negativ liegt er hinter der Ebene. Ist das Ergebniss 0, liegt der Punkt in der Ebene Die Funktion der Ebene lautet:
Code:
a*x + b*y + c*z + d
Die Parameter a, b und c sind dabei die einzelnen Elemente des Normalenvektors der Ebene. D ist die Verschiebung der Ebene relativ zum Ursprung. Der Normalenvektor gibt dabei die Richtung der Verschiebung an.

Jetzt zur Problemlösung:
Du kannst in OGL eine einfache ClipPlane definieren. Solange diese aktiv ist, werden alle Pixel, die sich hinter der ClipPlane befinden, nicht gezeichnet.

Zur besseren Verständniss hab ich mal eben ein kleines Bild mit Paint gemacht (siehe Anhang). Die dunkelgraue Fläche ist dabei das Bild, der grüne Balken ist ein Balken, der vor dem Bild ist. Der blaue Abschnitt hinter dem Bild, wird aber vom Bild verdeckt. Der rote Abschnitt ist auch hinter dem Bild, wird aber von diesem nicht verdeckt und ist somit sichtbar für den Betrachter.

Die hellgraue Fläche ist jetzt ein Ausschnitt aus der Ebene, die du definieren solltest. Sobald diese beim Zeichnen der einzelnen Balken aktiv ist, wird der blaue und rote Abschnitt einfach beim Zeichnen weggelassen.

Um diese ClipPlanes zu definieren, musst du glClipPlane verwenden.

Grüße
Dave
Miniaturansicht angehängter Grafiken
bild1_151.gif  
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat