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

21.09.2004, 18:30

Direct 3D Effekte

ich wollte ein bischen Effektsupport einbauen, doch jetzt tut sich folgende Frage auf: Gibt es eine einfache Möglichkeit, die Effekte so zu gestalten, das sie universel sind? Ich meine wenn man eine Textur verändern will, braucht man ja deren Namen, also muss der dann in jedem Effekt gleich sein.oder wenn ich Enviromentmapping einbauen will, brauch ich ja ne Würfeltextur, muss ich dann schon im Programm vorsehen, das ein Effekt Möglicherweise eine solche benötigt, dann jedem Effekt eine Variabl geben, die besagt ob er eine braucht, und eine Variable die evtl. den Namen beinhaltet?

Achja, man kann ja z. B. fTime dem Effekt als Variable geben. Nur was fängt der damit an? Wenn ich jetzt z. B: per Multitexturing die obere Schich nach fTime bewegen möchte, brauch ich doch eine Texturmatrix mit fTime. Bloß wie mach ich die, ich kann doch bestimmt nicht "CreateTransformMatrix(fTime)" oder ähnliches aufrufen.

und wenn ich Matrizen erstellen kann, könnt ich dann auch das Beispiel mit dem Wellenwasser in einen Effekt packen? Oder geht das wegen den Sinusfunktionen nicht?
Lieber dumm fragen, als dumm bleiben!

2

21.09.2004, 21:52

Ich hab mal versucht die Texturkoordinaten anhand einer Matrix mit fTime die Textur zu verschieben. Im Buch stand, man könne damit schöne Effekte machen. Es ging aber nicht und ich glaub ich weiß auch warum: Man kann keiner Variable den Wert einer anderen Variable zuweisen.
Das bedeutet, das ich gar keine Matrix mit fTime erstellen kann (ich habs an Hand einer einfachen Translation versucht, wird jaim Buch erklärt)
Das einzige was dann wohl geht, währedie Transformationsmatrix von dem Programm erstellen zu lassen und dem Effekt zuzuweisen. Das macht aber keinen Sinn, da man so keinen Einfluss daraf hat, also sollte das Programm die Matrix lieber selbst setzten und nicht den Effekt damit belasten, da dieser and der Matrix ja eh nichts ändern kann.

Ich bin mir nicht sicher ob sowas im Buch vorgeschlagen wurde, kann auch sein das es vom Multitxturing kommt, das war nämlich mein erster Effekt.

Also wenn das mit Effekten offensichtilich nicht geht, welche möglichkeiten gibt es dann noch für Modelle solche Sachen zu benutzen. Es wäre ja gut, wenn mehrere Texturschichten, die auch bewegt werden auch als Modell speicherbar wären, damit man das nicht immer extra implementiern muss.
Lieber dumm fragen, als dumm bleiben!

MannyDasMammut

Treue Seele

Beiträge: 76

Wohnort: Baden - Würtemberg / Achern

Beruf: Schüler

  • Private Nachricht senden

3

13.01.2005, 21:39

Tuh mal nicht so

Also ersten gibt es etwas wie Texturfactor und Texturtransformationsmatrizen. Genau wie die Weltmatrix. Diese Matrizen kann man per Renderstates werte zuweißen. also geht das doch mit fTime.

Des weiteren kann man in Effekte Vertex und Pixelshader verwenden und diese entweder per HLSL oder per Assembler einbauen dann setzt man fTime als Shaderkonstante und kann dann die texturkoordinaten damit transformieren.

Shaderassemblercode:

mov r0.xy,v7.xy
add r0.xy,r0.xy,c0.xx
mov oT0.xy,r0.xy

Erklärung:

Zurerst kopier ich die Texturkoordinaten aus V7 in ein temporäres register weil v7 nr read-only ist. dann addier ich zu r0,c0 dies hab ich geswizzelt weil nur in der X Komponente der Shaderkostante fTime steht. und dann kopier ich wieder r0.xy, in oT0.xy

Das ist die Texturkoordinate des Stages 0 das o teht für output. Es handelt sich bei oT0 also umd as Ausgabe register des Vertexshaders für die Texturkoordinate des Stages 0
Werde ich hier eigentlich noch gebrauch ansonsten würd ich gerne nach Hause gehen und meine graue Wand anstarren.

Werbeanzeige