Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Projective Transformation

[es] :: 3D programiranje :: Projective Transformation

[ Pregleda: 3094 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Projective Transformation14.01.2010. u 20:03 - pre 172 meseci
Projective Texturing je tehnika na kojoj trenutno radim.

Razumem kako sve to radi. Projektor je set View i Projection matrice i teksture koja se projektuje na scenu.

Evo dela shader koda:

Code:


uniform extern float4x4  gLightWVP;

// projTex je vertex projektovan na ravan projektora
vertexshader( in float3 posL, out float4 projTex )
{
         projTex = mul( float4( posL, 1.0f ), gLightWVP );

}

pixelshader( in float4 projTex )
{
      projTex.xy /= projTex.w;   // ovde dobijamo koordinate u normalized device sistemu x:[-1, 1], y:[-1, 1], z:[0, 1]

      // ovde koordinate konvertujemo u [0, 1] range zbog texture coordinates
      projTex.x =  0.5f*projTex.x + 0.5f;
      projTex.y = -0.5f*projTex.y + 0.5f;

      // Sample tex w/ projective texture coords.
      float4 texColor = tex2D(TexS, projTex.xy);
}



Ovo je samo deo shadera zbog razumevanja problema. Kada sam poceo da proucavam ovu tehniku shvatio sam da ne znam sta u stvari projection matrica radi. Onda sam poceo da proucavam u detalje matematicke proracune ( danas je vec 3. dan mucenja :) ) ali mi nikako nije jasno sta se tu desava.

Za pocetak me zanima, koje su vrednosti projTex komponenti posle izlaska iz Vertex Shadera, znaci, posle mnozenja sa Projection matricom ( u potpunosti razumem sta se desava kada se vektor pozicije verteksa mnozi sa world i view matricom )

Ono sto sam ja razumeo je da vertex shader 'izbacuje' kooridante u homogenom clip space-u. Homogene koordinate su, koliko mi se cini, n - 1 dimenzija od polaznog sistema sa n dimenzija sto bi otprilike znacilo da se x i y dele sa z, tako da frustum svodimo na kanonicni oblik. Ako je tako, sta je onda w koordinata?


EOF
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
*.guerrilla-games.com.

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Projective Transformation15.01.2010. u 11:01 - pre 172 meseci
Perspektivna transformacija ti transformise frustum iz zarubljene piramide u kocku (-1,-1,-1) (1,1,1). View space prelazi u Clip space.
Transformisani vektor delis sa w komponentom istog, to se zove "perspective divide".
Generalno projektivne teksture se veoma malo razlikuju od obicnog shadow mapping-a.
Tamo gde bi inače bila senka, tu se tekstura ne oslikava - zapravo, možeš da proširiš shadow mapping (ako ga koristiš) i da dobiješ "šarena" svetla.
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
93.86.135.*

ICQ: 208550327


+14 Profil

icon Re: Projective Transformation15.01.2010. u 11:15 - pre 172 meseci
Citat:


Perspektivna transformacija ti transformise frustum iz zarubljene piramide u kocku (-1,-1,-1) (1,1,1). View space prelazi u Clip space.



Ove vrednosti projTex vektor ima kada 'izadje' iz vertex shadera?

Ako je tako, zasto se onda naknadno deli sa w posto je za sledeci proracun:

projTex.x = 0.5f*projTex.x + 0.5f;
projTex.y = -0.5f*projTex.y + 0.5f;

projTex trebao da ima vrednosti x, y: [-1, 1] da bi se pomocu scale+bias transformacije preveo u [0, 1] ?

EOF
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
*.guerrilla-games.com.

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Projective Transformation15.01.2010. u 11:58 - pre 172 meseci
Iz vertex shadera "izlazi" kao homogena koordinata.
Deljenjem sa w prelaziš iz homogenih u Euklidske koordinate.

Citat:
glorius: projTex.x = 0.5f*projTex.x + 0.5f;
projTex.y = -0.5f*projTex.y + 0.5f;

Ovo je OpenGL čini mi se?
Kod OpenGL-a postoji jedna idiotska stvar (eh da je samo jedna) a to je da origin (0,0) nije isti za teksture i render target.
Kada renderujes piksel (0,0) u teksturu, da bi ga procitao moras da koristis (0, 1 - visina teksture) koordinate...
Zato i imaš taj minus za y koordinatu.
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Projective Transformation15.01.2010. u 12:56 - pre 172 meseci
Kod je preuzet iz knjige: Introduction to 3D Game Programming with DirectX 9.0c—A Shader Approach

Mislim da je sve ok jer x i y koordinate projTex imaju opseg [-1, 1] ( posle svih transformacija ) a texCoord mora biti u opsegu [0,1] i zbog toga se transformise na spomenuti nacin. Plus, y koordinata projTex ide 'odozdo na gore' a texCoords se citaju 'odozgo na dole' i zbog toga se y koordinata invertuje. Bar sam ovako ja to sve razumeo.

Ovo prevodjenje iz homogenih u euklidske koordinate ide ovako, koliko sam video:

homogene:
p = (x, y, z w)

euklidske:
pe = (x/w, y/w, z/w, 1)

Projection transformacija prevodi vertex homogene koordinate. Mene zbunjuje ova koordinata w. Kod mnozenja sa Projection matricom x i y komponente se dele sa z da bi se projektovale na ravan. U proracunu ucestvuju jos i FOV ugao i aspect ration i promenljiva n koja predstavlja distancu od oka kamere do ravni na koju projektujemo ( near plane ). Izvodjenjem se dobijaju homogene koordinate.

Razumem izvodjenje do neke tacke ali posle se stvari komplikuju i ne razumem sve do kraja, po malo me zbunjuje nacin na koji je ova knjiga objasnila sta se tu desava.






EOF
 
Odgovor na temu

[es] :: 3D programiranje :: Projective Transformation

[ Pregleda: 3094 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.