+++ /dev/null
-#!/usr/bin/env lua
-
---
--- CS5600 University of Utah
--- Charles McGarvey
--- mcgarvey@eng.utah.edu
---
-
--- Render a scene multiple times from different angles, like a camera
--- rotating around the object of a scene.
-
-local size = {w = 640, h = 480}
-local slices = 512
-
-local center = {x = 0, y = 1, z = 0}
-local look = {x = -2, y = -1, z = -2}
-local distance = 4
-local start = math.pi
-
-local scene = [[
-g teapot2.raw
-c 1.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 0.0
-t 0.0 0.0 0.0
-s 0.6 0.6 0.6
-g triangle.raw
-c 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1
-t 2.0 0.0 -2.0
-s 1.0 1.0 1.0
-g dragon.raw
-c 0.7 0.3 0.2 0.8 0.2 0.1 0.9 0.2 0.2
-t -2.0 -1.0 -2.0
-s 2.0 2.0 2.0
-g budda.raw
-c 0.1 0.2 0.7 0.1 0.3 0.9 0.2 0.1 0.8
-t 2.0 -1.5 2.0
-s 10.0 10.0 10.0
-g bunny.raw
-c 0.9 0.8 0.9 0.8 0.7 0.9 0.9 0.8 0.7
-t -2.0 -1.0 2.0
-s 10.0 10.0 10.0
-]]
-
-function vec_add(a, b)
- return {x = a.x + b.x, y = a.y + b.y, z = a.z + b.z}
-end
-
-function vec_scale(v, s)
- return {x = v.x * s, y = v.y * s, z = v.z * s}
-end
-
-function render(i, v)
- while true do
- local out = io.popen("./project2 -", "w")
- out:write(string.format([[
-U3
-%d %d
-%f %f %f
-%f %f %f
-0.0 1.0 0.0
-1.57 %f 0.1 1000.0
-%s
-]], size.w, size.h, v.x, v.y, v.z, look.x, look.y, look.z, size.w/size.h, scene))
- local a, b = coroutine.yield()
- out:close()
- os.rename("stdin.bmp", string.format("anim%04d.bmp", i))
- if a == null then
- break
- else
- i = a
- v = b
- end
- end
-end
-
-local threads = {}
-local jobs = 3
-for i = 1,jobs do
- table.insert(threads, coroutine.wrap(render))
-end
-
-for i = 0,(slices-1) do
- local t = start + 2 * i * math.pi / slices
- local v = {
- x = math.cos(t),
- y = 0,
- z = math.sin(t),
- }
- v = vec_add(vec_scale(v, distance), center)
- threads[(i % jobs) + 1](i, v)
-end
-
-for k,v in ipairs(threads) do
- v(null) -- clear up any leftover work
-end
-