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

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

1

19.05.2014, 17:24

DX11 Effekt variable für mehrere Effekte benutzen. geht das?

Hallo zusammen

Ich hätte mal eine Frage zu Effekten und deren Variablen in Dx11.
Wenn ich bsw. die Welt Matrix an einen HLSL Effekt übergeben möchte, dann tue ich das so. oder?

C-/C++-Quelltext

1
2
3
4
5
6
XMMATRIX                         WORLD;
ID3DX11EffectVariable*      fxWorld;

fxWorld->SetMatrix(reinterpret_cast<float*>( &WORLD));

fxWorld = mFx->GetVariableByName("g_World")->AsMatrix();


nun zu meine Frage.
Ist es möglich, dass ich diese Variable auch an mehren Shader Übergeben kann, so dass alle darauf zugreifen?

Beispielsweise so

C-/C++-Quelltext

1
2
3
fxWorld = mFx1->GetVariableByName("g_World")->AsMatrix();
fxWorld = mFx2->GetVariableByName("g_World")->AsMatrix();
fxWorld = mFx3->GetVariableByName("g_World")->AsMatrix();

Ich Weiß, dass so eine Situation selten ist, jedoch nicht unmöglich.
gibt es einen Ausweg?

Ich habe das auch ausprobiert, Logischerweise kann nur mFx3 darauf zugreifen. Die restliche Effekt haben keinen Zugriff.

Danke im voraus.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

19.05.2014, 17:30

GetVariableByName? Was genau möchtest Du, was ein get tun soll?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

3

19.05.2014, 17:40

Ich verstehe deinen Frage nicht so ganz.

Ich wollte eigentlich nur wissen, wie mehrere Effekte auf eine Variable zugreifen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

19.05.2014, 17:43

Und ich frage mich, wie Du mit "get" etwas übergeben willst. Ich denke, dass Dir scheinbar noch nicht so ganz klar ist, wo eigentlich die Werte an den Shader übergeben werden und versuche nun Deinen Denkprozess anzustoßen, damit Du selbst darauf kommst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

5

19.05.2014, 17:46

achso.

Die Funktion "GetVariableByName" gibt eine Zeiger vom Typ "ID3DX11EffectVariable". Dieser wird vom Shader als "Datenquelle" benutzt.

So Steht es ungefähr in meinem Buch.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

19.05.2014, 17:47

Nun ja, aber wo wird denn nun der Wert in die Variable reingesetzt? Und dann hast Du auch die Lösung auf Deine Frage.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

7

19.05.2014, 17:51

Du meinst mit

C-/C++-Quelltext

1
fxWorld->SetMatrix(reinterpret_cast<float*>( &WORLD));

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

19.05.2014, 17:53

Jaa, genau. Ist dir jetzt auch klar, warum nur ein Shader seine Variable korrekt gesetzt bekommt? Ich meine, immerhin rufst Du ja schließlich auch nur ein einziges "set" auf.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

9

19.05.2014, 17:59

Ok. Stell die mal vor.

Du hast ein Modellklasse. Jedes Modell besteht aus verschiedenen "untergeordneten Modelle" (Materialien).
Jedes Material hat einen eigenen Shader/Texture/MaterialInfos. Jedoch hat jedes Material die Identische WeltMatrix.
Wie würde man es regeln, das alle Shader die selbe Welt Matrix bekommen?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

19.05.2014, 18:07

Kleiner Hinweis:

C-/C++-Quelltext

1
2
3
4
fxWorldAusShader1 = mFx1->GetVariableByName("g_World")->AsMatrix();
fxWorldAusShader2 = mFx2->GetVariableByName("g_World")->AsMatrix();
fxWorldAusShader3 = mFx3->GetVariableByName("g_World")->AsMatrix();
fxWorldAusShader3 ->SetMatrix(reinterpret_cast<float*>( &WORLD));

Komm, so langsam muss doch der Groschen fallen ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige