Hello, Java 3D(Scala) World!

Posted on 11月 18th, 2012 by cx20

Java 3D

Java 3D は Java による 3D グラフィックライブラリである。
以下は Scala による Java 3D の使用例となっている。

ソースコード

import javax.media.j3d._
import javax.swing.JFrame
import javax.vecmath.Vector3f
import javax.vecmath.Color3f
import java.awt.BorderLayout
import java.awt.GraphicsConfiguration
import java.awt.Font
import com.sun.j3d.utils.universe.SimpleUniverse
 
object Hello {
    def main(args: Array[String]) {
        var frame = new HelloFrame("Hello, World")
        frame.setVisible(true)
    }
}
 
class HelloFrame( title: String ) extends JFrame {
    setTitle(title)
    setSize(640, 480)
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )
    var canvas3D = createCanvas3D()
    var scene = createSceneGraph()
    connect(canvas3D, scene)
 
    def createCanvas3D(): Canvas3D = {
        getContentPane().setLayout(new BorderLayout())
        var config = SimpleUniverse.getPreferredConfiguration()
        var canvas3D = new Canvas3D(config)
        getContentPane().add(canvas3D)
        return canvas3D
    }
 
    def createSceneGraph(): BranchGroup = {
        var objRoot = new BranchGroup()
        var mover = moveTextBack()
        var spinner = createSpinner()
        var rotator = new RotationInterpolator(new Alpha(-1, 4000), spinner, new Transform3D(), 0.0f, Math.Pi.toFloat * 2.0f)
        rotator.setSchedulingBounds( new BoundingSphere() )
        spinner.addChild(rotator)
        objRoot.addChild(mover)
        mover.addChild(spinner)
        spinner.addChild( createTextShape())
        setLighting(mover)
        return objRoot
    }
 
    def createSpinner(): TransformGroup = {
        var spinner = new TransformGroup()
        spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE)
        return spinner
    }
 
    def moveTextBack(): TransformGroup = {
        var transform3D = new Transform3D()
        transform3D.setTranslation(new Vector3f(0.0f, 0.0f, -10.0f))
        return new TransformGroup(transform3D)
    }
 
    def createTextShape(): Shape3D = {
        var textAppear = new Appearance()
        textAppear.setMaterial(new Material())
        var font3D = new Font3D(new Font("MS Pゴシック", Font.PLAIN, 1), new FontExtrusion())
        var textGeom = new Text3D(font3D, new String("Hello, Java 3D World!"))
        textGeom.setAlignment(Text3D.ALIGN_CENTER)
        var textShape = new Shape3D()
        textShape.setGeometry(textGeom)
        textShape.setAppearance(textAppear)
        return textShape
    }
 
    def setLighting(objMove: TransformGroup) {
        var light = new DirectionalLight()
        light.setInfluencingBounds(new BoundingSphere())
        light.setDirection(new Vector3f(0.0f,0.0f,-1.0f))
        light.setColor(new Color3f(1.0f, 1.0f, 1.0f))
        objMove.addChild(light)
    }
 
    def connect(canvas3D: Canvas3D, scene: BranchGroup) {
        var universe = new SimpleUniverse(canvas3D)
        universe.getViewingPlatform().setNominalViewingTransform()
        universe.addBranchGraph(scene)
    }
}

実行方法

C:¥> scalac Hello.scala
C:¥> scala Hello

実行結果

+------------------------------------------+
|Hello, World!                    [_][~][X]|
+------------------------------------------+
|Hello, Java 3D World!                     |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
+------------------------------------------+

Tags:

Categories: Java, Java 3D, Scala

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing