Base_texture_plane.rb
include Java
require 'texture_plane'
include_class 'java.applet.Applet'
include_class 'com.sun.j3d.utils.applet.MainFrame'
class Base_texture_plane
include_package 'java.awt'
include_package 'java.awt.event'
include_package 'javax.media.j3d'
include_package 'javax.vecmath'
include_package 'com.sun.j3d.utils.universe'
def initialize
@applet = Applet.new
init
end
def createSceneGraph
objRoot = BranchGroup.new
trans = Transform3D.new
trans.setTranslation(Vector3f.new(0.0, 0.0, -6.0))
tg0 = TransformGroup.new(trans)
trans.setTranslation(Vector3f.new(-2.2, 0.0, 0.0))
tg1 = TransformGroup.new(trans)
trans.rotX(-0.35)
tg2 = TransformGroup.new(trans)
trans.setTranslation(Vector3f.new(2.2, 0.0, 0.0))
tg3 = TransformGroup.new(trans)
trans.rotX(-0.7)
tg4 = TransformGroup.new(trans)
objRoot.addChild(tg0)
tg0.addChild(tg1)
tg1.addChild(Texture_plane.new("stripe.gif",@canvas).load)
tg0.addChild(tg2)
tg2.addChild(Texture_plane.new("brick.gif",@canvas).load)
tg0.addChild(tg3)
tg3.addChild(tg4)
tg4.addChild(Texture_plane.new("earth.jpg",@canvas).load)
objRoot
end
def init
@applet.setLayout(BorderLayout.new)
config = SimpleUniverse.getPreferredConfiguration
@canvas = Canvas3D.new(config)
@applet.add(@canvas,BorderLayout::CENTER)
scene = createSceneGraph
scene.compile
simpleU = SimpleUniverse.new(@canvas)
simpleU.getViewingPlatform.setNominalViewingTransform
simpleU.addBranchGraph(scene)
#simpleU.addBranchGraph(createSceneGraph)
end
def main
MainFrame.new(@applet,512,256)
end
end
Base_texture_plane.new.main
Texture_plane.rbs
include Java
class Texture_plane
import 'com.sun.j3d.utils.image.TextureLoader'
include_package 'javax.media.j3d'
include_package 'javax.vecmath'
def initialize(filename,canvas)
@sharp = Shape3D.new
@sharp.setGeometry(createGeometry)
appear = createAppearance(filename, canvas)
@sharp.setAppearance(appear)
end
def load
@sharp
end
def createGeometry
plane = QuadArray.new(4,GeometryArray::COORDINATES | GeometryArray::TEXTURE_COORDINATE_2)
point = Point3f.new(-1.0, 1.0, 0.0)
plane.setCoordinate(0,point)
point.set(-1.0, -1.0, 0.0)
plane.setCoordinate(1,point)
point.set( 1.0, -1.0, 0.0)
plane.setCoordinate(2,point)
point.set( 1.0, 1.0, 0.0)
plane.setCoordinate(3,point)
q = TexCoord2f.new(0.0, 1.0)
plane.setTextureCoordinate( 0, 0, q)
q.set(0.0, 0.0)
plane.setTextureCoordinate( 0, 1, q)
q.set(1.0, 0.0)
plane.setTextureCoordinate( 0, 2, q)
q.set(1.0, 1.0)
plane.setTextureCoordinate( 0, 3, q)
return plane
end
def createAppearance(filename,canvas)
appear = Appearance.new()
loader = TextureLoader.new(filename, canvas)
image = loader.getImage()
p image
if(image == nil)
puts("load failed for texture: "+filename)
end
puts("Image width = #{image.getWidth}")
puts("Image height = #{image.getHeight}")
texture = Texture2D.new(Texture::BASE_LEVEL, Texture::RGBA, image.getWidth, image.getHeight)
texture.setImage(0, image)
texture.setEnable(true)
texture.setMagFilter(Texture::NICEST)
appear.setTexture(texture)
appear.setTransparencyAttributes(TransparencyAttributes.new(TransparencyAttributes::FASTEST, 0.1))
return appear
end
end