2014-06-20 9 views
6

Zasadniczo mam dwa trójkąty, które wyglądają nieco inaczej (jak na przykład problem z oświetleniem z powodu nieprawidłowych normaliów). Ale nie sądzę, jest to przypadek ...Renderowanie wielokątów w ramce w/normalnych pokazujących dziwne oświetlenie/kolorowanie

Szczegóły

mam prosty sześcian (karton), gdzie każda powierzchnia składa się z 6 wierzchołków stosując bufor wierzchołków (nie używam bufor indeksu w tej chwili).

Oprócz swoich wierzchołków zdefiniowałem normalne wartości dla każdej twarzy.

Wygląda jednak na to, że coś jest nie tak z normalnymi (czego nie sądzę, że jest problem) i/lub oświetleniem.

enter image description here

Każda powierzchnia jest narysowany WebGl.drawArrays pomocą TRIANGLE_STRIP. Obraz przedstawia przednią ścianę sześcianu. Oto jego wierzchołki (zauważ, że pochodzenie jest lewy górny róg przedniej):

  0, 1, 0, 
      0, 0, 0, 
      1, 0, 0, 

      1, 0, 0, 
      1, 1, 0, 
      0, 1, 0 

Oto jego normalne:

  0, 0, 1, 
      0, 0, 1, 
      0, 0, 1, 

      0, 0, 1, 
      0, 0, 1, 
      0, 0, 1 

pytanie

Jakieś pomysły, dlaczego pierwszy trójkąt jest jaśniejszy niż drugi trójkąt?

+0

To najprawdopodobniej nie rozwiąże problemu, ale powinieneś użyć TRIANGLES zamiast TRIANGLE_STRIP, jeśli masz 6 wierzchołków na twarz. Aby użyć TRIANGLE_STRIP potrzebujesz 4 wierzchołki, z twojej tablicy będą to 1., 2., 3. i 5. linia. Spróbuj to naprawić, ponieważ teraz rysujesz 4 trójkąty na twarz zamiast 2. –

+0

Pokaż nam kod odpowiedzialny za rysowanie tablic. Mimo że normalne dane mogą wydawać się poprawne, może się zdarzyć, że dane przekazywane do modułu cieniującego są błędne. Udostępnij trochę więcej kodu, ponieważ mógłbym postawić moje pieniądze na złe, normalne dane. – Elvithari

+0

@Matic. Zastanowię się nad trójkątami. Używam tego, ponieważ chcę, aby moja kostka wyglądała jak ramka krawędziowa przy użyciu LINE_STRIP (bez ukośnych linii). – AlvinfromDiaspar

Odpowiedz

1

Sztuczka z paskiem trójkąta polega na tym, że każdy dodatkowy trójkąt otrzymuje jeden dodatkowy wierzchołek, ale trzy normalne wektory. Zgaduję, że nie określasz wystarczająco normalnych wektorów lub określasz zbyt wiele wierzchołków.