Draw walls using perspective divide

This commit is contained in:
2021-03-18 12:58:17 +01:00
parent e98e7256d2
commit 447268117c
5 changed files with 80 additions and 17 deletions
+17 -12
View File
@@ -44,6 +44,7 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p
setShaderUniforms rot zoom (tranx,trany) (winx,winy)
( (extractProgAndUnis $ _lightSourceShader pdata)
: (extractProgAndUnis $ _wallShadowShader pdata)
: (extractProgAndUnis $ _wallShader pdata)
: (extractProgAndUnis $ _backgroundShader pdata)
: (map extractProgAndUnis $ _listShaders pdata)
)
@@ -131,18 +132,22 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p
ticks4 <- renderFoldable pdata rot zoom (tranx,trany) (winx,winy) $ picToLTree (Just 2) pic
bticks <- SDL.ticks
---- render walls
-- blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
-- -- poke data
-- let lights = map (\(x,y,r,g) -> ((x,y),(r,g,0,0))) lightPoints
-- wallPairs = map (\(a,b,_,_) -> [(a,(1,1,1,1)),(b,(1,1,1,1))]) wallPoints
-- i <- F.foldM (pokeShader (_wallShader pdata)) $ concat $ (:) <$> lights <*> wallPairs
--
-- -- bind buffers
-- bindShaderBuffers [_wallShader pdata] [i]
--
-- -- draw call
-- drawShaders [_wallShader pdata] [i]
-- render walls
blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
-- poke data
let lights = map (\(x,y,r,g) -> ((x,y),(r,g,0,0))) lightPoints
wallPairs = map (\(a,b,_,_) -> [(a,(1,1,1,1)),(b,(1,1,1,1))]) wallPoints
f (x,y) = [(x,y,0),(x,y,0),(x,y,-1)]
g (x,y) = [(x,y,0),(x,y,-1),(x,y,-1)]
wp = concatMap (\(a,b,_,_) -> f a ++ g b) wallPoints
h p = (p,(1,0,0,1))
i <- F.foldM (pokeShader (_wallShader pdata)) $ map h wp
-- bind buffers
bindShaderBuffers [_wallShader pdata] [i]
-- draw call
drawShaders [_wallShader pdata] [i]
resetShaderUniforms (map extractProgAndUnis $ _listShaders pdata)