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

Aktuelle Zeit: Di Jul 15, 2025 09:08

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Multitexturing mit Alpha
BeitragVerfasst: Do Mär 10, 2011 22:29 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Hi,

Also ich habe ein Fahrzeug (ein Modell), das ich von einer Datei lade.
Ich hab bereits Multitexturing hinbekommen, mit der Standardtextur (GL_TEXTURE0) und einer Dirtmap (GL_TEXTURE1, mit Alphakanal) darüberzulegen.
Jetzt meine Frage...
Wie kann ich der Dirtmap (GL_TEXTURE1) einen eigenen Alphawert zuweisen, also so dass die Textur darunter (GL_TEXTURE0) durchscheint?
Aktuell verwende ich GL_DECAL für GL_TEXTURE1 (das passt am besten).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Multitexturing mit Alpha
BeitragVerfasst: Fr Mär 11, 2011 11:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich glaube da musst du dann den Alphakanal gleich mit in die Textur einbauen. Du könntest auch versuchen (ich habe aber nicht viel erfahrung mit Multitexturing und weiß nicht, ob das so geht), ob es klappt, wenn du noch eine dritte Textur, die komplett weiß ist und nur den gewünschten Alphakanal hat, drüberlegst und mit der zweiten mittels GL_MODULATE verblendest. Aber probier erstmal die erste Methode, die wird vermutlich zielführender sein.

greetings

_________________
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: Re: Multitexturing mit Alpha
BeitragVerfasst: Fr Mär 11, 2011 15:41 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Ok, sorry, hab mich vielleicht etwas schlecht ausgedrückt...

Die Dirtmap, die ich über die Textur legen will, hat einen Alphakanal (32-bit, RGBA)
Ich will jetzt aber, dass wenn man mit dem Fahrzeug länger im Dreck fährt, dass die Dirtmap, immer sichtbarer wird.
Am besten, soll das ganze Stufenlos und mit einer einzigen Variable (0...1) einstellbar sein.

Kleiner hinweis noch...
Ich programmiere mit einer etwas langsamereren Scriptsprache (AutoHotkey).
Daher ist es nicht wirklich möglich, die Alphabits der Grafik (während der Laufzeit) für die Textur anzupassen.
Aus dem Grund suche ich nach einer möglichkeit, das mit OpenGL zu erledigen.

Also Bildlich gesprochen:
Dateianhang:
t1.png

Das ist ein Auschnitt der Textur des Fahrzeuges

Dateianhang:
t2.png

Das ist die Dirtmap (Pink ist der Alphakanal)

Dateianhang:
t3.png

Wenn ich die beiden übereinander lege, sieht es so aus (das Funktioniert auch wunderbar)

Dateianhang:
t4.png

Ich will jetzt aber das ich auch noch den Alphawert der Dirtmap ändern kann (in etwa so)

@Lord Horanzont:
Die erste Methode, kann ich wohl vergessen, da ich es Stufenlos haben will, und die Scriptsprache zu langsam ist die einzelnen Bits der Grafik zu setzen.
Aber die zweite Methode hört sich vielversprechend an.
Werd ich mal versuchen, ob ich da was zusammenzimmern kann :wink:


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Multitexturing mit Alpha
BeitragVerfasst: Fr Mär 11, 2011 16:31 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Benutzt du Shader? Dein Problem schreit geradezu danach...


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:22, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Multitexturing mit Alpha
BeitragVerfasst: Fr Mär 11, 2011 16:41 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Nein, ich benutze keine Shader, aber ich hab damit gerechnet, dass es wohl ohne Shader keine richtig vernünftige Lösung gibt.
Leider, bin ich aber gerade erst dabei, mich in GLSL einzuarbeiten.
Hoffe, das geht schnell, immerhin kann ich ja auch C++ :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Multitexturing mit Alpha
BeitragVerfasst: Fr Mär 11, 2011 19:17 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Wow, das mit den Shadern ist ja voll einfach...
Habs hinbekommen...

Vertexshader:
Code:
void main(void)
{
  gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
  gl_TexCoord[0]  = gl_MultiTexCoord0;
}


Fragmentshader:
Code:
uniform sampler2D texSamplerTMU0;
uniform sampler2D texSamplerTMU1;
uniform float alpha;

vec4 src;
vec4 dst;

float a;

void main(void)
{
  src = texture2D(texSamplerTMU0, vec2(gl_TexCoord[0]));
  dst = texture2D(texSamplerTMU1, vec2(gl_TexCoord[0]));
  a = alpha * dst.a;
  gl_FragColor.r = (src.r * (1.0 - a)) + (dst.r * a);
  gl_FragColor.g = (src.g * (1.0 - a)) + (dst.g * a);
  gl_FragColor.b = (src.b * (1.0 - a)) + (dst.b * a);
  gl_FragColor.a = 1.0;
}


Wenn ich gewusst hätte, dass das mit den Shadern so einfach ist... :wink:
Trotzdem danke für Hilfe.

Da das mein erster Shader ist, frag ich einfach mal...
Kann ich da nochwas verbessern, oder ist es so in Ordnung?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Multitexturing mit Alpha
BeitragVerfasst: Fr Mär 11, 2011 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Wow, das mit den Shadern ist ja voll einfach...

Richtig. :)

Zitat:
Da das mein erster Shader ist, frag ich einfach mal...
Kann ich da nochwas verbessern, oder ist es so in Ordnung?

Vielleicht so:
Fragmentshader:
Code:
uniform sampler2D texSamplerTMU0;
uniform sampler2D texSamplerTMU1;
uniform float alpha;

void main(void)
{
  vec4 src = texture2D(texSamplerTMU0, gl_TexCoord[0].xy);
  vec4 dst = texture2D(texSamplerTMU1, gl_TexCoord[0].xy);
  float a = alpha * dst.a;
  gl_FragColor = src*(1.0 - a) + dst*a;
  gl_FragColor.a = 1.0;
}


Die meisten Operationen funktionieren Komponentenweise, also du musst nicht für jeden Farbkanal einzeln rechnen. Des weiteren können Variablen auch lokal deklariert werden (ist ja schließlich C-Syntax).

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Multitexturing mit Alpha
BeitragVerfasst: Fr Mär 11, 2011 19:45 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Ja, vielen dank...
Jetzt bin ich glücklich :D


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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 ]