![]() |
Spectrum geht durch wand (OpenGl)
Liste der Anhänge anzeigen (Anzahl: 1)
seltsames verhalten mit dem spectrum
sobald ich die frames auf maximal 288 stelle geht die visualisierung im oberen cover bereich hindurch. Das passiert bei 144, 96, 72 Frames nicht. Wie kann man das beseitigen ? Kann den Fehler nicht reproduzieren da die zeichen funktion bei allen die selbe ist. Damit man sehen kann was ich meine ein Bild im Anhang gruss Emil |
Re: Spectrum geht durch wand (OpenGl)
Liste der Anhänge anzeigen (Anzahl: 1)
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:
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.
a*x + b*y + c*z + d
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 ![]() Grüße Dave |
Re: Spectrum geht durch wand (OpenGl)
Danke für die gute erklärung.
Habe begriffen was du meinst Daraus ergibt sich aber ein anderes Problem. Zitat:
Im unteren bereich zeichnen diese ja auch über und nicht durch die Wand. Kann es sein das dieses Problem mit dem zeichnen der Cover zu tun hat? Wie gesagt wundert es mich das es nur bei 288 frames auftritt diese haben dann eine geringere Endhöhe als die mit weniger frames. gruss Emil |
Re: Spectrum geht durch wand (OpenGl)
Das kann ich wirklich nur schwer sagen, woran das liegt. Also OpenGL hat kein Problem damit, ob du jetzt mit 2 FPS oder mit 10000 FPS zeichnest - das Ergebnis auf dem Bildschirm ist immer gleich. Daher solltest du mal eher bei dir schauen, ob du da nicht ausversehen irgendwo die glDepthMask oder den GL_DEPTH_TEST (de)aktiviert hast.
Zitat:
|
Re: Spectrum geht durch wand (OpenGl)
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:
Zitat:
häng mal noch drei pics an. Habe mich da etwas unverständlich ausgedrückt. Mit Frames meine ich die anzahl der Spectrumbars- gemessen an FFT nicht an der anzahle der gezeichnetet FPS Bei 144 und 96 geht nix durch die Wand aber eher hier würde ich das vermuten.. EDIT: Klasse vielen Dank ;) habe GL_DEPTH_TEST deaktiviert jetzt gehts Mich wundert nur warum das nur auswirkung auf die 288 Spectrumbars hat und die anderen das ignoriert haben. gruss Emil |
Re: Spectrum geht durch wand (OpenGl)
Zitat:
Aber ich hab gerade eine Idee :idea:: Wie bekommst du die FFT-Daten von BASS? Per Windows-Message oder per CallBack-Procedure? Kann es sein, dass ab 288 die FFT-Daten schneller kommen als du zeichnen kannst? Vielleicht beginnst du ja zufällig das Zeichnen während du schon zeichnest? Versuch das mal so zu lösen:
Delphi-Quellcode:
Ist jetzt nur eine Vermutung - aber vielleicht hilfts ja
var IsDrawing : boolean = False;
procedure DoDraw; begin // Falls du bereits zeichnest, abbrechen if IsDrawing then exit; // Aufruf von "DoDraw" verbieten IsDrawing := True; try Draw_All; // <-- hier kommt der Aufruf des KOMPLETTEN render-Codes hin (inc. SwapBuffers). finally // Aufruf von "DoDraw" wieder erlauben IsDrawing := False; end; end; |
Re: Spectrum geht durch wand (OpenGl)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
OT: Eigentlich ist das Projekt ja OpenSource habe es hier mal hochgeladen. Da aber kein Interesse bestand habe ich es nicht mehr aktualisiert. Außerdem ist es jetzt mit allen Daten gut 12 MB gross wäre wohl zuviel für die DP Also mit allen Bitmaps und Testanwendung. Mit den Tip von dir GL_DEPTH_TEST zu deaktivieren geht es ja nun. Vielen Dank nochmal.. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz