OpenGL i kolejność mnożenia macierzy

OpenGL i kolejność mnożenia macierzy
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:2 minuty
0

Zastanawia mnie czemu w OpenGLu stosuje się dziwną, odwróconą (wg mnie) kolejność mnożenia, tzn zamiast intuicyjnego wg mnie działania wektor wierszowy * macierz, stosuje się macierz * wektor kolumnowy. Jest ku temu jakikolwiek powód?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:13 dni
0

Jak na moje to do bardziej intuicyjnych należy macierz * wektor kolumnowy bo jeszcze wygląda ładniej w zapisie:
\begin{bmatrix}<br> 2 &amp; 1 &amp; 0 &amp; 0\<br> 1 &amp; 2 &amp; 1 &amp; 0\<br> 0 &amp; 1 &amp; 2 &amp; 1\<br> 0 &amp; 0 &amp; 1 &amp; 2<br> \end{bmatrix}<br> \begin{bmatrix}<br> 6\7\11\8<br> \end{bmatrix}<br>


Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:2 minuty
0

W OpenGL jeśli np chcę najpierw przesunąć wektor, a potem przeskalować, to muszę napisać (tzn np chcę policzyć od razu końcową macierz, więc ją liczę przed wysłaniem do OpenGLa):

macierz skalowania * macierz przesunięcia * wektor kolumnowy

A dla mnie dalej bardziej intuicyjne byłoby:

wektor wierszowy * macierz przesunięcia * macierz skalowania

No nie?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
1

Zapis macierzwektor_kolumnowy jest standardowy w matematyce. I jest zgodny ze schematem: wpierw operator(funkcja) a potem argument.
Ponadto, jeżeli A jest standardową macierzą przekształcenia liniowego L, a wektor w jest kolumnowy, to L(w)=A
w, gdybyśmy zapisali wektor wierszowo, to L(w)=w*AT.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:2 minuty
0
bo napisał(a)

Zapis macierz*wektor_kolumnowy jest standardowy w matematyce. I jest zgodny ze schematem: wpierw operator(funkcja) a potem argument.

Dzięki. W sumie to nie pomyślałem o tym, żeby traktować macierz jako operator funkcji.

bo napisał(a)

Ponadto, jeżeli A jest standardową macierzą przekształcenia liniowego L, a wektor w jest kolumnowy, to L(w)=Aw, gdybyśmy zapisali wektor wierszowo, to L(w)=wAT.

O tym wiedziałem :)


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.