From 3b8d3f8f9e47391ee7dc498714ed7ecdf54e4bfe Mon Sep 17 00:00:00 2001 From: Stefan Dresselhaus Date: Tue, 21 Jan 2014 16:18:48 +0100 Subject: [PATCH] tessellationgit status --- deps/getDeps.sh | 24 +++++++++++++++++++++++- shaders/fragment.shader | 23 +++++++++++++++++------ shaders/vertex.shader | 34 ++++++++++------------------------ src/Main.hs | 10 +++++++--- src/Render/Render.hs | 26 ++++++++++++++++++-------- 5 files changed, 75 insertions(+), 42 deletions(-) diff --git a/deps/getDeps.sh b/deps/getDeps.sh index e70bb7f..43ec790 100755 --- a/deps/getDeps.sh +++ b/deps/getDeps.sh @@ -26,8 +26,27 @@ then wget http://de.archive.ubuntu.com/ubuntu/pool/universe/libs/libsdl2/libsdl2-dbg_2.0.1+dfsg1-1ubuntu1_amd64.deb sudo gdebi libsdl2-dbg_2.0.1+dfsg1-1ubuntu1_amd64.deb fi + if [ ! -f "libsdl2-ttf-2.0-0_2.0.12+dfsg1-2_amd64.deb" ] + then + wget http://de.archive.ubuntu.com/ubuntu/pool/universe/libs/libsdl2-ttf/libsdl2-ttf-2.0-0_2.0.12+dfsg1-2_amd64.deb + sudo gdebi libsdl2-ttf-2.0-0_2.0.12+dfsg1-2_amd64.deb + fi + if [ ! -f "libsdl2-ttf-dev_2.0.12+dfsg1-2_amd64.deb" ] + then + wget http://de.archive.ubuntu.com/ubuntu/pool/universe/libs/libsdl2-ttf/libsdl2-ttf-dev_2.0.12+dfsg1-2_amd64.deb + sudo gdebi libsdl2-ttf-dev_2.0.12+dfsg1-2_amd64.deb + fi + if [ ! -f "libsdl2-image-2.0-0_2.0.0+dfsg-3_amd64.deb" ] + then + wget http://de.archive.ubuntu.com/ubuntu/pool/universe/libs/libsdl2-image/libsdl2-image-2.0-0_2.0.0+dfsg-3_amd64.deb + sudo gdebi libsdl2-image-2.0-0_2.0.0+dfsg-3_amd64.deb + fi + if [ ! -f "libsdl2-image-dev_2.0.0+dfsg-3_amd64.deb" ] + then + wget http://de.archive.ubuntu.com/ubuntu/pool/universe/libs/libsdl2-image/libsdl2-image-dev_2.0.0+dfsg-3_amd64.deb + sudo gdebi libsdl2-image-dev_2.0.0+dfsg-3_amd64.deb + fi fi - ## hack end echo "cloning repositories" @@ -41,6 +60,9 @@ else fi echo "trying to build" + +cabal install haddock + for d in `find . -maxdepth 1 -type d` do if [ "$d" == "." ] diff --git a/shaders/fragment.shader b/shaders/fragment.shader index 7ae05d4..5bc334c 100644 --- a/shaders/fragment.shader +++ b/shaders/fragment.shader @@ -1,12 +1,23 @@ -#version 330 +#version 400 -//color from earlier stages -smooth in vec4 fg_SmoothColor; +smooth in vec3 teNormal; +in vec4 teColor; -out vec4 fg_FragColor; +out vec4 fgColor; + +uniform mat4 ViewMatrix; void main(void) { -//copy-shader - fg_FragColor = fg_SmoothColor; + //heliospheric lighting + vec4 light = vec4(1.0,1.0,1.0,1.0); + vec4 dark = vec4(0.0,0.0,0.0,1.0); + //direction to sun from origin + vec3 lightDir = normalize(ViewMatrix * vec4(5.0,5.0,1.0,0.0)).xyz; + + float costheta = dot(teNormal, lightDir); + float a = costheta * 0.5 + 0.5; + + + fgColor = teColor * mix(dark, light, a); } \ No newline at end of file diff --git a/shaders/vertex.shader b/shaders/vertex.shader index 324aa46..70b8530 100644 --- a/shaders/vertex.shader +++ b/shaders/vertex.shader @@ -1,32 +1,18 @@ -#version 330 - -//constant projection matrix -uniform mat4 fg_ProjectionMatrix; -uniform mat4 fg_ViewMatrix; -uniform mat3 fg_NormalMatrix; +#version 400 //vertex-data -in vec4 fg_Color; -in vec3 fg_VertexIn; -in vec3 fg_NormalIn; +in vec4 Color; +in vec3 Position; +in vec3 Normal; //output-data for later stages -smooth out vec4 fg_SmoothColor; +out vec4 vColor; +out vec3 vPosition; +out vec3 vNormal; void main() { - vec3 fg_Normal = fg_NormalMatrix * fg_NormalIn; //vec3(0,1,0); - //transform vec3 into vec4, setting w to 1 - vec4 fg_Vertex = vec4(fg_VertexIn, 1.0); - vec4 light = vec4(1.0,1.0,1.0,1.0); - vec4 dark = vec4(0.0,0.0,0.0,1.0); - //direction to sun from origin - vec3 lightDir = normalize(fg_ViewMatrix * vec4(5.0,5.0,1.0,0.0)).xyz; - - - float costheta = dot(normalize(fg_Normal), lightDir); - float a = costheta * 0.5 + 0.5; - - fg_SmoothColor = fg_Color * mix(dark, light, a);// + 0.001* fg_Normal.xyzx; - gl_Position = fg_ProjectionMatrix * fg_ViewMatrix * fg_Vertex; + vPosition = Position; + vNormal = Normal; + vColor = Color; } \ No newline at end of file diff --git a/src/Main.hs b/src/Main.hs index 47222b3..94c85c2 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -35,6 +35,7 @@ import qualified Graphics.Rendering.OpenGL.GL as GL import Graphics.Rendering.OpenGL.Raw.Core31 import Data.Time (getCurrentTime, UTCTime, diffUTCTime) +import Graphics.Rendering.OpenGL.Raw.ARB.TessellationShader -- Our modules import Map.Map import Render.Misc (checkError, @@ -122,8 +123,8 @@ main = do now <- getCurrentTime putStrLn "foo" - let zDistClosest = 10 - zDistFarthest = zDistClosest + 20 + let zDistClosest = 1 + zDistFarthest = zDistClosest + 30 fov = 90 --field of view near = 1 --near plane far = 100 --far plane @@ -231,8 +232,11 @@ draw = do GL.vertexAttribPointer vi GL.$= fgVertexIndex GL.vertexAttribArray vi GL.$= GL.Enabled checkError "beforeDraw" + + glPatchParameteri gl_PATCH_VERTICES 3 + glPolygonMode gl_FRONT gl_LINE - GL.drawArrays GL.Triangles 0 numVert + glDrawArrays gl_PATCHES 0 (fromIntegral numVert) checkError "draw" diff --git a/src/Render/Render.hs b/src/Render/Render.hs index c7e9d5b..362714d 100644 --- a/src/Render/Render.hs +++ b/src/Render/Render.hs @@ -18,6 +18,10 @@ import Render.Misc vertexShaderFile :: String vertexShaderFile = "shaders/vertex.shader" +tessControlShaderFile :: String +tessControlShaderFile = "shaders/tessControl.shader" +tessEvalShaderFile :: String +tessEvalShaderFile = "shaders/tessEval.shader" fragmentShaderFile :: String fragmentShaderFile = "shaders/fragment.shader" @@ -45,37 +49,43 @@ initShader :: IO ( ) initShader = do ! vertexSource <- B.readFile vertexShaderFile + ! tessControlSource <- B.readFile tessControlShaderFile + ! tessEvalSource <- B.readFile tessEvalShaderFile ! fragmentSource <- B.readFile fragmentShaderFile vertexShader <- compileShaderSource VertexShader vertexSource checkError "compile Vertex" + tessControlShader <- compileShaderSource TessControlShader tessControlSource + checkError "compile Vertex" + tessEvalShader <- compileShaderSource TessEvaluationShader tessEvalSource + checkError "compile Vertex" fragmentShader <- compileShaderSource FragmentShader fragmentSource checkError "compile Frag" - program <- createProgramUsing [vertexShader, fragmentShader] + program <- createProgramUsing [vertexShader, tessControlShader, tessEvalShader, fragmentShader] checkError "compile Program" currentProgram $= Just program - projectionMatrixIndex <- get (uniformLocation program "fg_ProjectionMatrix") + projectionMatrixIndex <- get (uniformLocation program "ProjectionMatrix") checkError "projMat" - viewMatrixIndex <- get (uniformLocation program "fg_ViewMatrix") + viewMatrixIndex <- get (uniformLocation program "ViewMatrix") checkError "viewMat" - modelMatrixIndex <- get (uniformLocation program "fg_ModelMatrix") + modelMatrixIndex <- get (uniformLocation program "ModelMatrix") checkError "modelMat" - normalMatrixIndex <- get (uniformLocation program "fg_NormalMatrix") + normalMatrixIndex <- get (uniformLocation program "NormalMatrix") checkError "normalMat" - vertexIndex <- get (attribLocation program "fg_VertexIn") + vertexIndex <- get (attribLocation program "Position") vertexAttribArray vertexIndex $= Enabled checkError "vertexInd" - normalIndex <- get (attribLocation program "fg_NormalIn") + normalIndex <- get (attribLocation program "Normal") vertexAttribArray normalIndex $= Enabled checkError "normalInd" - colorIndex <- get (attribLocation program "fg_Color") + colorIndex <- get (attribLocation program "Color") vertexAttribArray colorIndex $= Enabled checkError "colorInd"