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

Aktuelle Zeit: Mo Jul 14, 2025 23:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Apr 16, 2008 18:24 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
OK hab nun einen extra Topic dafür geöffnet.

Also ich habe vor bei einem Bmp die Farbe Rot durchsichtig aussehenzulassen.

Wird ja üblich bei 2D Spiele so gemacht dass eine gewissene Farbe in einer Bmp nicht angezeigt wird und somit durchsichtig ist.

Nur hab ich erst mit Blending angefangen, und um ehrlich zu sein bin ich total verloren ^^"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 16, 2008 18:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nun, was du meinst ist das Colorkey verfahren.
An sich ne feine sache, aber da du nur mit SDL arbeitest (und von glBitmap soweit ich weiss noch keine SDL-kompatible Version rausgekommen ist, bzw. zumindest keine Plattformunabhängige) wird das ne unschöne angelegenheit. Am besten wäre es, wenn du die Bitmap vorher mit einem Grafikprogramm (z.B. GIMP) an dieser Stelle durchsichtig machst und das ganze dann in einem Format mit Alphakanal, also einem extra Kanal mit den Transparenzinformationen, wie z.B. PNG abspeicherst.

Ansonsten... Wenn du es unbedingt per Hand machen willst, stell dich auf ekelhaftes Pointergeschiebe ein :wink:

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 16, 2008 18:46 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
das ist recht doof
hab es mit chromakey verwächselt
wusste dass es was mit key war^^

naya sollte auch nur für windows sein
und alle bitmaps dann durchsichtigmachen wird witzig

ok sagen wir mal ich möchte nun mit png arbeiten
wie müsste ich dann vorgehen nachdem ich die stellen durchsichtig gemacht habe die ich wollte?

PS: ich hab irgendwie probleme was die durchsichtbarkeit mit blending anbelangt
es will einfach nicht klappen dass ein Roter Quad über einem Grünen Quad halbdurchsichtig aussieht


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 07:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hallo Lucifer,
Wenn Du mit Farben und Alphakanal (glColor4f) arbeitest, wo der Alphawert der Farbe im Bereich zwischen 0 und 1 liegen kann, dann musst Du die richtige Blendingfunktion aktivieren.

Versuchs mal mit
Code:
  1. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  2. glEnable(GL_BLEND);    // Enable Blending

Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 14:52 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
bei Colorkeys musst du noch auf bleeding(unschöne rote ränder in deinem Fall) achten. Eine Lösung dafür ist premultiplied alpha(siehe z.B. http://home.comcast.net/~tom_forsyth/bl ... lpha%5D%5D ). Außerdem ist wenn man nur komplett oder gar nicht transparente Pixel braucht, ist AlphaTest meist empfehlenswerter als blending. Insbesondere findet dann kein z-write mehr statt und du musst nicht mehr tiefensortieren.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 15:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
The-Winner: Was isn das für eine Seite? Bei mir scheint die etwas kaput zu sein.

Aber das Verfahren was du da ansprichst. Keine Ahnung ob sich das mit dem deckt was ich mir mal ausgedacht habe. Aber ich denke mal technisch wird das sicher ähnlich/gleich sein. Und wenn dann sollte man als Anfänger da wohl doch eher die Finger von lassen.

Lucifer: Wenn du die Möglichkeit hast solltest du es so machen, dass du von Hause aus einen passenden Alphakanal integrierst. Denn das ist in jedem Fall schneller als wenn es erst zur Laufzeit gemacht werden muss. Teilweise genügt es bei den Grafikprogramen einen Bereich zu markieren und entfernen zu drücken. Dann erscheint so ein Schachbrettmuster. Wenn man es dann speichert verhält es sich wie eine Maske.

Wenn es derzeit nur Windows sein sollte und es unbedingt zur Laufzeit sein muss, dann würde ich dir eher die glBitmap emfehlen, denn selber im Speicher rumbasteln muss ja nicht sein, wenn man es vermeiden kann. ;)

Wenn du die Bilder auch noch in der in der Größe verändern möchtest und dabei dann auch noch eine weiche Filterung haben möchtest, dann braucht man solche Mittel wie The-Winner vorgeschlagen hat. Aber ich denke dann finden wir eine Lösung, dass du es nicht selber machen musst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
Vielen Dank für die Hilfe und Informationen,
das hilft einem sehr viel.


Also ich hab schon mal bisschen mit PNG gearbeitet und kenne das mit dem Schachbrett^^
Ich habs bei normalen Delphi Programmen benutzt um zb selbstgemachte Knöpfe im Paintshop mit den merkwürdigsten Formen auf die Form zu bringen.

Ich glaub ich halt mich dann am besten bei PNG und TGA

Nun da dies erst mein Anfang mit TGA ist musste es ja auch sofort Probleme mit sich ziehen:

Also ich hatte eine der vorherig erwähnten Bmp zu einer TGA mit Irfan umgewandelt, und es ging soweit alles gut.
Nun habe ich mir Gimp runtergeladen und habe auch schnell rausgefunden wie man eine gewissene Farbe Komplett Transparent macht.

Ich hab die TGA dann auch wieder gespeichert und Program gestartet.
Leider wird die TGA nicht richtig angezeigt:

Screenshot

Und da ich grad das Bild dabei hab wollt ich wissen wo man einstellt das die Theme der Theme von Xp übereinstimmt.
Wie man auf dem Bild erkennt sieht das eher aus wie Windows 98 oder so
Dabei hab ich Xp mit einem Theme von Alienware


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hast du glTexImage2D auch angewiesen, die Daten als GL_RGBA und nicht GL_RGB zu interpretieren?

Wegen den Styles:
Es verwundert mich, dass der Fensterrahmen nicht gethemed wird... Sowas ist mir bisher nur bei Anwendungen untergekommen, die aus diversen Gründen plötzlich Scrollbars hatten. Aber das ist ja bei dir nicht der fall..

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 18:27 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
so hab mir nochmal das VCL Template 1.5 runtergeladen und arbeite mit Textures.pas
damit hab ich momentan keine Probleme und alles wird richtig angezeigt.

Also das mit dem Theme passiert bei den Templates.
Alle andere Anwendungen welche ich mit Delphi herstelle werden gethemet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 21:59 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
Entschuldigung wegen DoublePost

Also ich hab jetzt einen Boden gebildet und dann drüber ein Quad mit der geladenen TGA welche auch auf manchen Stellen Durchsichtig ist
Nur irgendwie wenn dieser Quad über den Boden steht sieht man dass der Quad nicht Durchsichtig ist sondern einfach die Farbe vom HIntergrund, also von glClear erhalten hatt

das heisst dass der Quad nochimmer nicht Transparent ist.


zum Thema Blending:

Ich hab mit

Code:
  1. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  2. glEnable(GL_BLEND); // Enable Blending


und mit glColor4f(1,1,1,Alpha) bisschen rumgespielt und Alpha immerwieder verändert.
Was mir nur aufgefallen ist, ist dass es anstelle durchsichtig oder so eher dunkler wurde, als würde man das Licht runtersetzen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 22:06 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Durchsichtig (=Transparent) bedeutet, dass an der Stelle nicht gezeichnet wird, daher die Farbe nicht übernommen wird.
Daher haben die entsprechenden Texturen die vorherige Farbe (hier glClearColor).
Du musst die Zeichenreihenfolge entsprechend anpassen, d.h. es muss erst alles hinter der Textur gezeichnet werden.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 14:24 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
hm ich weis jetzt nicht genau was du meinst.
Also der Boden ist ja 3D sagen wir , denn er geht in die Z axe
und was ich vorhatte war zumbeispiel ein 2D Bild eines spielers oder monsters welches ich zum test von einem Spiel genommen hab draufzeichne und diese dann auf diesem boden sozusagen gehen kann


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 14:37 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Dann zeichnest du erst den Boden und danach den Spieler.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
ah es geht vielen dank.

Nur warum passiert sowas wie vorher beschrieben?

gibt es eine gewissene Regel zu befolgen um sowas zu vermeiden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 18, 2008 15:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja.
Du musst bedenken, dass OpenGL alles sofort zeichnet, was du nach glBegin übertragen hast, sobald du glEnd aufrufst (bzw wenn du nen VBO anwendest oder wasauchimmer) ohne sie vorher nach der Z-Achse des Betrachters zu sortieren.
Das Blending funktioniert so, dass er auf Basis der Funktion, die du mit glBlendFunc definierst, die einzelnen Pixel berechnet. Er nimmt sich also den Wert, den er schon im Framebuffer vorfindet und verrechnet ihn dann auf die von dir angegebene Art und Weise mit dem Quad, das du renderst.

Wenn du jetzt zuerst das transparente Quad zeichnest, findet er als hintergrundpixel deine mit glClearColor definierte Hintergrundfarbe vor. Also verrechnet er die Werte des Quads damit und blendet es so. Wenn du aber zuerst den Boden zeichnest und dann dein Quad, dann wird er beim rendern dieses Quads die Pixel vom Boden vorfinden und die zum berechnen verwenden.

Das ist die einfache und leider sehr traurige Wahrheit die uns Entwickler zu eigenen Z-Ordering Algorithmen zwingt. Wobei du in deinem Fall einfach nach dem Zeichnen des Bodens den Tiefentest ausmachst und deine Figuren in der Reihenfolge zeichnest (von Hinten nach Vorne) in der sie angeordnet sein sollen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]