It has taken a lot longer that it should have done, but finally I got round to exploring my vanilla processing
povwriter library in ruby processing. Thanks to the latest version of ruby-processing, we can use the vanilla processing library from the sketchbook folder. This works fine and dandy at present, but I can foresee potential conflicts with libraries that have been modified to run with processing-2.0, but then lots of libraries are probably going to get screwed along the way to the new version (
my povwriter library for one does not work with processing-2.0). Here's one of my povwriter example files translated to ruby:-
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
exporter.set_povray_path('/usr/local/bin/povray')
exporter.store_settings
no_stroke
sphere_detail(18)
end
def draw
lights
if (precord)
no_lights
no_loop
begin_raw("povexport.RawPovray", data_path(povfile))
end
if pview
background(0)
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
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)
exporter.sphere(60)
pop_matrix
end
end
end
end
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
Sketch now modified to use the excellent control panel of ruby-processing. Here I am using a custom sphere for raytracing, ideally I would just call the PovRAY sphere primitive, but that is a bit more complicated than it appears at first sight (see my vanilla processing blog). Presently everything is exported as a simple triangle mesh (ideally this would be a PovRAY mesh2 object). Make life easy for yourself and wrap drawing logic in a function such as render. Click on images below to see full size....
|
Live Display of PovRAY rendering |
|
Viewing Rendered image in processing sketch |
No comments:
Post a Comment