JRubyでJava3D その1、改1

Java3DRubyっぽく扱うように、簡単なモジュールを作ってみた。


def initApplet()
rApplet do |applet|
canvas = rSimpleUniverseCanvas
scene = createSceneGraph()
scene.compile()
rSimpleUniverse(canvas){|universe|;universe.addBranchGraph(scene);}
applet.add("Center", canvas)
end
end

前回に比べて、initAppletの内部が一寸Rubyっぽい^^

挑戦「一日一改善」

JRuby3D.rb


require 'java'

module JRuby3D
include_package 'java.applet'
include_package 'javax.media.j3d'

include_class 'java.awt.BorderLayout'

def rApplet
applet = Applet.new()
applet.setLayout(BorderLayout.new())

yield applet

return applet
end

def rSimpleUniverse(canvas)
simpleUniverse = SimpleUniverse.new(canvas)
simpleUniverse.getViewingPlatform().setNominalViewingTransform()

yield simpleUniverse

return simpleUniverse
end

include_class 'com.sun.j3d.utils.universe.SimpleUniverse'

def rSimpleUniverseCanvas
config = SimpleUniverse.getPreferredConfiguration()
return Canvas3D.new(config)
end


def rBranchGroup
bg = BranchGroup.new()
yield bg
return bg
end
end


module Hello3D
include_class 'com.sun.j3d.utils.geometry.ColorCube'

include JRuby3D

def initApplet()
rApplet do |applet|
canvas = rSimpleUniverseCanvas


scene = createSceneGraph()
scene.compile()

rSimpleUniverse(canvas){|universe|;universe.addBranchGraph(scene);}

applet.add("Center", canvas)
end
end

include_package 'javax.media.j3d'

def createSceneGraph()
rBranchGroup{|objRoot|

rotate = Transform3D.new()
tempRotate = Transform3D.new()

rotate.rotX(Math::PI/4.0)
tempRotate.rotY(Math::PI/5.0)
rotate.mul(tempRotate)

objRotate = TransformGroup.new(rotate);

objSpin = TransformGroup.new();
objSpin.setCapability(TransformGroup::ALLOW_TRANSFORM_WRITE)

objRoot.addChild(objRotate)
objRotate.addChild(objSpin)

objSpin.addChild(ColorCube.new(0.4))

yAxis = Transform3D.new()
rotationAlpha = Alpha.new(-1, 4000)

rotator = RotationInterpolator.new(rotationAlpha, objSpin, yAxis, 0.0, Math::PI*2.0)

bounds = BoundingSphere.new()

rotator.setSchedulingBounds(bounds)
objSpin.addChild(rotator)
}
end
end

java3dtest.rb


require 'JRuby3D'

include Hello3D

MainFram = com.sun.j3d.utils.applet.MainFrame
frame = MainFram.new(initApplet(), 256, 256)