Najzad! Posle toliko cekanja nove graficke ( tj. celog kompa ) X800GT najzad mogu da koristim shadere ( doduse, ne SM 3.0 ali za sada je i ovo dovoljno).
Poceo sam sa CG-om jer mi je on nekako "najcistiji".
Naravno, tu dolaze i prvi problemi.
Verovatno je neko radio one primere iz nVidijinog Toolkit-a ili neki Simple Lighting tutorial.
Sta je u stvari eyePosition koji se koristi u light shaderima. Da li je to pozicija kamere, mada je u svim tutorijalima stavljaju kao konstantnu vrednost ( npr. (0, 0, 1) ) ( cak stave i da je (0, 0, 0) a u gluLookAt stave (0, 10, 30, ..... ) ). Cini mi se da nije target svetla posto bi ono trebalo da je Point light.
Takodje, ne razumem zbog cega se pozicija vertexa transformise sa ModelViewProjection matricom? Logicnije mi je (za sada) da to bude potrebno za Fragment shader.
Oguglao sam po netu trazeci primere. Pored www.nVidia.com i www.cgshaders.com nisam nasao vise nikakve tutoriale koji bi mi pomogli da "svarim" ove pocetnicke stvari. Znate li jos neke linkove?
Poceo sam sa CG-om jer mi je on nekako "najcistiji".
Naravno, tu dolaze i prvi problemi.
Verovatno je neko radio one primere iz nVidijinog Toolkit-a ili neki Simple Lighting tutorial.
Sta je u stvari eyePosition koji se koristi u light shaderima. Da li je to pozicija kamere, mada je u svim tutorijalima stavljaju kao konstantnu vrednost ( npr. (0, 0, 1) ) ( cak stave i da je (0, 0, 0) a u gluLookAt stave (0, 10, 30, ..... ) ). Cini mi se da nije target svetla posto bi ono trebalo da je Point light.
Code:
struct vertex
{
float4 position : POSITION;
float4 normal : NORMAL;
float4 color0 : COLOR0;
};
struct fragment
{
float4 position : POSITION;
float4 color0 : COLOR0;
};
fragment main( vertex IN,
uniform float4x4 modelViewProjection,
uniform float4x4 modelViewInverse,
uniform float4 eyePosition,
uniform float4 lightVector )
{
fragment OUT;
OUT.position = mul( modelViewProjection, IN.position );
//OUT.position = mul( glstate.matrix.mvp, IN.position );
// Transform normal from model-space to view-space
float4 normal = normalize( mul( modelViewInverse, IN.normal ).xyzz );
// Store normalized light vector
float4 light = normalize( lightVector );
// Calculate half angle vector
float4 eye = eyePosition;
float4 half = normalize( light + eye );
// Calculate diffuse component
float diffuse = dot( normal, light );
// Calculate specular component
float specular = dot( normal, half );
specular = pow( specular, 32 );
// A little ambient color
float4 ambientColor = float4( 0.2, 0.2, 0.2, 0.2 );
// White specular
float4 specularMaterial = float4( 1.0, 0.0, 0.0, 1.0 );
// Combine diffuse and specular contributions and output final vertex color
OUT.color0 = diffuse * IN.color0 + specular * specularMaterial + ambientColor;
return OUT;
}
struct vertex
{
float4 position : POSITION;
float4 normal : NORMAL;
float4 color0 : COLOR0;
};
struct fragment
{
float4 position : POSITION;
float4 color0 : COLOR0;
};
fragment main( vertex IN,
uniform float4x4 modelViewProjection,
uniform float4x4 modelViewInverse,
uniform float4 eyePosition,
uniform float4 lightVector )
{
fragment OUT;
OUT.position = mul( modelViewProjection, IN.position );
//OUT.position = mul( glstate.matrix.mvp, IN.position );
// Transform normal from model-space to view-space
float4 normal = normalize( mul( modelViewInverse, IN.normal ).xyzz );
// Store normalized light vector
float4 light = normalize( lightVector );
// Calculate half angle vector
float4 eye = eyePosition;
float4 half = normalize( light + eye );
// Calculate diffuse component
float diffuse = dot( normal, light );
// Calculate specular component
float specular = dot( normal, half );
specular = pow( specular, 32 );
// A little ambient color
float4 ambientColor = float4( 0.2, 0.2, 0.2, 0.2 );
// White specular
float4 specularMaterial = float4( 1.0, 0.0, 0.0, 1.0 );
// Combine diffuse and specular contributions and output final vertex color
OUT.color0 = diffuse * IN.color0 + specular * specularMaterial + ambientColor;
return OUT;
}
Takodje, ne razumem zbog cega se pozicija vertexa transformise sa ModelViewProjection matricom? Logicnije mi je (za sada) da to bude potrebno za Fragment shader.
Oguglao sam po netu trazeci primere. Pored www.nVidia.com i www.cgshaders.com nisam nasao vise nikakve tutoriale koji bi mi pomogli da "svarim" ove pocetnicke stvari. Znate li jos neke linkove?
Potpis
EOF