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

Aktuelle Zeit: Fr Jul 18, 2025 12:42

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Textur einfärben
BeitragVerfasst: So Jun 11, 2006 16:58 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Hi!

Ich möchte eine Textur mit einer vorgegebenen Farbe einfärben. Es handelt sich dabei um eine Spielertextur, die in Grautönen vorgegeben ist. Der erste Ansatz, das mit glColor zu machen ist fehlgeschlagen, da die Originaltextur weiße Glanzlichtpunkte enthält, die weiß bleiben müssen. Im ursprünglichen SDL-Code wird das Bild vorher mit einer speziellen Funktion eingefärbt, ich möchte das Ganze aber in Echtzeit machen. Was gibt es noch für Möglichkeiten, OHNE SHADER, die Texturfärbungen zu beeinflussen?

mfg
yonibear


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 19:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Arr jetzt wollte ich gerade mit Shadern anfangen.

Aber ich würds spontan mal mit Multitexturing versuchen. Die graue Textur würde ich aufspalten: Das, was weiß sein soll, in eine Textur, der Rest in eine andere. Der Rest wird dann wie üblich per glColor eingefärbt und anschließend wird der Glanz noch darübergezeichnet. Dürfte funktionieren ;)

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 19:12 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Das ist genau das was ich mir mittlerweile auch überlegt hab. Funktioniert wunderbar! Aber vielen Dank für deine Anstrengungen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 17:06 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Gibts ne Möglichkeit, die beiden Texturen übereinanderzulegen, ohne irgendwelche Extensions zu verwenden?
Im Moment benutze ich glBlendEquation(GL_FUNC_ADD), was auch wunderbar funktioniert. Aber als ich dann unter Windows kompilieren wollte, fing der Ärger mit den Extensions an. Ich möchte möglichst die Einbindung neuer Funktionen und am besten überhaupt Extensions vermeiden, um abwärtskompatibel zu bleiben, sprich, Multitexturing ist auch keine Lösung. Ausserdem gehört glBlendEquation zum ARB_imaging-Befehlssatz, der angeblich von manchen ATI-Karten nicht unterstützt wird.
Gibt es also einen kompatibleren Weg das zu machen, notfalls auch mit Extensions die wenigstens keine Funktionen brauchen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Multitexturing gehört schon seit Ewigkeiten zu den Core-Funktionen von OpenGL. Mit dem richtigen Header, vor allem unserem hauseigenen DelphiGL-Header, dürfte die Verwendung von "Extensions" wie dieser kein Problem sein. Multitexturing wird seit der Riva TNT unterstützt, also wenn du nur ältere Funktionen verwenden willst, dann musst du aber auf viele andere Funktionen auch verzichten.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Ich würde mal folgendes probieren :
1.Depthtest ein, aber nciht in den Depthbuffer schreiben
2.Normale Textur zeichenen (also die die nicht eingefärbt werden soll)
3.Depthtest ein und in den Depthbuffer schreiben
4.Eingefärbte Textur zeichnen

Wenn du das für jedes 3-Eck einzeln machst dürfte es funktionieren und du brauchst kein Multitexturing, allerdings verdoppelt sich so mal eben deine Polygonzahl.

_________________
Bevor du definierst, was etwas ist, versichere dich seiner Existenz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 18:01 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Ich programmiere eigentlich in C++ und treib mich nur hier rum, weil hier einfach die beste deutsche GL-Community ist ^^. Technisch wäre es für mich auch kein Problem GL-Extensions einzubinden, ich finde es nur extrem lästig dass man mit ifdefs für Win alles einzeln einbinden muss.
Ich will eigentlich nur einen hardwarebeschleunigten Ersatz für meinen SDL-Renderer schreiben, weil SDL unter X11 ja keine Beschleunigung bietet. Daher sind meine Ansprüche an die OpenGL-Version extrem niedrig, sonst würde ja auch alte Rechner nicht vom GL-Renderer profitieren. Wenn aber multitexturing schon von der TNT-Generation unterstützt wird, wäre das mal eine Überlegung wert, schließlich ist ja ältere 3D-Hardware nie sehr verbreitet gewesen. Allerdings wäre glBlendEquation immer noch am praktischsten. Stimmt das, dass das von manchen ATI-Karten nicht unterstützt wird? GL_ARB_imaging haben die fraglichen Karten jedenfalls nicht. Auch wenn die Extension in OpenGL 1.2 inbegriffen ist, habe ich irgendwie gelesen, dass ATI die trotzdem nicht drin hat. Kann jemand mit ner älteren ATI-Karte was dazu sagen?

@ Tomok:
Dsa ist genau das was ich bereits mache, der Trick dabei ist nur, einzustellen dass die beiden texturen nicht moduliert, sondern addiert werden sollen, sonst bekomme ich meine weißen Flecken nicht hin.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 18:32 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Ich habs jetzt doch ganz ohne Extension hinbekommen. glBlendFunc(GL_SRC_ALPHA, GL_ONE) erzielt ebenfalls den gewünschten Effekt. Irgendwie hab ich noch nie verstanden, was ich da mit BlendFunc eigentlich tue, aber es funktioniert!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 18:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
glBlendEquation lässt sich ansonsten auch über glBlendEquationEXT verwenden, welches aus GL_EXT_blend_minmax entspringt und auch schon ewig verfügbar ist, auch auf radeons(aber nicht solange wie multitexturing). Ich meine, dass es dadurch auch über glBlendEquation im Kern verfügbar ist.

Zum ARB_Imaging kann ich sagen, dass ich zwar keine ältere ATI karte hab, aber auf meiner X1900 sind jedenfalls diverse Bestandteile des ARB_Imaging nicht verfügbar, wie zB glHistogram und glConvolutionFilter. Was sich dann auch mit den Ausgaben von glView und den Daten auf delphi3d deckt.

edit: Ok, zuspät. Aber zumindest scheint für glBlendequation ein gültiger Funktionspointer erzeugt zu werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 19:29 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Einen Funktionspointer zu holen, ohne die Extension zu prüfen kann aber dazu führen, dass der Treiber in den Emulationsmodus schaltet um die Extension nachzubilden. Genau dazu werde ich ja gezwungen, wenn ich auf ATI-Karten nicht auf ARB_imaging prüfen kann und begebe mich somit in Gefahr, dass das Programm unbenutzbar wird.
Meine Geforce FX zb. schaltet auch in den mit durchschnittlich 0.5 FPS extrem schnellen Software-Modues, wenn ich einfach frech eine NPOT-Textur verwende. Das hat mich als Anfänger mal viel Zeit gekostet, zumal bei bestimmten Größen (zb. 768) diese Emulation auch sehr schnell ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 13, 2006 01:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@yonibear: Guck mal unter glBlendFunc. Da gibts etwas mehr als nur die standard Erklärung. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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


Wer ist online?

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