Razumem kako sve to radi. Projektor je set View i Projection matrice i teksture koja se projektuje na scenu.
Evo dela shader koda:
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?