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ść?
Odpowiedz
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:
- obliczyć jego długość, a następnie,
- podziału każdego z jego (
xy
lubxyz
) Składniki przez jego długości ...
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.
Normalizacja rzeczywiście ma sens dla pojedynczej wartości. Tak właśnie działa znak (x). – Jessy
@Jessy Wystarczająco fair, ale jest o wiele mniej interesujący/mylący niż przypadek 3-wektorowy. – benzado
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
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
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
dziwne ... ale w opisie jest odpowiednia informacja. – fen