added shading, reduced debug-output

This commit is contained in:
Nicole Dresselhaus 2014-08-24 23:47:17 +02:00
parent c21863c03a
commit 581cb142bb
No known key found for this signature in database
GPG Key ID: BC16D887851A1A80
6 changed files with 28 additions and 15 deletions

BIN
models/holzfaellerHaus1.iqm Normal file

Binary file not shown.

Binary file not shown.

View File

@ -5,6 +5,17 @@ in vec3 vNormal;
out vec4 fgColor;
uniform mat4 ViewMatrix;
void main () {
fgColor = vec4(1.0,0.0,1.0,0.5);
//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(vNormal, lightDir);
float a = costheta * 0.5 + 0.5;
fgColor = vec4(0.5,0.5,0.5,1)*mix(dark,light,a);
}

View File

@ -6,7 +6,7 @@ layout(location=2) in vec2 TexCoord;
uniform mat4 ProjectionMatrix;
uniform mat4 ViewMatrix;
uniform mat3 NormalMatrix;
uniform vec3 PositionOffset = vec3(5,5,5);
uniform vec3 PositionOffset = vec3(5,2,5);
uniform float TessLevelInner = 1.0; // controlled by keyboard buttons
uniform float TessLevelOuter = 1.0; // controlled by keyboard buttons
@ -15,6 +15,7 @@ out vec3 vNormal;
void main () {
vPosition = Position;
gl_Position = vec4(Position,1);//ProjectionMatrix * ViewMatrix * vec4(PositionOffset + Position, 1);
//gl_Position = vec4(Position,1);
gl_Position = ProjectionMatrix * ViewMatrix * vec4(PositionOffset + Position, 1);
vNormal = Normal;
}

View File

@ -259,9 +259,9 @@ parseIQM a =
bufferData ElementArrayBuffer $= (fromIntegral byteLen, p, StaticDraw)
checkError "bufferData tris"
return $ castPtr p
putStrLn "Triangles:"
printPtrAsWord32Array tris ((*3).fromIntegral.num_triangles.bareheader $ bare) 3
print bare
--putStrLn "Triangles:"
--printPtrAsWord32Array tris ((*3).fromIntegral.num_triangles.bareheader $ bare) 3
--print bare
return $ IQM
{ header = bareheader bare
, texts = baretexts bare
@ -275,14 +275,14 @@ parseIQM a =
createVAO :: [(IQMVertexArray, BufferObject)] -> IO ()
createVAO bo = do
print bo
--print bo
initVAO (AttribLocation 0) IQMPosition bo
initVAO (AttribLocation 1) IQMNormal bo
initVAO (AttribLocation 2) IQMTexCoord bo
initVAO :: AttribLocation -> IQMVertexArrayType -> [(IQMVertexArray, BufferObject)] -> IO ()
initVAO l t bo = do
print $ concat ["adding ", show t, " to vertexBufferObject"]
--print $ concat ["adding ", show t, " to vertexBufferObject"]
let (IQMVertexArray _ _ _ num _ _,buf) = case filter (\(IQMVertexArray ty _ _ _ _ _, _) -> ty == t) bo of
[(a,b)] -> (a,b)
_ -> error "IQM-Object not render-able with current shader-mechanics"
@ -325,11 +325,11 @@ readInVAO d vcount (IQMVertexArray type' a format num offset ptr) =
putStrLn $ concat ["Allocating ", show vcount ,"x", show num,"x",show (vaSize format)," = ", show byteLen, " Bytes at ", show p, " for ", show type']
putStrLn $ concat ["Filling starting at ", show offset, " with: "]
unsafeUseAsCString data' (\s -> copyBytes p s byteLen)
case type' of
{-case type' of
IQMBlendIndexes -> printPtrAsUByteArray p numElems 4
IQMBlendWeights -> printPtrAsUByteArray p numElems 4
IQMTexCoord -> printPtrAsFloatArray p numElems 2
_ -> printPtrAsFloatArray p numElems 3
_ -> printPtrAsFloatArray p numElems 3-}
return $ IQMVertexArray type' a format num offset $ castPtr p
-- | Real internal Parser.

View File

@ -180,7 +180,7 @@ initMapShader tessFac (buf, vertDes) = do
putStrLn $ unlines $ "Model-Uniforms: ":map show uni'
putStrLn $ unlines $ ["Model-Indices: ", show (texIndex', normalIndex', vertexIndex')]
testobj <- parseIQM "models/box.iqm"
testobj <- parseIQM "models/holzfaellerHaus1.iqm"
let objs = [MapObject testobj (L.V3 0 10 0) (MapObjectState ())]
currentProgram $= Nothing
@ -288,10 +288,11 @@ renderIQM :: IQM -> L.V3 CFloat -> L.V3 CFloat -> IO ()
renderIQM m p@(L.V3 x y z) s@(L.V3 sx sy sz) = do
withVAO (vertexArrayObject m) $ do
vertexAttribArray (AttribLocation 0) $= Enabled
vertexAttribArray (AttribLocation 1) $= Enabled
checkError "setting array to enabled"
bindBuffer ElementArrayBuffer $= Just (triangleBufferObject m)
checkError "bindBuffer"
let n = fromIntegral.num_triangles.header $ m
let n = fromIntegral.(*3).num_triangles.header $ m
--print $ concat ["drawing ", show n," triangles"]
drawElements Triangles n UnsignedInt nullPtr
checkError "drawing model"
@ -332,7 +333,7 @@ drawMap = do
glPatchParameteri gl_PATCH_VERTICES 3
cullFace $= Nothing --Just Front
cullFace $= Just Front
polygonMode $= (Fill,Fill)
glDrawArrays gl_PATCHES 0 (fromIntegral numVert)
@ -491,11 +492,11 @@ render = do
currentProgram $= Just (state ^. gl.glMap.objectProgram)
checkError "setting up shadowmap-program"
--set up projection (= copy from state)
{-mat44ToGPU frust projmo "mapObjects-projection"
mat44ToGPU frust projmo "mapObjects-projection"
--set up camera
mat44ToGPU cam' vmatmo "mapObjects-cam"
--set up normal
mat33ToGPU nmap nmatmo "mapObjects-nmat"-}
mat33ToGPU nmap nmatmo "mapObjects-nmat"
mapM_ renderObject (state ^. gl.glMap.mapObjects)
checkError "draw mapobjects"