2012-07-25 18 views
32

Obecnie studiuję oświetlenie w OpenGL, które wykorzystuje funkcję GLSL zwaną normalize. Według dokumentów OpenGL mówi, że "oblicza znormalizowany iloczyn dwóch wektorów". Jednak nadal nie wyjaśnia, co oznacza "znormalizowany". Próbowałem sprawdzić, jaki znormalizowany produkt jest w Google, ale nie mogę niczego na ten temat znaleźć. Czy ktoś może wyjaśnić, co oznacza normalizacja i podać kilka przykładów znormalizowanej wartości?Co to znaczy znormalizować wartość?

+0

gdzie to znalazłeś? W specyfikacji glsl jest: normalize (genType x) - Zwraca wektor w tym samym kierunku co x, ale o długości 1. http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8 .pdf – fen

+0

Tutaj, myślę, że to była pierwsza rzecz, która pojawiła się, gdy googlełem. http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml – TheAmateurProgrammer

+0

dziwne ... ale w opisie jest odpowiednia informacja. – fen

Odpowiedz

13

Jest to termin matematyczny i this link wyjaśnia jego znaczenie w dość prosty sposób:

Operacje w 2D i 3D grafiki komputerowej są często wykonywane przy użyciu kopii wektorów, które zostały znormalizowane IE. przekształca się wektor jednostkowy ... Normalizacja wektor składa się z dwóch etapów:

  1. obliczyć jego długość, a następnie,
  2. podziału każdego z jego (xy lub xyz) Składniki przez jego długości ...
39

Myślę, że zamieszanie pochodzi z idei normalizacji "wartości" w przeciwieństwie do "wektora"; jeśli uważasz, że jedna wartość jest wartością, normalizacja nie ma sensu. Normalizacja jest użyteczna tylko wtedy, gdy zostanie zastosowana do wektora.

Wektor to ciąg cyfr; w grafice 3D jest to zwykle współrzędna wyrażona jako v = <x,y,z>.

Każdy wektor posiada wielkości lub długość, które można znaleźć za pomocą twierdzenia Pythagora za: |v| = sqrt(x^2 + y^2 + z^2) Jest to w zasadzie długość linii od punktu początkowego do punktu <0,0,0> wyrażona przez wektor.

Wektor to normalny, jeśli ma długość 1. To wszystko!

Aby znormalizować wektor, należy go zmienić tak, aby wskazywał kierunek w tym samym kierunku (myśl o tej linii od początku), ale jego długość wynosi jeden.

Głównym powodem, dla którego używamy normalnych wektorów, jest przedstawienie kierunku; na przykład, jeśli modelujesz źródło światła w nieskończonej odległości, nie możesz podać dokładnych współrzędnych dla niego. Ale możesz wskazać, gdzie można go znaleźć z określonego punktu za pomocą normalnego wektora.

+1

Normalizacja rzeczywiście ma sens dla pojedynczej wartości. Tak właśnie działa znak (x). – Jessy

+0

@Jessy Wystarczająco fair, ale jest o wiele mniej interesujący/mylący niż przypadek 3-wektorowy. – benzado

+0

Prawdopodobnie. Myślę, że to pomaga zrozumieć tę koncepcję. Na przykład, myślę, że warto sobie wyobrazić przyjęcie produktu kropki znormalizowanego wektora "n> 1" i "znormalizowanego 1-wektorowego". Możesz sobie wyobrazić, jak wkłady innych wymiarów nie wpływają na kąt między wektorami. Obowiązuje tylko wymiar pasujący do wektora 1-wektorowego. – Jessy