Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



gl_NormalMatrix

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: gl_NormalMatrix

Autor: Eosie

15:24:34 13.01.2009

> Rata sa normal matrix takto?:
> M.GetInverse().GetTranspose().GetUpperLeft3x3()

Ano.

> M.GetUpperLeft3x3().GetInverse().GetTranspose()

Mám takové tušení, že i tak by to šlo počítat. Normal matrix je totiž vůči translaci invariantní.

> Alebo to staci robit bez toho vybrania 3x3 a
> nechat to ako 4x4 a potom v shaderi robit iba
> (NormalMatrix * vec4(gl_Normal, 0.0)).xyz?

Ano, stejné jako první řešení.

Poznámky:
- Normal matrix se používá jen u vektorů kolmých na polygon, nikoliv na tečné vektory!
- Inverze znamená invertuj rotaci a scale. Transpose znamená invertuj rotaci. Výsledkem je pouze invertovaný scale. Důvod: Nerovnoměrný scale totiž v určitém smyslu může orotovat polygon. Normála se musí pomocí scalu orotovat v opačném směru, aby zůstala kolmá na polygon, proto je potřeba ten invertovaný scale.
- Normal matrix musíš použít jen tehdy, když používáš nerovnoměrný scale (scaleX, scaleY, scaleZ).
- Pokud používáš jen translaci, rotaci nebo rovnoměrný scale (scaleX = scaleY = scaleZ), nemusíš se tím vůbec zabývat a můžeš použít modelview matrix namísto normal matrix.
- Při scalu je potřeba normály normalizovat.

Citovat příspěvek

 

gl_NormalMatrix

Autor: michalferko

11:52:30 13.01.2009

Zdravim, mam zopar nejasnosti ohladom GLSL a normal matrix.
Rata sa normal matrix takto?: M.GetInverse().GetTranspose().GetUpperLeft3x3()
Alebo takto: M.GetUpperLeft3x3().GetInverse().GetTranspose()
pricom M je modelview matica.
Alebo to staci robit bez toho vybrania 3x3 a nechat to ako 4x4 a potom v shaderi robit iba (NormalMatrix * vec4(gl_Normal, 0.0)).xyz?

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: