Created
November 17, 2011 20:20
-
-
Save monkstone/1374393 to your computer and use it in GitHub Desktop.
Testing My Povwriter Library in ruby-processing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Demonstrates how you can use my povwriter libary | |
# in Ruby-Processing, to export to PovRAY | |
load_libraries 'povwriter', 'control_panel' | |
import 'povexport' | |
DATA = [-1, 0, 1] | |
attr_reader :exporter, :precord, :pquality, :type, :pview, :memory, :povfile | |
def setup | |
size 300, 300, P3D | |
@povfile = "balls.pov" | |
@precord = false | |
@exporter = PovExporter.new self | |
control_panel do |c| | |
c.title = "Render as PovRAY" | |
c.menu(:quality, ['low', 'medium', 'high', 'highest'], 'high') {|m| load_quality_choice(m) } | |
c.menu(:image_type, ['png', 'jpeg', 'tga'], 'png') {|m| load_image_type(m) } | |
c.menu(:memory, ['low', 'default', 'high', 'none'], 'default') {|m| load_memory_choice(m) } | |
c.checkbox :antialias | |
c.button :choose_template | |
c.button :record | |
c.button :raytrace | |
c.button :view | |
c.button :exit! | |
end | |
# uncomment next enter the path to povray executable on mac/windows/linux (or possibly jedit linux) | |
exporter.set_povray_path('/usr/local/bin/povray') # choice is saved in '.povwriter/povwriter.properties' | |
# uncomment following line to adjust degenerate triangle cut off (area squared) | |
# export.set_epsilon("0.001") | |
exporter.store_settings # uncomment this line to save settings | |
no_stroke | |
sphere_detail(18) | |
end | |
def draw | |
lights # this needs to be outside the record loop | |
if (precord) | |
no_lights # let PovRAY do the lighting | |
no_loop # don't loop while recording sketch | |
begin_raw("povexport.RawPovray", data_path(povfile)) | |
end | |
if pview | |
background(0) # clear the screen | |
image(load_image(data_path("balls.png")), 0, 0) | |
no_loop | |
else | |
render | |
end | |
if (precord) | |
end_raw | |
@precord = false | |
puts "done recording" | |
loop | |
end | |
end | |
def exit! | |
exit 0 | |
end | |
def render() | |
background(0) | |
translate(width*0.7, height/2, -width) | |
DATA.each do |y| | |
DATA.each do |x| | |
DATA.each do |z| | |
push_matrix | |
translate(120*x, 120*y, 120*z) | |
fill(rand * 255, rand * 255, rand * 255) # a nice test for my colorFactory class | |
exporter.sphere(60) # use a better sphere primitive for ray tracing | |
pop_matrix | |
end | |
end | |
end | |
end | |
################################### Independent of sketch ############################ | |
def record | |
@precord = true | |
end | |
def raytrace | |
Kernel.system([exporter.get_povray_path, povray_options, povray_scene].join(" ")) | |
end | |
def choose_template | |
exporter.choose_template | |
end | |
def view | |
@pview = true | |
end | |
def povray_scene | |
return "+I#{data_path(povfile)}" | |
end | |
def povray_options | |
aa = @antialias ? "+A" : "" | |
return "+IM#{memory} +W#{width} +H#{height} +Q#{pquality} #{aa} +F#{type}" | |
end | |
def load_quality_choice(item) | |
map = {'low' => 0, 'medium' => 5, 'high' => 9, 'highest' => 11} | |
@pquality = map[item] | |
end | |
def load_memory_choice(item) | |
map = {'low' => 56, 'default' => 128, 'high' => 1024, 'none' => 0} | |
@memory = map[item] | |
end | |
def load_image_type(item) | |
map = {'png' => 'N', 'jpeg' => 'J', 'tga' => 'C'} | |
@type = map[item] | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment