Aktuelle Zeit: 15.05.2024, 05:02

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Multitexture
BeitragVerfasst: 30.06.2007, 16:20 
Offline

Registriert: 30.06.2007, 16:06
Beiträge: 5
Hallo community :)

Ich habe ein Problem mit mehreren Texturen in einem Material. Hab schon das englische und dieses Board durchsucht, aber das hat nicht weitergeholfen :(.

Ich habe zwei Texturen - eine Groundtextur (jpg, kein Alpha) und eine Pathtexture (png mit Alpha). Der Path soll sich also über die Groundtextur legen und an den transparenten Stellen soll der Ground durchscheinen.

Code:
Material.Textures[0] = driver->getTexture("media/ground_grass01.jpg");
Material.Textures[1] = driver->getTexture("media/path/path0000.png");

stellt immer nur textures[0], also den Ground dar.
In einem Thread habe ich den Hinweis auf "EMT_SOLID_2_LAYER" gelesen. Das hat mir aber auch nicht weitergeholfen - dann zeigt er nur textures[1] - ohne Transparenz, ich seh also nix vom Ground :(.

Habt ihr einen Tipp für mich bevor ich verzweifel? ;)

Danke und Gruss,

crionics


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Multitexture
BeitragVerfasst: 30.06.2007, 17:11 
Offline
Moderator

Registriert: 26.03.2007, 20:06
Beiträge: 114
Versuch mal "EMT_TRANSPARENT_ALPHA_CHANNEL", weil sonst der Alpha Channel der Textur nicht beachtet wird...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Multitexture
BeitragVerfasst: 30.06.2007, 17:27 
Offline

Registriert: 30.06.2007, 16:06
Beiträge: 5
Danke für den Hinweis - schonmal mehr, als ich in den Foren gefunden habe ;).
Leider funktionierts immer noch nicht :(. Er zeigt mit "EMT_TRANSPARENT_ALPHA_CHANNEL" nur textures[0].
Reicht es normalerweise "EMT_TRANSPARENT_ALPHA_CHANNEL" als MaterialType anzugeben, oder kann ich noch etwas vergessen haben - müssen die Types vielleicht kombiniert werden?
Textures[0] ist doch die "oberste" Texture, oder ist es die unterste? Wenn ich den path als 0 und den Ground als 1 nehme, sehe ich nur den Path - jetzt aber mit Transparenz :).
Oder kann es am PNG liegen? Ich habs schon mit PNG32, PNG24 und PNG8 mit Alphatransparenz versucht, jeweils aus Fireworks gespeichert...
Verzweiflung macht sich breit *g*

Gruss
crionics


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Multitexture
BeitragVerfasst: 01.07.2007, 14:44 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Für sowas sind die API-Docs gut:

Zu EMT_SOLID_2_LAYER:
Zitat:
Solid material with 2 texture layers. The second is blended onto the first using the alpha value of the vertex colors. This material is currently not implemented in OpenGL, but it works with DirectX.

Also nix Alphakanal, sondern der Alphawert der Vertexfarben.

EMT_TRANSPARENT_* benutzt auch nur eine Textur, für das, was du vorhast, würde ich mir an deiner Stelle einen kleinen Pixelshader schreiben. Beispiele für genau das, was du vorhast, gibt es hier:
http://wiki.delphigl.com/index.php/Tuto ... pielshader
(Du musst nur die Texturanzahl auf 2 reduzieren und als Alphawert nicht r/g/b nehmen, sondern den Alphawert einer Textur).

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Multitexture
BeitragVerfasst: 01.07.2007, 15:46 
Offline

Registriert: 30.06.2007, 16:06
Beiträge: 5
Hi thephoenix, danke für deine Antwort.
Ja, die API-Docs sind ganz ok, wenn man weiss, was man sucht. Ansonsten fühle ich mich dort hoffnungslos verloren - zumal es nichtmal eine Suchfunktion gibt :(.

Ich glaube, ich habe mich ein wenig unklar ausgedrückt. Ich möchte keinen "smoothen Übergang" zwischen Texturen hinbekommen, sondern einfach nur zwei Texturen übereinander legen, wobei die obere Textur schon einen Alphakanal hat, und an den Stellen soll einfach die untere Textur durchscheinen.
Da ein Bild mehr als tausend Worte sagt, habe ich mal ein wenig gepixelt ;)

Bild

Dafür einen Shader schreiben ist doch mit Kanonen auf Spatzen schiessen, das ist doch eine ganz einfache Standard-Aufgabe, oder irre ich mich da? ;).
Direkt unter DirectX hatte ich das mal gemacht, da musste ich lediglich den RenderState "D3DRENDERSTATE_COLORKEYENABLE" setzen (in dem Fall kein Alpha, sondern Blenden bei bestimmter Farbe), und dann konnte ich einfach die Texturen setzen und fertig war die Kiste.

Ich hoffe die Antwort lautet nicht: du musst trotzdem nen Shader schreiben, weil da bin ich im Moment trotz des Tutorials (das ja nicht wirklich zu dem Problem passt) ein wenig überfordert *g*.

BTW: Wenn das nicht unter OpenGL geht, dann hat OpenGL in dem Fall einfach Pech ;).

Vielleicht habt ihr noch eine Idee? - Die Hoffnung stirbt zuletzt.. ;)

Gruss,

crionics


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Multitexture
BeitragVerfasst: 01.07.2007, 17:48 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Ok, sry, falsch verstanden... ist aber, wo quasi nur noch 32-bit-Texturen benutzt werden, auch kein großer Unterschied mehr! Und von der Performance dürfte das in dem Fall kein bisschen anders ausfallen, wenn du trotzdem nur eine Maske willst, kannst du halt normales Alphablending mit Alphawerten von entweder 1 oder 0 nehmen...

Zitat:
Ich hoffe die Antwort lautet nicht: du musst trotzdem nen Shader schreiben

Also ich sehe im Moment 2 Möglichkeiten, das zu realisieren (ohne Gewähr auf Vollständigkeit):
- 1. Du schreibst einen Shader (mit Kanonen auf Spatzen schießen? Moderne Grafikkarten haben genug Platz für dutzende Kanonen). *duck*
- 2. Du schaust in die Sourcen der Engine und guckst, wie du das da einbaust. Damit tust du natürlich den anderen Irrlicht-Usern nen Gefallen, und sollte auch nicht so schwierig sein, da Irrlicht übersichtlich gecodet ist und diese Funktion tatsächlich wohl eher eine Standardaufgabe darstellt. :)
Und plz auch/erst mal für OpenGL... Es gibt auch Leute, die kein Windows benutzen ;)

(An deiner Stelle würde ich mir eindeutig Möglichkeit 1 etwas genauer anschauen...)

PS: Der Shader selbst ist eindeutig das kleinere Problem, den bekomme ich wohl in < 10 Minuten gecodet, es ist aber imho recht kompliziert, den dann in Irrlicht einzufügen *zulightfeatherrüberschau*

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Multitexture
BeitragVerfasst: 01.07.2007, 19:55 
Offline

Registriert: 30.06.2007, 16:06
Beiträge: 5
Danke nochmal thephoenix für deine Mühe.
Das ist ja in der Tat betrüblich - eigentlich wollte ich eine Renderengine einsetzen, damit sie mir Arbeit abnimmt, und jetzt siehts so aus, als würde ich alleine an diesem Basic-Problem ein paar Tage oder Wochen sitzen :(.
Ich habe mich jedenfalls mal flux ein wenig in Shaderlanguages eingelesen (hab noch nie was mit Shadern zu tun gehabt *g*) und einen kleinen Test mit HLSL (sorry, OpenGLer ;)) gemacht, da ich nur dafür auf die Schnelle ein simples Einsteiger-Tutorial gefunden habe.

Code:
const char* pixelShader =

"sampler2D tex0;                                      \
                                                      \
float4 pixelShader( float2 texCoord0 : TEXCOORD0,      \
                    float4 color  : COLOR0 ) : COLOR0 \
{                                                     \
    float4 p0 = tex2D( tex0, texCoord0 );               \
    return p0;                                         \
}";


Das ist der wohl simpelste Shader, der möglich ist (gibt ja nur die Textur wieder) - aber selbst der klaut mir schon zwischen 10 und 20 FPS gegenüber nem EMT_SOLID :(.

Ist das wirklich der Weisheit letzter Schluss? Ich überlege ernsthaft, Irrlicht sausen zu lassen und wieder DirectX in Handarbeit zu Coden, weil diese Funktion so grundlegend für mein Projekt ist :(.
Ich bin leider in C++ nicht gut genug, um in der Engine Erweiterungen zu schreiben (ich wollte eigentlich mit diesem ersten Projekt mal warm in C++ werden). Ich komme von C (eigentlich noch woanders her, aber das traue ich mich hier nicht zu sagen *g*) und da würde ich eher was kaputt machen ;).

Kennt vielleicht jemand eine Engine, in der diese Grundlagen-Funktion implementiert ist?

Gruss,

crionics


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


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:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de