JRuby For Knight -CgPrograming- > JRuby call JavaAPI > 2D/3D > Java3D > Texture


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

Texture 応援する 

BasicCode

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

[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation