3. Wyświetlanie figur płaskich na ekranie

Szczawik

1 Wstęp
2 Definiowanie wierzchołków
3 Renderowanie
4 Kod źródłowy

Wstęp

W kroku 2. Uruchamianie urządzenia i renderowanie stworzyliśmy pierwszą aplikację renderującą w DirectX. Co prawda dokonywała ona prezentacji sceny, jednak owe scena nie składała się z żadnych obiektów. Teraz do aplikacji dodamy wyświetlanie ekranowego trójkąta.

W Direct3D wszystkie bryły są opisane za pomocą współrzędnych ekranowych (transformed - uznanych za już przekształcone) lub przestrzennych (positioned - wymagających transformacji). Bryły ekranowe są opisane przy pomocy współrzędnych ekranu i nie ulegają przekształceniom przestrzeni 3D. Dzięki temu doskonale nadają się do prezentacji elementów interfejsu użytkownika.

W tym przykładzie postaramy się rozbudować aplikację w taki sposób, aby renderowała kolorowy kwadrat: określony zostanie kolor każdego z wierzchołków, a powierzchnia kwadratu zostanie potraktowana jako gradient.

d3dkurs3.jpg
Rys. 1. Okno aplikacji z kwadratem z wierzchołków ekranowych

Definiowanie wierzchołków

Do klasy TDirectX dodajmy pole prywatne:

CustomVertex.TransformedColored[] vertex;

Będzie to tablica czterech wierzchołków kwadratu. Wypełnijmy ich opis w funkcji Initialize. Ponieważ jako typ wierzchołków wybraliśmy wierzchołki ekranowe, opisane kolorem (polecam poznanie innych możliwości), musimy podać współrzędne X, Y, Z (przy wierzchołkach ekranowych - warstwa), RHW (reciprocal homogenous W; współczynnik skalowania, zwykle równy 1) oraz kolor. Poniżej zaprezentowano uzupełnianie współrzędnych na dwa sposoby: przy pomocy uzupełniania współrzędnych indywidualnych oraz przez zdefiniowanie wektora (X, Y, Z, RHW).

/// <summary>
/// Tworzenie wszystkich elementów sceny
/// </summary>
private void Initialize()
{
    vertex = new CustomVertex.TransformedColored[4];
 
    vertex[0].Color = Color.Red.ToArgb();
    vertex[0].X = 0;
    vertex[0].Y = 0;
    vertex[0].Z = 0;
    vertex[0].Rhw = 1;
 
    vertex[1].Color = Color.Green.ToArgb();
    vertex[1].X = 64;
    vertex[1].Y = 0;
    vertex[1].Z = 0;
    vertex[1].Rhw = 1;
 
    vertex[2].Color = Color.Blue.ToArgb();
    vertex[2].Position = new Vector4(0, 64, 0, 1);
 
    vertex[3].Color = Color.Yellow.ToArgb();
    vertex[3].Position = new Vector4(64, 64, 0, 1);
}

Renderowanie

Renderowanie brył ekranowych jest możliwe na kilka sposobów. Najprostszym jest określenie formatu wierzchołków i wykreślenie brył na ich podstawie.
TriangleStrip to typ figury bazowej, w której pierwsze trzy wierzchołki tworzą trójkąt, a każdy następny tworzy nowy trójkąt z dwoma poprzednimi wierzchołkami.

device.VertexFormat = CustomVertex.TransformedColored.Format;
device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, vertex);

Kod źródłowy

Całość kodu źródłowego projektu: d3dkurs3_(poprawiony).zip

2 komentarzy

Blad byl w kodzie kursu. Dzieki za zwrocenie uwagi. Teraz powinno byc dobrze - jesli wciaz cos bedzie nie tak, dajcie znac.

u mnie pojawia sie czarny kwadrat a nie kolorowy. Sciagnalem tez kod zrodlowy i kwadrat tez jest czarny. nie wiem czy to blad w kursie czy cos nie tak u mnie z kompem??