Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 08:57

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Transparenter Hintergrund
BeitragVerfasst: Mo Mär 30, 2009 22:26 
Offline
DGL Member

Registriert: Mo Mär 30, 2009 16:39
Beiträge: 7
Hallo,

wie kann ich dafür sorgen, dass der Hintergrund, auf dem also keine von mir erzeugten Objekte liegen komplett durchsichtig ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 30, 2009 22:33 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
du kannst in deiner Form einen alpha wert einschalten, wenn du anschließend deine ClearColor auf den selben wert setzt, hast du an der stelle wo du nichts gezeichnet hast UND wo diese Farbe auftritt einen komplett tranzparenten bereich, es lohnt sich dafür also eine sehr schrille Farbe zu wählen um nicht zufällig löcher in deinen Objekten zu haben.

Evtl. gibt es auch noch andere effektivere Wege, bei denen du dann auch mit alphablending arbeiten kannst, aber das ist das erste was mir dazu einfällt.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 31, 2009 13:40 
Offline
DGL Member

Registriert: Mo Mär 30, 2009 16:39
Beiträge: 7
Also ich hab jetzt dem Form als TransparentColorValue clBlack zugewiesen und TransparentColor auf true gesetzt. Als ClearColor habe ich folgendes gesetzt glClearColor(0, 0, 0, 0). Leider funktioniert das mit der Transparenz so leider nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 31, 2009 14:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hast du vor bei deinem Formular einen transparenten Bereich einzustellen. Sozusagen Löcher in deinem Formular?

Wenn ja. Dann sollte das in etwa auch so "funktionieren" wie Sellmann das gesagt hat und du es ausprobiert hast. Nur leider hast du dann überhaupt keine Hardwareunterstützung mehr. Und ohne Hardwarebeschleunigung ist es richtig langsam. Wenn das das ist was du vor hast, dann kann ich dir nur wärmstens empfehlen eine alternative Designmöglichkeit zu suchen. Also ohne Transparenz oder was auch immer. Das weiß aber niemand, weil du der Einzige bist der weiß was du vor hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 31, 2009 18:15 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Also - es gäbe Möglichkeiten *g* Die fallen aber unter die Kategorie "Ekelhaft!".

Du könntest: Deine Szene in eine Textur rendern... Die von der Grafikkarte herunterladen und dann ganz "konventionell" auf dein Form pinseln, bei dem du vorher die Transparent Color gesetzt hast. Das ist aber vermutlich etwas... langsam ;) Andererseits könnte man so mal PCI-Express ausnutzen... *grübel*

Andere Lösung: Du nimmst den Weg andersrum und renderst einfach den Hintergrund mit in einer Anwendung. Viele Linux Terminal-Emulatoren machen genau das. Wenn man bei denen angibt, ihr Hintergrund möge doch bitte kein einheitliches Schwarz sein, sondern transparent, so nehmen die frecherweise einfach das Stückchen vom Wallpaper, was sie selbst bedecken, und stellen das selbst dar. Das fällt dann natürlich auf, wenn man das Terminal verschiebt, weil der gefakete Hintergrund etwas hinterherhinkt...

Beide Lösungen sind aber weit aufwändiger, als einfach zwei Properties im Form zu setzen. Der Context von OpenGL und Transparenz verträgt sich leider nunmal nicht sonderlich. Ich würd also empfehlen, von der Idee mit dem transparenten Hintergrund abzusehen.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 01, 2009 07:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Frase hat geschrieben:
Du könntest: Deine Szene in eine Textur rendern... Die von der Grafikkarte herunterladen und dann ganz "konventionell" auf dein Form pinseln, bei dem du vorher die Transparent Color gesetzt hast. Das ist aber vermutlich etwas... langsam ;) Andererseits könnte man so mal PCI-Express ausnutzen... *grübel*

Die Idee klingt zwar ganz nett. Aber im Detail ist das doch nicht ganz so einfach. Denn. Das Übertragen der Textur in ein Bitmap kostet Zeit und ich denke der Großteil der Zeit geht einfach wegen der Tranzparenzberechnung drauf. Also das was Windows macht. Also durch den Offscreenbuffer mag man sich zwar eventuell die Hardwarebeschleunigung erhalten. Aber schnell ist es dann trotzdem nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 11, 2009 23:09 
Offline
DGL Member

Registriert: Mo Mär 30, 2009 16:39
Beiträge: 7
Hi, danke erstma für die Antworten und Sorry für die späte Rückmeldung.

Mein Ziel ist es, dass ich in Echtzeit einen Text über ein Video laufen lassen kann. Meint ihr, dass dies mit OpenGL effektiv möglich ist, zwecks der Transparenz und wenn ja wie genau, da ich noch nicht so lange mit OpenGL arbeite.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 12, 2009 10:03 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
okay, das ist dann aber ein bisschen was anderes als ein transparenter Hintergrund ;)

Entweder versuchst du dich an "Overlay", pinselst dein Zeug also über eine bestehende Anwendung drüber... oder du stellst das Video schlicht und ergreifend selbst dar *g*

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 12, 2009 10:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nun bei Overlay wird auf der Grafikkarte eine Farbe durch ein Bild/VideoStream ersetzt. Dieses Verfahren kam früher sehr häufig zum Einsatz. Und es dürfte schwer werden über ein Overlay noch sein eigenes Overlay drüber zu packen. Zu mal es eigentlich an der Thematik nicht viel ändern wird. Du musst so oder so dafür sorgen, dass an den Stellen wo du die Schrift benutzt möchtest, dann auch eine Farbe in den Grafikspeicher geschrieben wird.

Ich denke allerdings auch, dass die einzige sinnvolle Alternative sein wird alles komplett selber in OpenGL darzustellen. In dem Fall müsstest du dafür sorgen, dass du das Video dekodierst und als Textur in OpenGL darstellst. Anschließen kannst du dann nach belieben andere Inhalte zu dem Video dazu rendern. Dazu solltest du dir eventuell mal das Projekt Acinerella etwas genauer anschauen. Das ist eine recht einfach einzubindende Medienbibliothek.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 12, 2009 12:13 
Offline
DGL Member

Registriert: Mo Mär 30, 2009 16:39
Beiträge: 7
Mein Problem ist, dass sich der Text genauso wie das Video während der Laufzeit dynamisch ändern, dass bedeutet, dass ich während der Programmierung nicht weiß welche Videos gezeigt werden, da sich dies ständig ändert. Gibt es eine gute Möglichkeit die Software Allgemein zu schreiben mit einer Transparenz, dass ich also einen Video Player aktiv habe und darüber den Text laufen lasse?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 12, 2009 12:29 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
okay... ich hab mich ein wenig unglücklich ausgedrückt. Mit Overlay in dem Zusammenhang meinte ich das, was manche Programme bei Spielen beispielsweise machen. Bei der Voice-Chat Software Mumble wird zum Bleistift in vielen Spielen in einer Ecke angezeigt, welche Leute gerade im Chat sind und wer von denen gerade spricht. Diese Anzeige kommt nicht vom Spiel, sondern von Mumble selbst und ist keineswegs langsam oder sieht konstruiert aus. Im Gegenteil, es sieht sogar richtig hübsch aus *g*. Ich weiß aber nicht, wie die das machen... Mumble ist Opensource, da könnte man also spicken :)

Stimmt schon, normal meint man mit Overlay das, was viele Videoplayer machen. Das gleiche hat man übrigens, wenn man in Winamp oder VLC das Video auf den Desktop-Hintergrund ausgeben lässt - der bekommt dann auch eine bestimmte Farbe, die dann durchs Video ersetzt wird. (Aber das nur am Rande - hilft hier leider nicht weiter)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 12, 2009 13:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
@Frase: Okay. Das wird verwirrenderweise auch als Overlay bezeichnet. ;) Ich ignoriere dieses Overlay aber auch ständig. Wenn jemand Overlay sagt, dann sind das für mich nur die Art Videos darzustellen.

@MarkoM: Nur mal so zum Verständniss. Du hast einen VideoPlayer. Sagen wir mal VideoLan, MediaPlayer Classic oder den Windows Media Player. Diese spielen irgendwelche Videos ab. Und du möchtest dann ein Programm von dir Starten was sich dort irgendwie einhängt und anzeigt welche Datei gerade abgespielt wird. Richtig?

Ich frage das deswegen, weil mir noch nicht genau klar ist was du eigentlich machen möchtest. Denn um dir richtig helfen oder eine passende Antwort geben zu können müssen wir auch genau verstehen was du vor hast. Aber schon mal eines vorweg. Es gibt Dinge die sind recht einfach möglich und es gibt Dinge da hat es einen guten Grund warum das nicht so einfach möglich ist bzw möglich sein sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 12, 2009 15:52 
Offline
DGL Member

Registriert: Mo Mär 30, 2009 16:39
Beiträge: 7
Also so ähnlich wie du sagst soll es aussehen, nur dass der Text nicht der Videoname ist sondern ein frei zur Laufzeit des Programms definierbarer Text. Letztendlich soll das Programm also nur einen Text über das Video legen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 13, 2009 09:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Dann tut es mir leid dir sagen zu müssen, dass es da keine wirklich universelle Lösung geben wird bzw geben kann. Der Grund dafür ist recht einfach. Jeder Player spielt die Videos anders ab. Media Player Classic zum Beispiel kann mit den besagten Overlays arbeiten. Er ist aber auch in der Lage das Video mittels DirectX darzustellen. Insgesammt kennt er 7-9 verschiedene Methoden ein Video abzuspielen. Meist aber nur Detailänderungen. Der VideoLAN Player kann die Videos glaube ich auch mit OpenGL darstellen. Das weiß ich aber nicht genau. So hat jeder Player eine unterschiedliche Art die Videos abzuspielen. Selbst, wenn du nur einen Player unterstützen würdest dürfte das ziemlich anspruchsvoll sein. Und selbst dann wäre es noch irgendwie hingefrickelt.

Wenn es wirklich nur ein Text ist, dann könntest du da eventuell etwas mit den Delphiformularen an sich tun. Also du erstellst ein Formular. Stellst bei ihm ein, dass es OnTop dargestellt werden soll (FormStyle = fsStayOnTop). Sorgst dafür, dass es nur aus dem ClientBereich des Fensters besteht (BorderStyle = bsNone). Anschließend setzt du eine Transparenzfarbe. So etwas wie Grün und stellst es auf Transparent. Im OnPaint des Formes sorgst du dafür, dass mit der Transparenzfarbe gefüllt wird uns zeichnest anschließend deinen Text darauf. Das sollte eigentlich auch halbwegs funktionieren. Der Text befindet sich dann nicht im Video sondern als ausgefranstes Fenster irgendwo auf dem Bildschirm. Ist sicherlich keine schöne Möglichkeit so etwas zu machen. Aber meiner Meinung nach rechtfertigt alles andere den Aufwand nicht.

Sollte es komplexer werden solltest du dir überlegen nicht eventuell doch selber einen Player zu schreiben. Dann hast du zwar mehr Möglichketen aber auch deutlich mehr arbeit bzw mehr Verantwortung. Aber wegen einem reinem Text sehe ich da auch nicht unbedingt die Notwendigkeit.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 13, 2009 11:26 
Offline
DGL Member

Registriert: Mo Mär 30, 2009 16:39
Beiträge: 7
Also die von dir beschriebene Methode hatte ich bereits umgesetzt, diese funktioniert auch. Mein Problem ist aber, dass dann alles von der CPU gerechnet wird, deswegen war es mein Ziel diese Transparenz mit OpenGL zu erzeugen. Also habe ich das richtig verstanden, dass man mit OpenGL das Formular nicht so einfach transparent machen kann?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 16 Queries | GZIP : On ]