AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Spectrum geht durch wand (OpenGl)
Thema durchsuchen
Ansicht
Themen-Optionen

Spectrum geht durch wand (OpenGl)

Ein Thema von EWeiss · begonnen am 6. Jul 2008 · letzter Beitrag vom 6. Jul 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Spectrum geht durch wand (OpenGl)

  Alt 6. Jul 2008, 17:02
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
Miniaturansicht angehängter Grafiken
prob_149.jpg  
  Mit Zitat antworten Zitat
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, 17: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
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Spectrum geht durch wand (OpenGl)

  Alt 6. Jul 2008, 18:07
Danke für die gute erklärung.
Habe begriffen was du meinst

Daraus ergibt sich aber ein anderes Problem.
Zitat:
werden alle Pixel, die sich hinter der ClipPlane befinden, nicht gezeichnet
Ich will nicht das mein Spectrum abgeschnitten wird.
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
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

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

Re: Spectrum geht durch wand (OpenGl)

  Alt 6. Jul 2008, 18:23
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 von EWeiss:
Im unteren bereich zeichnen diese ja auch über und nicht durch die Wand.
Meinst du mit unteren Bereich: bei niedrigeren FPS oder einfach der Bereich unter den Covern? Wenn du zweitest meinst, dann ist es so, dass der untere Bereich ja dann nicht abgeschnitten wird, da er ja (im Tiefenpuffer) vor dem Cover liegt. Somit würde dieser Bereich auch vor einer ClipPlane liegen und somit auch gezeichnet.
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
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Spectrum geht durch wand (OpenGl)

  Alt 6. Jul 2008, 18:32
Zitat:
Meinst du mit unteren Bereich: bei niedrigeren FPS oder einfach der Bereich unter den Covern? Wenn du zweitest meinst, dann ist es so, dass der untere Bereich ja dann nicht abgeschnitten wird, da er ja (im Tiefenpuffer) vor dem Cover liegt. Somit würde dieser Bereich auch vor einer ClipPlane liegen und somit auch gezeichnet.
Ich meine zweitens.

Zitat:
glDepthMask oder den GL_DEPTH_TEST (de)aktiviert hast.
das wäre eine möglichkeit muss mal nachschauen

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
Miniaturansicht angehängter Grafiken
288_171.jpg   144_640.jpg   96_648.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

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

Re: Spectrum geht durch wand (OpenGl)

  Alt 6. Jul 2008, 18:50
Zitat von EWeiss:
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..
Ach so, jetzt versteh ich was du meinst

Aber ich hab gerade eine Idee : 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:
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;
Ist jetzt nur eine Vermutung - aber vielleicht hilfts ja
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
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Spectrum geht durch wand (OpenGl)

  Alt 6. Jul 2008, 19:07
Zitat:
Aber ich hab gerade eine Idee : 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?
Jain von Winamp bzw.. BassVis( über Bass)

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
Miniaturansicht angehängter Grafiken
ok_673.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz