Provisional working coloured lights
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
#version 430 core
|
#version 430 core
|
||||||
in float lum;
|
in vec3 lum;
|
||||||
in vec3 dField;
|
in vec3 dField;
|
||||||
out vec4 fColor;
|
out vec4 fColor;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float c = pow (1 - min(1, dot(dField,dField)) , 2) * lum ;
|
vec3 c = pow (1 - min(1, dot(dField,dField)) , 2) * lum ;
|
||||||
fColor = vec4(c,c,c,c);
|
fColor = vec4(c,0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
layout (location = 0) in vec3 position;
|
layout (location = 0) in vec3 position;
|
||||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
uniform vec3 lightPos;
|
uniform vec3 lightPos;
|
||||||
uniform vec2 radLum;
|
uniform vec4 lumRad;
|
||||||
out vec3 dField;
|
out vec3 dField;
|
||||||
out float lum;
|
out vec3 lum;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
dField = (position - lightPos) / radLum.x;
|
dField = (position - lightPos) / lumRad.a;
|
||||||
lum = radLum.y;
|
lum = lumRad.rgb;
|
||||||
gl_Position = theMat * vec4(position,1);
|
gl_Position = theMat * vec4(position,1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#version 430 core
|
#version 430 core
|
||||||
in float lum;
|
in vec3 lum;
|
||||||
in vec3 dField;
|
in vec3 dField;
|
||||||
out vec4 fColor;
|
out vec4 fColor;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float c = pow (1 - min(1, dot(dField,dField)) , 2) * lum ;
|
vec3 c = pow (1 - min(1, dot(dField,dField)) , 2) * lum ;
|
||||||
fColor = vec4(c,c,c,c);
|
fColor = vec4(c,0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ layout (points) in;
|
|||||||
layout (triangle_strip, max_vertices = 4) out;
|
layout (triangle_strip, max_vertices = 4) out;
|
||||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
uniform vec3 lightPos;
|
uniform vec3 lightPos;
|
||||||
uniform vec2 radLum;
|
uniform vec4 lumRad;
|
||||||
out vec3 dField;
|
out vec3 dField;
|
||||||
out float lum;
|
out vec3 lum;
|
||||||
float isLHS (vec2 startV, vec2 testV)
|
float isLHS (vec2 startV, vec2 testV)
|
||||||
{ return sign( -startV.x * testV.y + startV.y * testV.x); }
|
{ return sign( -startV.x * testV.y + startV.y * testV.x); }
|
||||||
void main()
|
void main()
|
||||||
@@ -13,8 +13,8 @@ void main()
|
|||||||
vec4 p1 = vec4 (gl_in[0].gl_Position.xy,0,1);
|
vec4 p1 = vec4 (gl_in[0].gl_Position.xy,0,1);
|
||||||
vec4 p2 = vec4 (gl_in[0].gl_Position.zw,0,1);
|
vec4 p2 = vec4 (gl_in[0].gl_Position.zw,0,1);
|
||||||
if (isLHS (p1.xy - lightPos.xy, p2.xy - lightPos.xy) < 0)
|
if (isLHS (p1.xy - lightPos.xy, p2.xy - lightPos.xy) < 0)
|
||||||
{ lum = radLum.y;
|
{ lum = lumRad.rgb;
|
||||||
float rad = radLum.x;
|
float rad = lumRad.a;
|
||||||
vec4 p3 = vec4 (p1.xy,100,1);
|
vec4 p3 = vec4 (p1.xy,100,1);
|
||||||
vec4 p4 = vec4 (p2.xy,100,1);
|
vec4 p4 = vec4 (p2.xy,100,1);
|
||||||
vec2 d1 = p1.xy - lightPos.xy;
|
vec2 d1 = p1.xy - lightPos.xy;
|
||||||
|
|||||||
+2
-2
@@ -142,12 +142,12 @@ data LightSource = LS
|
|||||||
, _lsPos :: !Point3
|
, _lsPos :: !Point3
|
||||||
, _lsDir :: !Float
|
, _lsDir :: !Float
|
||||||
, _lsRad :: !Float
|
, _lsRad :: !Float
|
||||||
, _lsIntensity :: !Float
|
, _lsIntensity :: !Point3
|
||||||
}
|
}
|
||||||
data TempLightSource = TLS
|
data TempLightSource = TLS
|
||||||
{ _tlsPos :: !Point3
|
{ _tlsPos :: !Point3
|
||||||
, _tlsRad :: !Float
|
, _tlsRad :: !Float
|
||||||
, _tlsIntensity :: !Float
|
, _tlsIntensity :: !Point3
|
||||||
, _tlsUpdate :: World -> TempLightSource -> (World, Maybe TempLightSource)
|
, _tlsUpdate :: World -> TempLightSource -> (World, Maybe TempLightSource)
|
||||||
}
|
}
|
||||||
data Creature = Creature
|
data Creature = Creature
|
||||||
|
|||||||
@@ -25,15 +25,19 @@ tLightFade :: Int -> Float -> (Int -> Float) -> Point2 -> TempLightSource
|
|||||||
tLightFade 0 rmax intensityF (V2 x y) = TLS
|
tLightFade 0 rmax intensityF (V2 x y) = TLS
|
||||||
{ _tlsPos = V3 x y 0
|
{ _tlsPos = V3 x y 0
|
||||||
, _tlsRad = rmax
|
, _tlsRad = rmax
|
||||||
, _tlsIntensity = intensityF 0
|
, _tlsIntensity = f $ intensityF 0
|
||||||
, _tlsUpdate = \w _ -> (w, Nothing)
|
, _tlsUpdate = \w _ -> (w, Nothing)
|
||||||
}
|
}
|
||||||
|
where
|
||||||
|
f x' = V3 x' x' x'
|
||||||
tLightFade i rmax intensityF p@(V2 x y) = TLS
|
tLightFade i rmax intensityF p@(V2 x y) = TLS
|
||||||
{ _tlsPos = V3 x y 0
|
{ _tlsPos = V3 x y 0
|
||||||
, _tlsRad = rmax
|
, _tlsRad = rmax
|
||||||
, _tlsIntensity = intensityF i
|
, _tlsIntensity = f $ intensityF i
|
||||||
, _tlsUpdate = \w _ -> (w, Just $ tLightFade (i-1) rmax intensityF p)
|
, _tlsUpdate = \w _ -> (w, Just $ tLightFade (i-1) rmax intensityF p)
|
||||||
}
|
}
|
||||||
|
where
|
||||||
|
f x' = V3 x' x' x'
|
||||||
|
|
||||||
tLightRad
|
tLightRad
|
||||||
:: Int
|
:: Int
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ wallsToList :: [((Point2,Point2),Point4)] -> [Float]
|
|||||||
wallsToList = concatMap (\((V2 a b,V2 c d),V4 e f g h) -> [a,b,c,d,e,f,g,h])
|
wallsToList = concatMap (\((V2 a b,V2 c d),V4 e f g h) -> [a,b,c,d,e,f,g,h])
|
||||||
|
|
||||||
|
|
||||||
lightsForGloom :: World -> [(Point3,Float,Float)]
|
lightsForGloom :: World -> [(Point3,Float,Point3)]
|
||||||
lightsForGloom w = map getLS (IM.elems $ _lightSources w) ++ map getTLS (_tempLightSources w)
|
lightsForGloom w = map getLS (IM.elems $ _lightSources w) ++ map getTLS (_tempLightSources w)
|
||||||
where
|
where
|
||||||
getLS ls = ( _lsPos ls, _lsRad ls , _lsIntensity ls)
|
getLS ls = ( _lsPos ls, _lsRad ls , _lsIntensity ls)
|
||||||
|
|||||||
@@ -57,10 +57,10 @@ preloadRender = do
|
|||||||
>>= addUniforms ["lightPos"]
|
>>= addUniforms ["lightPos"]
|
||||||
wlLightShad
|
wlLightShad
|
||||||
<- makeShaderUsingShaderVAO "lighting/wall" [vert,geom,frag] EPoints wsShad
|
<- makeShaderUsingShaderVAO "lighting/wall" [vert,geom,frag] EPoints wsShad
|
||||||
>>= addUniforms ["lightPos","radLum"]
|
>>= addUniforms ["lightPos","lumRad"]
|
||||||
lightingSurfaceShad
|
lightingSurfaceShad
|
||||||
<- makeShader "lighting/surface" [vert,frag] [3] ETriangles
|
<- makeShader "lighting/surface" [vert,frag] [3] ETriangles
|
||||||
>>= addUniforms ["lightPos","radLum"]
|
>>= addUniforms ["lightPos","lumRad"]
|
||||||
lightingLineShadowShad
|
lightingLineShadowShad
|
||||||
<- makeShader "lighting/lineShadow" [vert,geom,frag] [3] ELinesAdjacency
|
<- makeShader "lighting/lineShadow" [vert,geom,frag] [3] ELinesAdjacency
|
||||||
>>= addUniforms ["lightPos"]
|
>>= addUniforms ["lightPos"]
|
||||||
|
|||||||
+5
-5
@@ -25,7 +25,7 @@ sizeToTexSize (Size x y) = TextureSize2D x y
|
|||||||
{- | Determine where light is shining in the world. -}
|
{- | Determine where light is shining in the world. -}
|
||||||
createLightMap
|
createLightMap
|
||||||
:: RenderData
|
:: RenderData
|
||||||
-> [(Point3,Float,Float)] -- Lights
|
-> [(Point3,Float,Point3)] -- Lights
|
||||||
-> Int -- ^ number of walls
|
-> Int -- ^ number of walls
|
||||||
-> Int -- ^ number of silhoutte lines to draw
|
-> Int -- ^ number of silhoutte lines to draw
|
||||||
-> Int -- ^ number of surface triangles to draw
|
-> Int -- ^ number of surface triangles to draw
|
||||||
@@ -53,10 +53,10 @@ createLightMap pdata lightPoints nWalls nSils nsurfVs = do
|
|||||||
-- draw fading lightmap circles on the floor
|
-- draw fading lightmap circles on the floor
|
||||||
-- draw fading lightmaps on the walls
|
-- draw fading lightmaps on the walls
|
||||||
depthMask $= Disabled
|
depthMask $= Disabled
|
||||||
blendFunc $= (Zero, OneMinusSrcAlpha)
|
blendFunc $= (Zero, OneMinusSrcColor)
|
||||||
stencilTest $= Enabled
|
stencilTest $= Enabled
|
||||||
depthFunc $= Just Lequal
|
depthFunc $= Just Lequal
|
||||||
flip VS.mapM_ (VS.fromList lightPoints) $ \(V3 x y z,r,lum) -> do
|
flip VS.mapM_ (VS.fromList lightPoints) $ \(V3 x y z,rad,V3 r g b) -> do
|
||||||
--forM_ lightPoints $ \(V3 x y z,r,lum) -> do
|
--forM_ lightPoints $ \(V3 x y z,r,lum) -> do
|
||||||
-- stencil out shadows
|
-- stencil out shadows
|
||||||
colorMask $= Color4 Disabled Disabled Disabled Disabled
|
colorMask $= Color4 Disabled Disabled Disabled Disabled
|
||||||
@@ -89,14 +89,14 @@ createLightMap pdata lightPoints nWalls nSils nsurfVs = do
|
|||||||
uniform (head $ _shaderCustomUnis $ _lightingSurfaceShader pdata)
|
uniform (head $ _shaderCustomUnis $ _lightingSurfaceShader pdata)
|
||||||
$= Vector3 x y z
|
$= Vector3 x y z
|
||||||
uniform (_shaderCustomUnis (_lightingSurfaceShader pdata) !! 1)
|
uniform (_shaderCustomUnis (_lightingSurfaceShader pdata) !! 1)
|
||||||
$= Vector2 r lum
|
$= Vector4 r g b rad
|
||||||
drawShader (_lightingSurfaceShader pdata) nsurfVs
|
drawShader (_lightingSurfaceShader pdata) nsurfVs
|
||||||
-- draw wall light "circles"
|
-- draw wall light "circles"
|
||||||
currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)
|
currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)
|
||||||
uniform (head $ _shaderCustomUnis $ _lightingWallShader pdata)
|
uniform (head $ _shaderCustomUnis $ _lightingWallShader pdata)
|
||||||
$= Vector3 x y z
|
$= Vector3 x y z
|
||||||
uniform (_shaderCustomUnis (_lightingWallShader pdata) !! 1)
|
uniform (_shaderCustomUnis (_lightingWallShader pdata) !! 1)
|
||||||
$= Vector2 r lum
|
$= Vector4 r g b rad
|
||||||
drawShader (_lightingWallShader pdata) nWalls
|
drawShader (_lightingWallShader pdata) nWalls
|
||||||
cullFace $= Nothing
|
cullFace $= Nothing
|
||||||
stencilTest $= Disabled
|
stencilTest $= Disabled
|
||||||
|
|||||||
Reference in New Issue
Block a user