[ Sasha++ @ 16.06.2004. 21:27 ] @
Pozdrav

Poceo sam da ucim vertex i pixel shadere, pa bih postavio jedno pitanje u vezi per-pixel lighting-a

Da li je moguce obaviti ppl uz pomoc depth buffer-a (Z, W)?
Zamislio sam to ovako:

za svaki pixel izracunava se tacka u world-u koju u stvari predstavlja (iscrtava) taj pixel, uz pomoc Unproject funkcije i depth vrednosti pixel-a,
izracunava se attenuation nekog svetla (point) u toj tacki i dobija se "uticaj" tog svetla u toj tacki (attenuation*diffuse itd.)
taj "uticaj" se zatim mnozi sa bojom pixela

E sad, da li je to moguce smestiti u pixel shader, i kako bi to otprilike izgledalo?
svetla su iskljucivo POINT
da napomenem, u pitanju je DX/C++
[ Reljam @ 17.06.2004. 00:36 ] @
Naravno da jeste! :)

To se radi tako sto u vertex shaderu napravis kopiju pozicije i smestis je u neki od TEXCOORDova - sam POSITION ne mozes da citas iz pixel shadera. U stvari, ovo je jos i bolje, jer mozes direktno da citas poziciju pixela, ne treba ti cak ni Unproject.

Konkretno:

Code:

struct VS_OUT
{
    float4 realPos : POSITION;
    ...
    float4 pos : TEXCOORD3;
};

VS_OUT MojVertexShader()
{
    VS_OUT o;

    // ovde izracunaj sve sto ti treba, ukljucujuci i poziciju koja ide u realPos;

    o.pos = o.realPos;

    return o;
}

float4 MojPixelShader(VS_OUT in) : COLOR
{
    // ovde mozes da citas in.pos i da na osnovu toga racunas sta god hoces :)
    ...
}


Da li si na beti? Novi SDK samo sto nije izasao.
[ Sasha++ @ 18.06.2004. 18:02 ] @
Hvala!

Ono sto sam ja hteo je u stvari Phong shading, to vec ima na jednom od topica