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

13.03.2008, 14:01

Texturkoordintentransformation im Effekt

Hi,

ich möchte gerne in einer Effektdatei Texturkoordinaten transformieren. Wenn man das ganze im Code macht, sieht das ja ungefähr so aus:

C-/C++-Quelltext

1
2
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORFLAGS, D3DTFF_COUNT2);
SetTransform(D3DTS_TEXTURE0, (D3DMATRIX*)(&mTransform));


In einen Effek übersetzt sähe das ja irgendwie so aus,

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
float4x4 mTransform;

TECHNIQUE T1
{
    PASS P1
    {
        Texture[0] = <Texture1>;

        TextureTransformFlags = Count2;
                ...
    }
}


wobei ... irgendwie mTransform und die entsprechende Texturschicht (0), enthalten muss und ich vor dem Rendern jeweils pEffect->SetMatrix("mTransform", (D3DXMATRIX*)(&mTransform)); aufrufe.

Leider finde ich die entsprechenden Effect States nicht, bzw. bekomme sie nicht richtig angewendet. Die DirectX-Doku war in diesem Punkt leider auch nicht wirklich hilfreich.

Daher meine Frage: Kann mir jemand sagen, welche Effect States ich wie einstellen muss, damit sich meine Textur bewegt?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

13.03.2008, 18:18

ich denke was du suchst nennt sich TextureTransform[0] ;)

3

14.03.2008, 09:41

Das habe ich in der DirectX-Doku auch gefunden. Ich habe es mit

TextureTransform[0] = mTransform;

probiert, aber dann bekomme ich einen Fehler bei der Effekterstellung, wenn ich das tbModel lade. Daher habe ich angenommen, dass ich noch irgendetwas übersehen habe.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

14.03.2008, 10:34

Zitat von »"leli"«

aber dann bekomme ich einen Fehler bei der effekterstellung


aha. und wie lautet dieser fehler!?

5

14.03.2008, 12:17

Im Log gibt es folgende Fehlermeldungen:

FEHLER: Der Aufruf von D3DXCreateEffect verursachte den DirectX-Fehler E_FAIL! Beschreibung: An undetermined error occurred (tbeffect.cpp, Zeile 63, Funktion tbEffect::Init)
FEHLER: Fehler beim Erstellen des Effekts! (tbmodel.cpp, Zeile 207, Funktion tbModel::Init)
FEHLER: Fehler beim Erstellen des Modells! (tbmodel.cpp, Zeile 319, Funktion tbModel::Init)
FEHLER: Fehler beim Laden des Modells für's Schwarze Loch! (blackhole.cpp, Zeile 45, Funktion CBlackHole::Init)

Dementsprechend kann er auch das Modell nicht rendern, bzw. ich kann mTransform gar nicht per SetMatrix() setzen.

Nochmal der Effect-Code der Modelldatei:

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
DWORD   NumTextures  = 1;
STRING  Texture1Filename = "blackholeTexture.jpg";
DWORD   Texture1Type = 1; 
DWORD   Texture1ColorKey = 0x00000000;
TEXTURE Texture1;
float4x4 mTransform;

TECHNIQUE T1
{
    PASS P1
    {
        Texture[0] = <Texture1>;

        TextureTransformFlags = Count2;
        TextureTransform[0] = mTransform;
        
        AlphaOp[0] = SelectArg2;
        AlphaArg1[0] = Texture;
        AlphaArg2[0] = Current;

        // Materialeinstellungen
        MaterialDiffuse = {1.000f, 1.000f, 1.000f, 1.000f};
        MaterialAmbient = {0.200f, 0.200f, 0.200f, 0.000f};
        MaterialEmissive = {0.100f, 0.500f, 1.000f, 1.000f};
        MaterialSpecular = {0.000f, 0.000f, 0.000f, 0.000f};
        MaterialPower = 0.000f;

    }
}

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

14.03.2008, 12:22

der effect compiler erlaubt es dir, die compilerfehlermeldungen in erfahrung zu bringen. wenn du z.b. mit D3DXCreateEffectFromFile() arbeitest, dann kannst du das über den parameter ppParseErrors der funktion machen.
also: schau mal wie die tribase das macht, fang das ab und schau was da rauskommt.

7

14.03.2008, 21:29

Vielen Dank für den Tip. Da das Problem ja direkt bei D3DXCreateEffect liegt, werde ich erstmal ohne die Engine drumrum probieren, den Fehler abzufangen und den Effekt zum Laufen zu bringen.

8

28.03.2008, 11:12

Okay,

habe jetzt zumindest die Lösung, warum der Effekt nicht kompilierte. War ganz einfach: Statt TextuerTransform[0] = mTransform; muss man TextureTransform[0] = <mTransform>; schreiben.

Jetzt kompiliert der Effekt, aber bewegen tut sich trotzdem noch nix :-)

9

28.03.2008, 16:02

Das Problem, dass die Textur sich nicht bewegt, tritt nur bei der Translation, nicht bei der Rotation auf.

Wenn ich eine Rotationsmatrix einsetze funktionierts:

mTexTransform = tbMatrixRotation(tbVector3(0.0f, m_fTime, 0.0f));
mTexTransform = tbMatrixToTex2DMatrix(mTexTransform);
pEffect->SetMatrix("mTransform", (D3DXMATRIX*)(&mTexTransform));

Wenn ich das Gleiche mit einer Translationsmatrix probiere tut sich nix.

mTexTransform = tbMatrixTranslation(tbVector3(0.0f, m_fTime, 0.0f));
mTexTransform = tbMatrixToTex2DMatrix(mTexTransform);
pEffect->SetMatrix("mTransform", (D3DXMATRIX*)(&mTexTransform));

Woran kann das liegen?

10

28.03.2008, 21:08

evtl. liegts dadran, dass du die matrix vorher in ne 3x3 Matrix umänderst, eigentlich aber eine 4x4 erwartet wird?
bei der umwandlung werden ja die translationsdaten in die felder geschrieben, die die z-Koordinate beeinflussen, was sie quasi ausschaltet.

Werbeanzeige