per pixel ljussättning i en 2d värld

Permalänk

per pixel ljussättning i en 2d värld

Hej,
jag håller på med ett litet spelprojekt och har börjat försöka få lite fin ljussättning i det nu.

Jag har skrivit ihop en enkel shader i glsl och den fungerar bra i ShaderDesigner men när den ska in i min 3dvärld så blir allting bara svart :/ Värt att veta är väl att jag använder Orthomode.

Finns det någon här inne som vet vad som kan vara problemet eller kanske tillochmed har en helt annan lösning. Jag vill helst använda shaders då jag har planerat att lägga in normal maps och lite andra tuffa effekter senare, men det går lika bra utan. Här får ni min nuvarande shader i alla fall.

varying vec3 normal; varying vec4 pos; // // Vertex program entry point // void main() { // Set the tex coord gl_TexCoord[0] = gl_MultiTexCoord0; // Send vertex and normal to the fragment program normal = gl_NormalMatrix * gl_Normal; pos = gl_Vertex; // Transform to clip space gl_Position = ftransform(); }

varying vec3 normal; varying vec4 pos; uniform sampler2D texture; uniform vec4 lightPos; uniform vec4 lightColor; uniform vec4 ambientColor; // // Fragment program entry point // void main() { // Re normalize vec3 n = normalize(normal); // Get diffuse color vec4 lightVec = normalize(lightPos - pos); vec4 diffuse = lightColor * max(dot(vec4(n,0.0),lightVec),0.0); gl_FragColor = (diffuse + ambientColor) * texture2D(texture,vec2(gl_TexCoord[0])); }

Visa signatur
Permalänk

har ingen aning om hur det funkar i OpenGL
Men i Dx så måste man iaf skicka med constanter som man sätter via handles eller nått, mins inte riktigt, är ganska grön.

Sen behöver man (fortfarande i DX) translera till clipping space i shaders för att få ut något. Så man brukar skicka med ViewMatrix och ViewProjMatrix.

Ta inte detta på för allt stort allvar:) Är extremt grön, men kanske kan ge dig några idéer iaf.

Hoppas det löser sig

Permalänk
Citat:

Ursprungligen inskrivet av BlueBlood
har ingen aning om hur det funkar i OpenGL
Men i Dx så måste man iaf skicka med constanter som man sätter via handles eller nått, mins inte riktigt, är ganska grön.

Sen behöver man (fortfarande i DX) translera till clipping space i shaders för att få ut något. Så man brukar skicka med ViewMatrix och ViewProjMatrix.

Ta inte detta på för allt stort allvar:) Är extremt grön, men kanske kan ge dig några idéer iaf.

Hoppas det löser sig

Tack, men tyvär så har jag redan gjort allt det där. Mina shaders funkar dom ger bara inte det resultat som jag förväntar mig :/ Kan ioförsig vara problem med att jag använder ortho mode för att rita ut sakerna lite enklare på skärmen. Jag har testat att lite olika kordinater för ljuskällan men det verkar inte göra någon skillnad. Har testa allt från 0.003 till 640.0.

Men som sagt alternativa lösningar som lämpar sig bättre för 2d skulle också gå bra.

Visa signatur
Permalänk
Medlem

Satt textur-samplern till rätt unit? det är ett klassiskt fel

Du måste plocka ut uniformen texture och sätta den till GL_TEXTURE0 + n där n är den texunit din textur är bunden till.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Citat:

Ursprungligen inskrivet av jdv
Satt textur-samplern till rätt unit? det är ett klassiskt fel

Du måste plocka ut uniformen texture och sätta den till GL_TEXTURE0 + n där n är den texunit din textur är bunden till.

Ja, det felet gör jag inte längre Om jag kör med bara texture2D(texture,vec2(gl_TexCoord[0])) så funkar det perfekt. Ska testa runt med lite olika värden på sakerna i alla fall och se vad som händer. Problemet som jag ser det än så länge är att dot(n,lightVec) retunerar 0;

Visa signatur