Einzelnen Beitrag anzeigen

XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

DirectX - Vertex beleuchten / umfärben

  Alt 13. Okt 2009, 16:45
Hallo,

ich bin noch immer dabei, mich in DirectX 8 mit Delphi 6 einzuarbeiten.
Bisher hab ich meine Texturen ausschließlich mit Sprites gezeichnet.
Das war relativ einfach und funktioniert inzwischen wunderbar.

Nun hab ich den Schritt zu Vertexen gewagt und komme an einer Stelle nicht weiter.
Es geht darum, diese beim Zeichnen umzufärben. Bei den Sprites habe ich das so realisiert:

Sprite.Draw(Texture, @Source, @Scale, @RotCenter, 0, @Dest, Color); Als Color übergebe ich beispielsweise eine rote Farbe: Color := D3DCOLOR_RGBA(255, 25, 25, 255);
Das Ergebnis sieht man hier:

http://img382.imageshack.us/img382/4100/roty.jpg


Das gleiche möchte ich jetzt bei meinen Vertexen erreichen.
Dass es hier etwas aufwändiger wird als bei den Sprites hab ich schnell gemerkt.
Beim Zeichnen kann meines Wissens nicht mehr so einfach eine Farbe als Parameter an DirectX übergeben werden.

Ich verwende folgende Vertexe:

Delphi-Quellcode:
type
  TMyVertex = record
    X, Y, Z, rhw: Single;
    U, V: Single;
  end;

  TQuadVertex = array [0..3] of TMyVertex;
Gezeichnet habe ich sie bisher so:

Delphi-Quellcode:
  with Device do
  CreateVertexBuffer (SizeOf(TQuadVertex),
                      D3DUSAGE_WRITEONLY,
                      D3DFVF_XYZRHW or D3DFVF_TEX1,
                      D3DPOOL_MANAGED,
                      Quad);

with Quad do
begin
  Lock(0, 0, Vertices, 0);
  Move(DX.Vertex, Vertices^, SizeOf(TQuadVertex));
  Unlock;
end;

with Device do
begin
  SetVertexShader(D3DFVF_XYZRHW or D3DFVF_TEX1);
  SetStreamSource(0, Quad, SizeOf(TMyVertex));
  SetTexture(0, Texture);
  DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
end;
Auch das funktioniert einwandfrei, mein derzeit verwendeter Code bietet mir jedoch keine Möglichkeit, die Textur der Vertexe beim Zeichnen zu verfärben.

Bei meinen Recherchen bin ich u.a. auf die Methode SetMaterial gestoßen und habe ein paar Versuche damit unternommen.
Ich hab ein Material erstellt und ihm einen roten Diffuse, Specular und Ambient Wert zugewiesen.
Das Material hab ich meinem Device zugewiesen und etwas hilflos einige Einstellungen mit SetRenderState durchprobiert.

Leider hat sich an meinen Vertexen nie eine Änderung gezeigt.
Ob das Material meinem Device zugewiesen war oder nicht, hatte überhaupt keine Auswirkung.
Bringt die Zuweisung eines Materials überhaupt etwas, wenn man kein Licht verwendet?
Wie kann ich die Textur meiner Vertexe beim Zeichnen umfärben?

Da ich trotz meiner Bemühungen auf keinen grünen Zweig komme, wollte ich es mal im Forum probieren.
Hat jemand vielleicht ein paar Tipps / Links für mich?
Würde mich sehr darüber freuen!

Gruß an alle
Xoric
  Mit Zitat antworten Zitat