Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.09.2009, 16:41

TGA Texturen für Büsche

Hallo,

Ich programmiere nun schon etwas länger an einem 3d autorennen mit der Tribase Engine.Bis jetzt hat auch alles geklappt, ich hab ein tolles automodell, mit kollisionserkennung , fahrphysik usw. Dazu habe ich selbstverständlich auch eine rensstrecke gebaut. Zu dieser sollten auch bäume gehören. In den meisten (auch professionellen) computerspielen werden dabei die Blätter durch sprites gerendert, die eine Alpha textur erhalten.

Nun mein problem:

// 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 = "BuschMittel.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] = Modulate;
AlphaArg1[0] = Texture;
AlphaArg2[0] = Current;

// Materialeinstellungen
MaterialDiffuse = {0.498f, 0.498f, 0.498f, 1.000f};
MaterialAmbient = {0.498f, 0.498f, 0.498f, 0.000f};
MaterialEmissive = {0.000f, 0.000f, 0.000f, 0.000f};
MaterialSpecular = {0.000f, 0.000f, 0.000f, 0.000f};
MaterialPower = 50.000f;

AlphaBlendEnable = True;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
ZWriteEnable = True;
SpecularEnable = True;
}
}


Wenn ich die Textur über den Hlsl code des ModelConverter Einfüge,sieht das Ergebniss folgendermaßen aus:


(Link)


Die Vorderen Ebenen nehmen das Schwarz vom Hintergrund mit.
Wie kann ich das ändern? vll mit einem Pixelshader?

Euer Nick

http://www.sounddesign.com/nick
Aller Anfang ist schwer

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

03.09.2009, 16:44

das liegt wahrscheinlich dann an deiner textur. da muss für die randpixel der alphawert 0 sein. mach das mit einem tool deiner wahl. ich mac das immer mit gimp aber pngs^^

3

03.09.2009, 16:48

Nein, das kann nicht sein, die Textur hab ich selbst gemacht(Photoshop) und der Alphawert am rand ist 0, das schwarze ist nicht aus der Textur , sondern vom Hintergrund.

Oder hab ich da was falsch verstanden?
Aller Anfang ist schwer

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

03.09.2009, 17:10

Zitat von »"Nick"«

Nein, das kann nicht sein, die Textur hab ich selbst gemacht(Photoshop) und der Alphawert am rand ist 0, das schwarze ist nicht aus der Textur , sondern vom Hintergrund.

Oder hab ich da was falsch verstanden?


Mach den Hintergrund mal anderst Farbig. Dann sieht man vlt. mehr.

Mich dünkt, dass da einfach Alpha Blending nicht richtig eingeschaltet ist..

5

03.09.2009, 17:14

Transparenz ist kniffelig^^
Am besten zeichnest du Transparente Pixel ab einem bestimmten Wert einfach nicht, für Pflanzen funktioniert das ganz gut. Soll man aber tatsächlich durch gucken können, musst du alle Dreiecke nach ihrer Tiefe sortieren, weil du sonst Probleme mit dem Z Buffer kriegst.
Lieber dumm fragen, als dumm bleiben!

6

03.09.2009, 17:28

Sie meinen also über die maske(z.b. lila farbe) die pixel auszublenden?
EDIT:
geht das mit dem Color Key im HLSL?

Wenn nicht wie sortiere ich die dreiecke, ich kenn mich in DIrectX noch nicht so gut aus
Aller Anfang ist schwer

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

03.09.2009, 17:38

Ich würde sagen das Problem liegt definitiv an der Reihenfolge in der die Dreiecke gezeichnet werden. Damit die Transparenz "funktioniert" muss natürlich alles was weiter hinten ist zuerst gezeichnet werden bevor das was weiter vorne ist drübergeblendet wird. Ein einfacher Workaround hier ist Alphatesting zu verwenden. Komplexer aber qualitativ besser wird es wenn du z.B. die Dreiecke vorsortierst oder eine Technik für Order independent Transparency implementierst (einfach mal danach googlen)...

8

03.09.2009, 17:43

Nein ich meinte Alphatesting. Damit kommst du prinzipiell auch um das sortieren von Dreiecken herum, wenn du nur komplett transparente und komplett opake Pixel hast.
Ich weiß grade nicht wie man das in Direct3D einschaltet aber es sollte nicht besonders schwer sein.
Lieber dumm fragen, als dumm bleiben!

9

03.09.2009, 17:48

Hmm das mir irgentwie noch zu komplex, außerdem nicht unbedingt nötig,mir würde das mit der maske schon reichen, nur die umsetztung kenne ich nicht, bei der suche nach hlsl color key kam bei google nichts vernünftiges
Aller Anfang ist schwer

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

03.09.2009, 17:51

Du brauchst dazu auch kein HLSL und sowas wie Color Keying gibts in D3D nicht...

http://msdn.microsoft.com/en-us/library/bb172254.aspx

Werbeanzeige