예제 #1
0
파일: test.go 프로젝트: fogleman/ln
func main() {
	scene := ln.Scene{}
	n := 20
	for x := -n; x <= n; x++ {
		for y := -n; y <= n; y++ {
			// z := rand.Float64() * 3
			// scene.Add(cube(float64(x), float64(y), float64(z)))
			// scene.Add(cube(float64(x), float64(y), float64(z+1)))
			// scene.Add(cube(float64(x), float64(y), float64(z+2)))
		}
	}
	n = 8
	for x := -n; x <= n; x++ {
		for y := -n; y <= n; y++ {
			scene.Add(ln.NewSphere(ln.Vector{float64(x), float64(y), 0}, 0.45))
		}
	}
	// scene.Add(ln.NewSphere(ln.Vector{0, 4, 0}, 4))
	// scene.Add(ln.NewSphere(ln.Vector{-7, 0, 0}, 4))
	// scene.Add(ln.NewSphere(ln.Vector{7, 0, 0}, 4))
	eye := ln.Vector{8, 8, 1}
	center := ln.Vector{0, 0, -4.25}
	up := ln.Vector{0, 0, 1}
	width := 1024.0
	height := 1024.0
	paths := scene.Render(eye, center, up, width, height, 50, 0.1, 100, 0.01)
	paths.WriteToPNG("out.png", width, height)
	// paths.Print()
}
예제 #2
0
파일: earth.go 프로젝트: fogleman/ln
func Render(lines ln.Paths, matrix ln.Matrix) ln.Paths {
	scene := ln.Scene{}
	sphere := ln.NewSphere(ln.Vector{}, 1)
	earth := Earth{sphere, lines}
	shape := ln.NewTransformedShape(&earth, matrix)
	scene.Add(shape)
	eye := ln.LatLngToXYZ(35.7806, -78.6389, 1).Normalize().MulScalar(2.46)
	center := ln.Vector{}
	up := ln.Vector{0, 0, 1}
	return scene.Render(eye, center, up, 60, 1, 0.1, 100, 0.01)
}
예제 #3
0
파일: csg.go 프로젝트: fogleman/ln
func main() {
	shape := ln.NewDifference(
		ln.NewIntersection(
			ln.NewSphere(ln.Vector{}, 1),
			ln.NewCube(ln.Vector{-0.8, -0.8, -0.8}, ln.Vector{0.8, 0.8, 0.8}),
		),
		ln.NewCylinder(0.4, -2, 2),
		ln.NewTransformedShape(ln.NewCylinder(0.4, -2, 2), ln.Rotate(ln.Vector{1, 0, 0}, ln.Radians(90))),
		ln.NewTransformedShape(ln.NewCylinder(0.4, -2, 2), ln.Rotate(ln.Vector{0, 1, 0}, ln.Radians(90))),
	)
	for i := 0; i < 90; i += 2 {
		fmt.Println(i)
		scene := ln.Scene{}
		m := ln.Rotate(ln.Vector{0, 0, 1}, ln.Radians(float64(i)))
		scene.Add(ln.NewTransformedShape(shape, m))
		eye := ln.Vector{0, 6, 2}
		center := ln.Vector{0, 0, 0}
		up := ln.Vector{0, 0, 1}
		width := 750.0
		height := 750.0
		paths := scene.Render(eye, center, up, width, height, 20, 0.1, 100, 0.01)
		paths.WriteToPNG(fmt.Sprintf("out%03d.png", i), width, height)
	}
}