module Escena where
import Elem3D
( Foton,
Luz(..),
RGB(..),
Base(Base),
Ray,
Direction(Direction),
Point3D(..),
escalatePoint,
degToRad,
rotatePoint,movePoint
)
import Figuras
( Obj, Point2D(..),
Shape(Sphere, Plane, Cylinder,Rectangle,Cone,Triangle),
Plano(Plano),
Esfera(Esfera),
Cilindro(Cilindro),
Rectangulo(Rectangulo),
Camara(Camara),
Cono(Cono),
Triangulo(Triangulo),
addFigMult,
parametricShapeCollision,
loadObjFile,
convertToCustomFormat, encenderShape ,encenderShapes
)
import qualified Data.DList as DL
import qualified Data.Set as Set
intMxKd :: Float
intMxKd :: Float
intMxKd = Float
50
n :: Float
n :: Float
n=Float
50000
nRebotes :: Int
nRebotes :: Int
nRebotes = Int
6
aspectR :: Float
aspectR :: Float
aspectR = Float
1
pix :: Float
pix :: Float
pix = Float
500
piCam :: Float
piCam :: Float
piCam = Float
15
gamma :: Float
gamma :: Float
gamma = Float
2.4
maxN :: Int
maxN :: Int
maxN = Int
10
etapasY :: Int
etapasY :: Int
etapasY = Int
10
etapasX:: Int
etapasX :: Int
etapasX = Int
10
nRay :: Int
nRay :: Int
nRay = Int
200
intMxSim :: Float
intMxSim :: Float
intMxSim = Float
1.0
basCam :: Base
basCam :: Base
basCam = Direction -> Direction -> Direction -> Base
Base (Float -> Float -> Float -> Direction
Direction (Float
piCamFloat -> Float -> Float
forall a. Num a => a -> a -> a
*Float
aspectR) Float
0 Float
0) (Float -> Float -> Float -> Direction
Direction Float
0 Float
piCam Float
0) (Float -> Float -> Float -> Direction
Direction Float
0 Float
0 (Float
17.5))
cam :: Point3D
cam :: Point3D
cam = Float -> Float -> Float -> Point3D
Point3D Float
0 Float
0 Float
35
centr :: Point3D
centr :: Point3D
centr = Float -> Float -> Float -> Point3D
Point3D (-Float
9) (-Float
8) (Float
1)
centr' :: Point3D
centr' = Float -> Float -> Float -> Point3D
Point3D (Float
10) (-Float
8) (Float
2)
luz :: Luz
luz :: Luz
luz = Point3D -> RGB -> Float -> Luz
Luz (Float -> Float -> Float -> Point3D
Point3D (Float
0) Float
8 (-Float
3)) (Float -> Float -> Float -> RGB
RGB Float
255 Float
255 Float
255) Float
1
luz' :: Luz
luz' :: Luz
luz' = Point3D -> RGB -> Float -> Luz
Luz (Float -> Float -> Float -> Point3D
Point3D (Float
10) (Float
5) (-Float
50)) (Float -> Float -> Float -> RGB
RGB Float
255 Float
255 Float
255) (Float
intMxKdFloat -> Float -> Float
forall a. Fractional a => a -> a -> a
/Float
2)
luz'' :: Luz
luz'' :: Luz
luz'' = Point3D -> RGB -> Float -> Luz
Luz (Float -> Float -> Float -> Point3D
Point3D Float
8 Float
3 (-Float
12)) (Float -> Float -> Float -> RGB
RGB Float
255 Float
255 Float
255) Float
intMxKd
luz''' :: Luz
luz''' :: Luz
luz''' = Point3D -> RGB -> Float -> Luz
Luz (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
0 (Float
30)) (Float -> Float -> Float -> RGB
RGB Float
255 Float
255 Float
255) Float
1
plano0 :: Shape
plano0 :: Shape
plano0 = Plano -> Shape
Plane (Point3D
-> Direction
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Plano
Plano (Float -> Float -> Float -> Point3D
Point3D (-Float
15) Float
0 Float
0) (Float -> Float -> Float -> Direction
Direction Float
1 Float
0 Float
0) (Float -> Float -> Float -> RGB
RGB Float
255 Float
10 Float
10) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
plano1 :: Shape
plano1 :: Shape
plano1 = Plano -> Shape
Plane (Point3D
-> Direction
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Plano
Plano (Float -> Float -> Float -> Point3D
Point3D Float
15 Float
0 Float
0) (Float -> Float -> Float -> Direction
Direction Float
1 Float
0 Float
0) (Float -> Float -> Float -> RGB
RGB Float
10 Float
255 Float
10) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
plano2 :: Shape
plano2 :: Shape
plano2 = Plano -> Shape
Plane (Point3D
-> Direction
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Plano
Plano (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
15 Float
0) (Float -> Float -> Float -> Direction
Direction Float
0 Float
1 Float
0) (Float -> Float -> Float -> RGB
RGB Float
100 Float
100 Float
100) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
plano3 :: Shape
plano3 :: Shape
plano3 = Plano -> Shape
Plane (Point3D
-> Direction
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Plano
Plano (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
0 (-Float
15)) (Float -> Float -> Float -> Direction
Direction Float
0 Float
0 (-Float
1)) (Float -> Float -> Float -> RGB
RGB Float
1 Float
1 Float
1) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
plano4 :: Shape
plano4 = Plano -> Shape
Plane (Point3D
-> Direction
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Plano
Plano (Float -> Float -> Float -> Point3D
Point3D Float
0 (-Float
15) Float
0) (Float -> Float -> Float -> Direction
Direction Float
0 Float
1 Float
0) (Float -> Float -> Float -> RGB
RGB Float
100 Float
100 Float
100) (Float
0.85,Float
0,Float
0) Float
1.6 Int
0)
plano5 :: Shape
plano5 :: Shape
plano5 = Plano -> Shape
Plane (Point3D
-> Direction
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Plano
Plano (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
0 Float
50.5) (Float -> Float -> Float -> Direction
Direction Float
0 Float
0 Float
1) (Float -> Float -> Float -> RGB
RGB Float
1 Float
1 Float
1) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
bola :: Shape
bola :: Shape
bola = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera Point3D
centr Float
2 (Float -> Float -> Float -> RGB
RGB Float
250 Float
10 Float
208) (Float
0.5, Float
0,Float
0) Float
1.5 Int
0)
bola' :: Shape
bola' :: Shape
bola' = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera Point3D
centr' Float
2 (Float -> Float -> Float -> RGB
RGB Float
10 Float
250 Float
200) (Float
0.85,Float
0,Float
0) Float
1.5 Int
0)
rect0 :: Shape
rect0 = Rectangulo -> Shape
Rectangle (Point3D
-> Direction
-> Direction
-> Float
-> Float
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Rectangulo
Rectangulo (Float -> Float -> Float -> Point3D
Point3D Float
15 Float
0 (-Float
10)) (Float -> Float -> Float -> Direction
Direction (Float
1) Float
0 Float
0) (Float -> Float -> Float -> Direction
Direction Float
0 Float
0 (-Float
1)) Float
30 Float
30 (Float -> Float -> Float -> RGB
RGB Float
10 Float
255 Float
10) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
rect1 :: Shape
rect1 = Rectangulo -> Shape
Rectangle (Point3D
-> Direction
-> Direction
-> Float
-> Float
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Rectangulo
Rectangulo (Float -> Float -> Float -> Point3D
Point3D (-Float
15) Float
0 (-Float
10)) (Float -> Float -> Float -> Direction
Direction Float
1 Float
0 Float
0) (Float -> Float -> Float -> Direction
Direction Float
0 Float
0 Float
1) Float
30 Float
30 (Float -> Float -> Float -> RGB
RGB Float
255 Float
10 Float
10) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
rect2 :: Shape
rect2 = Rectangulo -> Shape
Rectangle (Point3D
-> Direction
-> Direction
-> Float
-> Float
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Rectangulo
Rectangulo (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
0 (-Float
15)) (Float -> Float -> Float -> Direction
Direction Float
0 Float
0 (Float
1)) (Float -> Float -> Float -> Direction
Direction (-Float
1) Float
0 Float
0) Float
30 Float
30 (Float -> Float -> Float -> RGB
RGB Float
100 Float
100 Float
100) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
rect3 :: Shape
rect3 = Rectangulo -> Shape
Rectangle (Point3D
-> Direction
-> Direction
-> Float
-> Float
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Rectangulo
Rectangulo (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
15 (-Float
0)) (Float -> Float -> Float -> Direction
Direction Float
0 (-Float
1) Float
0) (Float -> Float -> Float -> Direction
Direction (-Float
1) Float
0 Float
0) Float
40 Float
40 (Float -> Float -> Float -> RGB
RGB Float
100 Float
100 Float
100) (Float
0.85,Float
0,Float
0) Float
0 Int
0)
cilindro :: Shape
cilindro :: Shape
cilindro = Cilindro -> Shape
Cylinder (Point3D
-> Direction
-> Float
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Cilindro
Cilindro Point3D
centr (Float -> Float -> Float -> Direction
Direction Float
0 Float
1 Float
0) Float
5 (Float -> Float -> Float -> RGB
RGB Float
200 Float
0 Float
200) (Float
0, Float
0.0, Float
0.0) Float
0 Int
0)
cono :: Shape
cono = Cono -> Shape
Cone(Point3D
-> Float
-> Float
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Cono
Cono (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
0 (-Float
8)) Float
1 Float
1 (Float -> Float -> Float -> RGB
RGB Float
200 Float
0 Float
200) (Float
0.85, Float
0.0, Float
0.0) Float
0 Int
0)
tri :: Shape
tri = Triangulo -> Shape
Triangle(Point3D
-> Point3D
-> Point3D
-> Point2D
-> Point2D
-> Point2D
-> RGB
-> (Float, Float, Float)
-> Float
-> Int
-> Triangulo
Triangulo (Float -> Float -> Float -> Point3D
Point3D (-Float
2) Float
0 (-Float
8)) (Float -> Float -> Float -> Point3D
Point3D Float
0 Float
4 (-Float
8)) (Float -> Float -> Float -> Point3D
Point3D (Float
2) Float
0 (-Float
8)) (Float -> Float -> Point2D
Point2D Float
0 Float
1) (Float -> Float -> Point2D
Point2D Float
1 Float
0) (Float -> Float -> Point2D
Point2D Float
0 Float
0) (Float -> Float -> Float -> RGB
RGB Float
200 Float
0 Float
200) (Float
0.85, Float
0.0, Float
0.0) Float
0 Int
0)
camara :: Camara
camara :: Camara
camara = Point3D -> Base -> Camara
Camara Point3D
cam Base
basCam
camara' :: Camara
camara' :: Camara
camara' = Point3D -> Base -> Camara
Camara (Float -> Float -> Float -> Point3D
Point3D Float
0.5 Float
0.5 Float
20) Base
basCam
fmx :: Float
fmx :: Float
fmx = Float
intMxSim
bola'' :: Shape
bola'' = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera (Float -> Float -> Float -> Point3D
Point3D (-Float
6) (-Float
10) (-Float
3)) Float
2 (Float -> Float -> Float -> RGB
RGB Float
200 Float
200 Float
200) (Float
0.85,Float
0,Float
0) Float
1 Int
0)
bola''' :: Shape
bola''' = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera (Float -> Float -> Float -> Point3D
Point3D (-Float
2) (-Float
10) (-Float
6)) Float
2 (Float -> Float -> Float -> RGB
RGB Float
200 Float
200 Float
200) (Float
0.85,Float
0,Float
0) Float
1 Int
0)
bola'''' :: Shape
bola'''' = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera (Float -> Float -> Float -> Point3D
Point3D (-Float
10) (-Float
10) (Float
0)) Float
2 (Float -> Float -> Float -> RGB
RGB Float
200 Float
200 Float
200) (Float
0.85,Float
0,Float
0) Float
1 Int
0)
bolo :: Shape
bolo = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera (Float -> Float -> Float -> Point3D
Point3D (Float
0) (Float
0) (Float
0)) Float
180 (Float -> Float -> Float -> RGB
RGB Float
200 Float
200 Float
200) (Float
0.85,Float
0,Float
0) Float
1 Int
0)
bolo' :: Shape
bolo' = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera (Float -> Float -> Float -> Point3D
Point3D (Float
6) (-Float
10) (-Float
14)) Float
2 (Float -> Float -> Float -> RGB
RGB Float
200 Float
200 Float
200) (Float
0.85,Float
0,Float
0) Float
1 Int
0)
bolo'' :: Shape
bolo'' = Esfera -> Shape
Sphere (Point3D
-> Float -> RGB -> (Float, Float, Float) -> Float -> Int -> Esfera
Esfera (Float -> Float -> Float -> Point3D
Point3D (Float
10) (-Float
10) (-Float
18)) Float
2 (Float -> Float -> Float -> RGB
RGB Float
200 Float
200 Float
200) (Float
0.85,Float
0,Float
0) Float
1 Int
0)
figuras :: Set.Set Shape
figuras :: Set Shape
figuras = [Shape] -> Set Shape
forall a. Ord a => [a] -> Set a
Set.fromList ([Shape] -> Set Shape) -> [Shape] -> Set Shape
forall a b. (a -> b) -> a -> b
$ [Shape] -> [Shape] -> [Shape]
addFigMult [Shape
plano0,Shape
plano1,Shape
rect2,Shape
bola,Shape
plano2,Shape
bola',Shape
plano4,Shape
bola] []
luces :: [Luz]
luces :: [Luz]
luces = [Luz
luz]