-
Notifications
You must be signed in to change notification settings - Fork 3
/
Etc.hs
executable file
·119 lines (108 loc) · 2.83 KB
/
Etc.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
module Etc where
import Graphics.Rendering.OpenGL.GL as GL
import Graphics.UI.GLFW as GLFW
v x y z = GL.vertex (GL.Vertex3 x y z :: GL.Vertex3 GLfloat)
n x y z = GL.normal (GL.Normal3 x y z :: GL.Normal3 GLfloat)
t u v = GL.texCoord (GL.TexCoord2 u v :: GL.TexCoord2 GLfloat)
drawFrame :: IO ()
drawFrame = do
GL.clearColor $= GL.Color4 0 0 0 0
renderPrimitive LineLoop $ do
--v 0 0 0
--v 1 0 0
--v 1 0 1
--v 0 0 1
--v 0 0 1
--v 1 0 1
--v 1 1 1
--v 0 1 1
v 1 1 0
v 0 1 0
v 0 0 0
v 1 0 0
v 0 1 1
v 1 1 1
v 1 0 1
v 0 0 1
v 0 1 0
v 0 1 1
v 0 0 1
v 0 0 0
v 1 1 1
v 1 1 0
v 1 0 0
v 1 0 1
drawCubeSide :: IO ()
drawCubeSide = renderPrimitive Quads $ do
-- back
n 0 0 (-1)
--t 0 1 >> v (-0.5) (-0.5) (-0.5)
--t 1 1 >> v 0.5 (-0.5) (-0.5)
--t 1 0 >> v 0.5 0.5 (-0.5)
--t 0 0 >> v (-0.5) 0.5 (-0.5)
t 0 1 >> v 1 1 0
t 1 1 >> v 0 1 0
t 1 0 >> v 0 0 0
t 0 0 >> v 1 0 0
-- front
n 0 0 1
--t 0 1 >> v 0.5 (-0.5) 0.5
--t 1 1 >> v (-0.5) (-0.5) 0.5
--t 1 0 >> v (-0.5) 0.5 0.5
--t 0 0 >> v 0.5 0.5 0.5
t 0 1 >> v 0 1 1
t 1 1 >> v 1 1 1
t 1 0 >> v 1 0 1
t 0 0 >> v 0 0 1
-- left
n (-1) 0 0
--t 0 1 >> v (-0.5) (-0.5) 0.5
--t 1 1 >> v (-0.5) (-0.5) (-0.5)
--t 1 0 >> v (-0.5) 0.5 (-0.5)
--t 0 0 >> v (-0.5) 0.5 0.5
t 0 1 >> v 0 1 0
t 1 1 >> v 0 1 1
t 1 0 >> v 0 0 1
t 0 0 >> v 0 0 0
-- right
n 1 0 0
--t 0 1 >> v 0.5 (-0.5) (-0.5)
--t 1 1 >> v 0.5 (-0.5) 0.5
--t 1 0 >> v 0.5 0.5 0.5
--t 0 0 >> v 0.5 0.5 (-0.5)
t 0 1 >> v 1 1 1
t 1 1 >> v 1 1 0
t 1 0 >> v 1 0 0
t 0 0 >> v 1 0 1
drawCubeTop :: IO ()
drawCubeTop = renderPrimitive Quads $ do
-- top
n 0 1 0
--t 0 1 >> v 0.5 0.5 (-0.5)
--t 1 1 >> v 0.5 0.5 0.5
--t 1 0 >> v (-0.5) 0.5 0.5
--t 0 0 >> v (-0.5) 0.5 (-0.5)
t 0 1 >> v 1 1 0
t 1 1 >> v 1 1 1
t 1 0 >> v 0 1 1
t 0 0 >> v 0 1 0
drawCubeBot :: IO ()
drawCubeBot = renderPrimitive Quads $ do
-- bottom
n 0 (-1) 0
--t 0 1 >> v 0.5 (-0.5) 0.5
--t 1 1 >> v 0.5 (-0.5) (-0.5)
--t 1 0 >> v (-0.5) (-0.5) (-0.5)
--t 0 0 >> v (-0.5) (-0.5) 0.5
t 0 1 >> v 1 0 1
t 1 1 >> v 1 0 0
t 1 0 >> v 0 0 0
t 0 0 >> v 0 0 1
loadTexture :: String -> IO GL.TextureObject
loadTexture filename = do
dataFileName <- return filename
[texName] <- GL.genObjectNames 1
GL.textureBinding Texture2D $= Just texName
GLFW.loadTexture2D dataFileName [GLFW.BuildMipMaps]
GL.textureFilter Texture2D $= ((GL.Linear', Just GL.Linear'), GL.Linear')
return texName