Warsztat.GDCompo!ProjektyMediaArtykułyQ&AForumOferty pracyPobieranie

Opisz napotkaną sytuację, a redakcja niezwłocznie znajdzie rozwiązanie!

wyślij anuluj

Nic nie widać

Tekst został importowany z Warsztatowej wiki. Jeżeli został importowany poprawnie, usuń ten szablon!

Nic nie widać i nikt nie wie dlaczego - to chyba największa zmora początkującego programisty gier - niezależnie, której z bibliotek do grafiki 3D używasz. Ileż to razy bywało tak, że na ekranie nie pojawiał się obraz, który powinien się pojawić i trudno było znaleźć błąd, bo przyczyn takiego stanu rzeczy jest cała masa. Spróbujmy wypisać te przyczyny!

Czarno

Po pierwsze, ustaw tło na jakiś kolor inny niż czarny - np. na szary albo niebieski. Być może twoja geometria renderuje się, tylko że na czarno. To bardzo częsty błąd, zwłaszcza jeśli masz włączone oświetlenie (a jest włączone domyślnie), a nie ustawiłeś świateł.

Macierze

Czy dobrze ustawiłeś wszystkie macierze - świata (world), widoku (view) i rzutowania (projection)? Czy utworzyłeś je dobrymi funkcjami? Czy kamera na pewno jest w dobrym miejscu i patrzy w dobrym kierunku? Czy może obiekt jest dokładnie w miejscu kamery albo z tyłu, za kamerą, która patrzy w przeciwnym kierunku?

Pozycja

Czy wielkość i pozycja obiektu jest dobra? Czy obiekt nie jest za blisko lub za daleko w stosunku do ustawionych w macierzy rzutowania minimalnych i maksymalnych odległości Z? Czy nie jest za mały, aby można go było dostrzec?

Błędy

Czy funkcje renderujące kończą się powodzeniem? Czy w ogóle sprawdzasz zwracany przez nie kod błędu?

Format wierzchołka

Czy używasz poprawnego formatu wierzchołka? Czy dobrze zdefiniowałeś strukturę opisującą wierzchołek w stosunku do wybranego formatu wierzchołka FVF? Czy pola są w odpowiedniej kolejności i odpowiedniego typu? Czy informujesz DirectX, jakiego formatu używasz wywołując funkcję SetFVF urządzenia przed renderowaniem?

Wywołanie renderowania

Czy do funkcji renderujących przekazujesz poprawne parametry? Wszelkie offsety w najprostszym przypadku powinny wynosić 0, a "stride" to rozmiar jednego wierzchołka w bajtach, czyli sizeof(MY_VERTEX). Czy podajesz poprawną liczbę prymitywów do wyrenderowania?

Bufory

Czy dobrze wypełniasz bufory wierzchołków i ewentualnie indeksów? Czy mają one właściwą ilość elementów? Czy wypełniasz wszystkie pola? Jeśli używasz współrzędnych przetransformowanych XYZRHW, składową RHW ustawiaj na 1.0, nigdy na 0.0.

Kanał alfa

Być może twoja geometria jest całkowicie przezroczysta. Czy wartość kanału alfa, tak w wierzchołku, w teksturze jak i w materiale (ten ostatni o ile używasz świateł) masz ustawioną na maksimum (0xFF czy 1.0 zależnie od typu), a nie minimum?

Backface culling

Być może rysowane trójkąty są przez kartę ignorowane jako leżące "tyłem" do kamery, ponieważ mają kolejne wierzchołki zorientowane w niewłaściwą stronę (zgodnie lub przeciwnie do ruchu wskazówek zegara). Spróbuj wyłączyć backface culling.

Stany

Czy dobrze poustawiałeś mieszanie (blending) na wszystkich jednostkach teksturujących (poziomach tekstur - texture stages)? Czy dobrze poustawiałeś pozostałe stany biblioteki graficznej? Być może problem pojawia się tylko kiedy rysujesz różne rzeczy w określonej kolejności - wówczas prawdopodobnie stany ustawiane do jednego renderowania rzutują na inne.

Zaawansowane efekty

Jeśli używasz zaawansowanych technik grafiki 3D, twoja karta może ich nie obsługiwać. Wtedy ustaw referencyjny rasteryzer programowy podczas tworzenia urządzenia (D3DDEVTYPE_REF zamiast HAL). Program będzie oczywiście strasznie się ciął, ale przynajmniej wszystko będzie rysowanie tak, jak chcesz. Możliwości swojej karty sprawdź w DirectX za pomocą device caps.

Z-buffer

Jeśli używasz buffora głębokości Z pamiętaj o wyczyszczeniu również i jego. W trzecim argumencie funkcji Clear dodaj bitowo D3DCLEAR_ZBUFFER. Bez tego nie ujrzysz nic na ekranie bądź ujrzysz artefakty. Wartością, na jaką należy czyścić Z-bufor jest 1.0f (nie 0.0f).

Zobacz też

* [http://dmalcolm.livejournal.com/2433.html How not to render 3D graphics: 40 ways to get a blank black screen]

Tekst dodał:
WarsztatBOT
26.04.2009 12:35

Ostatnia edycja:
WarsztatBOT
26.04.2009 12:35

Kategorie:

Aby edytować tekst, musisz się zalogować.

# Edytuj Porównaj Czas Autor Rozmiar
#1 edytuj 26.04.2009 12:35 WarsztatBOT 4.24 KB
Zwykły
Do sprawdzenia
Do akceptacji
  • Napisz komentarz:
    Aby dodać swój komentarz, musisz się zalogować.
Licencja Creative Commons

Warsztat używa plików cookies. | Copyright © 2006-2017 Warsztat · Kontakt · Regulamin i polityka prywatności
build #ff080b4740 (Tue Mar 25 11:39:28 CET 2014)