See previous post for how to setup java libraries. If you are mad like me, and have updated sunflow to use the latest janino compiler you should require the commons-compiler.jar as well.
# sunflow_test.rb NB: run this script directly with jruby
require 'library/sunflow_api/library/sunflow_api.jar'
require 'library/sunflow/library/sunflow.jar'
require 'library/sunflow/library/janino.jar'
class SunflowTest
API = Java::Com::briansteen::SunflowAPIAPI
SMath = Java::Org::sunflow::math
attr_reader :sunflow
def initialize width = 500, height = 500
@sunflow = API.new
sunflow.set_width(width)
sunflow.set_height(height)
sunflow.set_camera_position(0, 2.5, -5)
sunflow.set_camera_target(0, 0, 0)
sunflow.set_thinlens_camera("thinLensCamera", 50, width/height)
end
def create_scene
sunflow.draw_plane("ground", SMath::Point3.new(0,-3.5,0), SMath::Vector3.new(0, 1, 0))
sunflow.draw_sphere_flake("mySphereFlake", 20, SMath::Vector3.new(0, 1, 0), 1)
end
def render_scene filename = nil
sunflow.setPathTracingGIEngine 6
# render
sunflow.render unless filename
if filename
begin # test for dodgy filename/path
file = File.new(filename, "w")
file.close
sunflow.render(filename) # save as png image
rescue
puts "Warning #{filename} is not writable"
end
end
end
end
test = SunflowTest.new
test.create_scene
test.render_scene
Experiments with ruby-processing (processing-2.2.1) and JRubyArt for processing-3.0
Showing posts with label sunflowAPIAPI. Show all posts
Showing posts with label sunflowAPIAPI. Show all posts
Friday, 1 October 2010
SunflowAPIAPI test example using jruby
Labels:
jruby,
sunflowAPIAPI
Thursday, 30 September 2010
Basic Hair Example SunflowAPIAPI just using jruby
It occurred to me that all I was getting from using ruby-processing in my previous post was the ruby processing interface to the libraries. So here is the straightforward jruby version....
Screen output very much as before (smaller) hence not included there. For your convenience I present an embedded gist (click on view raw to copy).
See previous post for how to setup java libraries.
Example translated from java version (by Christopher Warnow?) included in the subversion checkout of the sunflowAPIAPI.
Screen output very much as before (smaller) hence not included there. For your convenience I present an embedded gist (click on view raw to copy).
See previous post for how to setup java libraries.
Example translated from java version (by Christopher Warnow?) included in the subversion checkout of the sunflowAPIAPI.
Labels:
jruby,
sunflowAPIAPI
Basic Hair Example SunflowAPIAPI in ruby processing
See previous post for how to setup java libraries.
# basic_hair.rb run with 'rp5 run script.rb'
class BasicHair < Processing::App
load_libraries :sunflow_api, :sunflow
include_package 'com.briansteen'
include_package 'org.sunflow.math'
include_package 'java.awt'
API = Java::Com::briansteen::SunflowAPIAPI
SMath = Java::Org::sunflow::math
JColor = java.awt.Color
WIDTH = 640
HEIGHT = 480
P_AMOUNT = 20
def setup
# create a new API instance
@sunflow = API.new
# set width and height
@sunflow.set_width(WIDTH)
@sunflow.set_height(HEIGHT)
# set background color
@sunflow.set_background(1, 1, 1)
# set camera
@sunflow.set_camera_position(0, 7, 5)
@sunflow.set_camera_target(2, 0.5, 0)
@sunflow.set_thinlens_camera("thinLensCamera", 50, WIDTH/HEIGHT)
# set basic light
@sunflow.set_point_light("myPointLight", SMath::Point3.new(0, 5, 5),
JColor.new(255, 255, 255))
@sunflow.set_directional_light("myDirectionalLight", SMath::Point3.new(-2, 3, 0),
SMath::Vector3.new(0, 0, 0), 3, JColor.new(1, 1, 1))
# @sunflow.setSphereLight("mySphereLight", SMath::Point3.new(0, 30, -5),
# JColor.new(0, 0, 255), 32, 10)
# draw a ground plane
@sunflow.draw_plane("ground", SMath::Point3.new(0, 0, 0), SMath::Vector3.new(0, 1, 0))
# coordinates array
hair_widths = [0.025]
@sunflow.draw_box("boxname", 0, 0, 0, 1)
# create particle coordinates
350.times do |j|
# particle start position
particle_x = Math.cos(j*0.5)*j*0.0015
particle_y = 0
particle_z = Math.sin(j*0.5)*j*0.0015
hair_coordinates = Array.new(P_AMOUNT*3)
array_index = -1
P_AMOUNT.times do |i|
particle_x += 0.1 + Math.cos(i * 0.15 + j*0.05) * 0.13
particle_y -= Math.sin(particle_z*0.01 + j*0.05)*0.125 +
Math.cos(i*0.5 + particle_y)*0.125
particle_z += Math.sin(i)*0.25 + particle_y*0.01
hair_coordinates[array_index += 1] = particle_x
hair_coordinates[array_index += 1] = particle_y
hair_coordinates[array_index += 1] = particle_z
end
# set ambient occlusion shader
@sunflow.setAmbientOcclusionShader("myAmbientOcclusionShader#{j}", JColor.new(55,55,55),
JColor.new(0,0,0), 16, 1)
# set glass shader
# @sunflow.setGlassShader("myGlassShader", JColor.new(1,1,1), 2.5, 3, JColor.new(1,1,1))
# set shiny-diffuse shader
# @sunflow.setShinyDiffuseShader("myShinyShader", JColor.new(55,55,55), 0.8)
# draw object
@sunflow.drawHair("hair#{j}", P_AMOUNT - 2, hair_coordinates.to_java(:float),
hair_widths.to_java(:float))
end
@sunflow.setIrradianceCacheGIEngine(32, 0.4, 1, 15, nil)
# render
@sunflow.render() # display in sunflow window
# @sunflow.render("BasicHair.png") # save as png image
end
def draw
exit
end
end
# basic_hair.rb run with 'rp5 run script.rb'
class BasicHair < Processing::App
load_libraries :sunflow_api, :sunflow
include_package 'com.briansteen'
include_package 'org.sunflow.math'
include_package 'java.awt'
API = Java::Com::briansteen::SunflowAPIAPI
SMath = Java::Org::sunflow::math
JColor = java.awt.Color
WIDTH = 640
HEIGHT = 480
P_AMOUNT = 20
def setup
# create a new API instance
@sunflow = API.new
# set width and height
@sunflow.set_width(WIDTH)
@sunflow.set_height(HEIGHT)
# set background color
@sunflow.set_background(1, 1, 1)
# set camera
@sunflow.set_camera_position(0, 7, 5)
@sunflow.set_camera_target(2, 0.5, 0)
@sunflow.set_thinlens_camera("thinLensCamera", 50, WIDTH/HEIGHT)
# set basic light
@sunflow.set_point_light("myPointLight", SMath::Point3.new(0, 5, 5),
JColor.new(255, 255, 255))
@sunflow.set_directional_light("myDirectionalLight", SMath::Point3.new(-2, 3, 0),
SMath::Vector3.new(0, 0, 0), 3, JColor.new(1, 1, 1))
# @sunflow.setSphereLight("mySphereLight", SMath::Point3.new(0, 30, -5),
# JColor.new(0, 0, 255), 32, 10)
# draw a ground plane
@sunflow.draw_plane("ground", SMath::Point3.new(0, 0, 0), SMath::Vector3.new(0, 1, 0))
# coordinates array
hair_widths = [0.025]
@sunflow.draw_box("boxname", 0, 0, 0, 1)
# create particle coordinates
350.times do |j|
# particle start position
particle_x = Math.cos(j*0.5)*j*0.0015
particle_y = 0
particle_z = Math.sin(j*0.5)*j*0.0015
hair_coordinates = Array.new(P_AMOUNT*3)
array_index = -1
P_AMOUNT.times do |i|
particle_x += 0.1 + Math.cos(i * 0.15 + j*0.05) * 0.13
particle_y -= Math.sin(particle_z*0.01 + j*0.05)*0.125 +
Math.cos(i*0.5 + particle_y)*0.125
particle_z += Math.sin(i)*0.25 + particle_y*0.01
hair_coordinates[array_index += 1] = particle_x
hair_coordinates[array_index += 1] = particle_y
hair_coordinates[array_index += 1] = particle_z
end
# set ambient occlusion shader
@sunflow.setAmbientOcclusionShader("myAmbientOcclusionShader#{j}", JColor.new(55,55,55),
JColor.new(0,0,0), 16, 1)
# set glass shader
# @sunflow.setGlassShader("myGlassShader", JColor.new(1,1,1), 2.5, 3, JColor.new(1,1,1))
# set shiny-diffuse shader
# @sunflow.setShinyDiffuseShader("myShinyShader", JColor.new(55,55,55), 0.8)
# draw object
@sunflow.drawHair("hair#{j}", P_AMOUNT - 2, hair_coordinates.to_java(:float),
hair_widths.to_java(:float))
end
@sunflow.setIrradianceCacheGIEngine(32, 0.4, 1, 15, nil)
# render
@sunflow.render() # display in sunflow window
# @sunflow.render("BasicHair.png") # save as png image
end
def draw
exit
end
end
Labels:
ruby processing,
sunflowAPIAPI
SunflowAPIAPI in ruby processing
# sunflow_test.rb
class SunflowTest < Processing::App
load_libraries :sunflow_api, :sunflow
include_package 'com.briansteen'
include_package "org.sunflow.math"
API = Java::Com::briansteen::SunflowAPIAPI
SMath = Java::Org::sunflow::math
WIDTH = 500
HEIGHT = 500
def setup
@sunflow = API.new
@sunflow.set_width(WIDTH)
@sunflow.set_height(HEIGHT)
@sunflow.set_camera_position(0, 2.5, -5)
@sunflow.set_camera_target(0, 0, 0)
@sunflow.set_thinlens_camera("thinLensCamera", 50, WIDTH/HEIGHT)
@sunflow.draw_plane("ground", SMath::Point3.new(0,-3.5,0), SMath::Vector3.new(0, 1, 0))
@sunflow.draw_sphere_flake("mySphereFlake", 20, SMath::Vector3.new(0, 1, 0), 1)
@sunflow.setPathTracingGIEngine 6
@sunflow.render "SunflowTestRender.png"
end
def draw
exit
end
end
SunflowTest.new :title => "Sunflow Test"
This example was copied from amnon, following his recent posting on the processing discussion boards.
Checkout the sunflowapapi source (created by Christopher Warnow?) as follows:-
svn checkout http://sunflowapiapi.googlecode.com/svn/trunk/ sunflowapiapi-read-only
Get the sunflow libraries here, NB must be version 0.07.3:-
http://sunflow.sourceforge.net
Or possible here for Windows users:-
http://www.polyquark.com/opensource
The usual library setup required compile and jar the sunflowapiapi code into sunflow_api.jar nest that as follows in a folder library, in a folder sunflow_api in the library folder (in the directory where the sketch you want to run is stored). Do similar for the sunflow.jar put the janino.jar in the same folder. The janino.jar provides a fast java compiler, version is 2.~ is supplied with the sunflow download, however with a few minor modifications sunflow can be updated to use the latest version 2.6.1 (basically include the commons-compiler.jar, and remove a couple of deprecated exception types from the code and update the CompileException to the commons compiler version org.codehaus.commons.compiler.CompileException, do this in an ide unless you are crazy).
Labels:
ruby processing,
sunflow,
sunflowAPIAPI
Subscribe to:
Comments (Atom)
Followers
About Me
- monkstone
- I have developed JRubyArt and propane new versions of ruby-processing for JRuby-9.1.5.0 and processing-3.2.2

