Hallo,
ich möchte eine transparente Textur auf eine Fläche (ein paar Vertizes) legen. Die Fläche habe ich in AC3D erstellt und eine vorher erstellte Textur im TARGA-Format darüber gelegt. Die transparenten Bereiche habe ich vorher als Aplha-Kanal definiert. Wenn ich die Textur in AC3D lade, wird alles so angezeigt wie ich es möchte.
Konvertiere ich nun das exportierte 3ds-Modell mit dem ModelConverter erhalte ich die folgende Ausgabe:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// Dieser Effekt wurde automatisch vom TriBase-Tool ModelConverter generiert.
// Hinweis: um einen Tabulator einzufügen, drücken Sie <Strg+Tab>!
DWORD NumTextures = 1;
STRING Texture1Filename = "truck.tga";
DWORD Texture1Type = 1; // 1: 2D-Textur; 2: Würfel; 3: Volumen
DWORD Texture1ColorKey = 0x00000000;
TEXTURE Texture1;
TECHNIQUE T1
{
PASS P1
{
Texture[0] = <Texture1>;
// Es scheint keine Opazitätstextur zu geben!
// Wenn Sie doch eine benutzen, ändern Sie "SelectArg2" in "Modulate" um!
AlphaOp[0] = SelectArg2;
AlphaArg1[0] = Texture;
AlphaArg2[0] = Current;
// Materialeinstellungen
MaterialDiffuse = {0.933f, 0.502f, 0.933f, 1.000f};
MaterialAmbient = {0.200f, 0.200f, 0.200f, 0.000f};
MaterialEmissive = {0.000f, 0.000f, 0.000f, 0.000f};
MaterialSpecular = {0.000f, 0.000f, 0.000f, 0.000f};
MaterialPower = 8.000f;
AlphaBlendEnable = True;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
ZWriteEnable = False;
}
}
|
Nun lade ich das Model mit der Tribase-Engine und rendere es
zum Schluss in der folgenden Form:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
D3D->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
pC->getModel("2dtruck")->Render();
D3D->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
|
Ich habe schon alle möglichen RenderState-Kombinationen die ich im Formum bei ähnlichen Problemen gefunden habe durchprobiert. Leider ohne Erfolg!! Die Fläche über dem Alpha-Kanal bleibt immer weiß und nicht transparent. ???
Was mache ich Falsch?
Vielen Dank für Eure Hilfe!!