diff options
author | emile <hanemile@protonmail.com> | 2018-10-13 22:36:56 +0200 |
---|---|---|
committer | emile <hanemile@protonmail.com> | 2018-10-13 22:36:56 +0200 |
commit | 41895ea7b83927922eebf51a2046d02f624bab99 (patch) | |
tree | e54bc4545f2b470d2a7f4f18aeee0817da483195 /draw | |
parent | 6e137fe268d9933bfafa5b064fbfaf8e4e682275 (diff) |
Moved the functions used for 3D drawing to another file (draw3D.go)
Diffstat (limited to 'draw')
-rw-r--r-- | draw/draw3D.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/draw/draw3D.go b/draw/draw3D.go new file mode 100644 index 0000000..62d0f05 --- /dev/null +++ b/draw/draw3D.go @@ -0,0 +1,58 @@ +package draw + +import ( + "../llog" + "../structs" + "github.com/fogleman/ln/ln" +) + +func drawStar3D(scene ln.Scene, star structs.Star) ln.Scene { + starSize := 0.1 + oneCorner := ln.Vector{star.C.X - starSize, star.C.Y - starSize, star.C.Z - starSize} + otherCorner := ln.Vector{star.C.X + starSize, star.C.Y + starSize, star.C.Z + starSize} + + scene.Add(ln.NewCube(oneCorner, otherCorner)) + + return scene +} + +func drawStars3D(scene ln.Scene, slice []structs.Star) ln.Scene { + for _, star := range slice { + scene = drawStar3D(scene, star) + } + + return scene +} + +func Slice3D(slice []structs.Star, path string) { + // create a scene and add a single cube + scene := ln.Scene{} + + llog.Good("Drawing the Stars") + scene = drawStars3D(scene, slice) + llog.Good("Done Drawing the Stars") + + // scene.Add(ln.NewCube(ln.Vector{-1, -1, -1}, ln.Vector{1, 1, 1})) + + // define camera parameters + eye := ln.Vector{4, 3, 2} // camera position + center := ln.Vector{0, 0, 0} // camera looks at + up := ln.Vector{0, 0, 1} // up direction + + // define rendering parameters + width := 1024.0 // rendered width + height := 1024.0 // rendered height + fovy := 50.0 // vertical field of view, degrees + znear := 0.1 // near z plane + zfar := 10.0 // far z plane + step := 0.01 // how finely to chop the paths for visibility testing + + llog.Good("Configuring path") + // compute 2D paths that depict the 3D scene + paths := scene.Render(eye, center, up, width, height, fovy, znear, zfar, step) + llog.Good("Done") + + // render the paths in an image + llog.Good("Writing to png") + paths.WriteToPNG(path, width, height) +} |