Managed » Direct3D

3. Wyświetlanie figur płaskich na ekranie

  • 2009-05-05 17:24
  • 2 komentarze
  • 1545 odsłon
  • Oceń ten tekst jako pierwszy
Spis treści

     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.

Okno aplikacji z kwadratem z wierzchołków ekranowych
<center>Rys. 1. Okno aplikacji z kwadratem z wierzchołków ekranowych</center>

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 (4,94 KB)

2 komentarze

Szczawik 2009-04-06 17:00

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

rosol88 2009-04-05 13:54

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??