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

David Mehre

unregistriert

1

30.06.2009, 18:29

DX-Effect: Flaot

Hallo,
ich habe ein kleines Problem mit einem DX-Effect.

Und zwar wollte ich den Alpha-Wert eines Materials per FLOAT-Variable bestimmen. Allerdings stürtzt das Programm dabei immer ab.


Quellcode

1
2
3
4
5
FLOAT fAlphaDiffuse = 1.000f;

// Technik, Pass und andere Kleinigkeiten...
  
MaterialDiffuse     = {1.000f, 0.784f, 0.157f, <fAlphaDiffuse>};


Wenn ich einer anderen Float-Variable diesen Wert zugewiesen habe, hat alles ohne Probleme funktioniert ("MaterialPower = <fAlphaDiffuse>;").

Wie kann ich den Alpha-Kanal der Streufarbe "richtig" per Variable verändern?

Beste Grüße.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »David Mehre« (17.10.2011, 18:05)


TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

30.06.2009, 18:35

wenns hlsl ist (keine ahnung inweiweits bei glsl anders ist) dann machste das einfach so:

Quellcode

1
MaterialDiffuse  = float4(1.0f, 0.784f, 0.157f, fAlphaDiffuse);


wenn materialdiffuse ein float4 ist natürlich ;)[/quote]

David Mehre

unregistriert

3

30.06.2009, 18:41

Das Funktioniert leider auch nicht.

Ich hatte es zuvor auch schon so versucht gehabt:

Quellcode

1
2
3
4
5
FLOAT4 fDiffuse = {1.0f, 0.784f, 0.157f, 1.000f};

// ...

MaterialDiffuse = <fDiffuse>;


und so:

Quellcode

1
2
3
4
5
FLOAT fAlphaDiffuse = 1.000f;

// ...

MaterialDiffuse[3] = <fAlphaDiffuse>;



... aber das ging leider auch nicht :(

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

30.06.2009, 18:51

lass doch mal die doofen spitzen klammern weg!^^

dann sollte dein erstes beispiel im letzten post gehen wenn MaterialDiffuse ein float4 ist.

das zweite sollte so gehen wie ichs gepostet hab!

David Mehre

unregistriert

5

30.06.2009, 18:57

Ich dachte, dass Spitze Klammern beei Variablen Pflicht seien...

Aber ob mit oder ohne Spitzen Klammern, es funktioniert trotzdem nicht.

Anscheinend ist MaterialDiffuse auch nicht vom Typ FLAOT4, denn "MaterialDiffuse = FLOAT4(1.000f, 0.784f, 0.157f, 1.000f);" funktionirt auch nicht.

6

30.06.2009, 19:11

Warum verwendest du dann nicht float4?


So in etwa:

C-/C++-Quelltext

1
2
3
4
float3 MaterialDiffuse  = {0.5f, 0.5f, 0.5f};
float AlphaVal = 0.5;   

float4 EndColor = float4(MaterialDiffuse, AlphaVal);
fka tm

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

30.06.2009, 19:11

na dann schau in dem effekt doch mal nach was material-diffuse ist ;). meine wird ja kein fragment-shader sein.
ausserdem was sagt der shader-debugger? das würde mehr helfen als "geht nicht" :)

David Mehre

unregistriert

8

30.06.2009, 21:01

Zitat

na dann schau in dem effekt doch mal nach was material-diffuse ist ;). meine wird ja kein fragment-shader sein.
ausserdem was sagt der shader-debugger? das würde mehr helfen als "geht nicht" :)


MaterialDiffuse ist die Streufarbe des Materials des Meshs und laut MSDN] vom Type float4 (http://msdn.microsoft.com/en-us/library/…Material_States).
Was ist ein Shader-Debugger?

Ich zeige euch mal den ganzen Effekt...:

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
// Dieser Effekt wurde automatisch vom TriBase-Tool ModelConverter generiert.
// Hinweis: um einen Tabulator einzufügen, drücken Sie <Strg+Tab>!

DWORD NumTextures = 0;
LOAT fDiffuseAlpha = 1.000f;

TECHNIQUE T1
{
    PASS P1
    {
        // Es gibt keine Textur - Farbe kommt aus der Streufarbe!
        // Wenn Sie doch eine benutzen, ändern Sie "SelectArg2" in "Modulate" um!
        Texture[0]          = NULL;
        ColorOp[0]          = SelectArg2;
        ColorArg1[0]        = Texture;
        ColorArg2[0]        = Current;

        // 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     = {1.000f, 0.784f, 0.157f, fDiffuseAlpha);
        MaterialAmbient     = {1.000f, 0.784f, 0.157f, 0.000f};
        MaterialEmissive    = {0.000f, 0.000f, 0.000f, 0.000f};
        MaterialSpecular    = {0.898f, 0.898f, 0.898f, 0.000f};
        MaterialPower       = 10.000f;

        SpecularEnable      = True;
    }
}


Tut mir Leid, aber es ist das erste Mal, dass ich selbst versuche, mit Effekten umzugehen...

Gruß.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »David Mehre« (17.10.2011, 18:05)


9

30.06.2009, 21:12

Was ist das denn:

Quellcode

1
LOAT fDiffuseAlpha = 1.000f; 


Wo ist das "F" geblieben?

Zum Testen der Shader würde ich dir ein Tool wie FX Composer empfehlen.
fka tm

10

30.06.2009, 22:41

Das ist kein Shader (HLSL), sondern ein DX Effekt (soweit ich weiß eine Art Skriptsprache zur Steuerung der FFP).
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige