Archive for 1月 5th, 2013

  1. Hello, Java 3D(Jasmin) World!

    Posted on 1月 5th, 2013 by cx20

    Java 3D

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

    ソースコード

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Sun Dec 02 01:53:35 JST 2012
     
    .bytecode 51.0
    .source Hello.java
    .class public Hello
    .super javax/swing/JFrame
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 3
        .limit locals 2
        .var 0 is arg0 [Ljava/lang/String; from Label0 to Label1
     
        Label0:
    .line 12
           0: new Hello
           3: dup
           4: ldc "Hello, World"
           6: invokespecial Hello/<init>(Ljava/lang/String;)V
           9: astore_1
     
        .line 13
          10: aload_1
          11: iconst_1
          12: invokevirtual Hello/setVisible(Z)V
     
        Label1:
    .line 14
          15: return
     
    .end method
     
    .method public <init>(Ljava/lang/String;)V
        .limit stack 3
        .limit locals 4
        .var 0 is this LHello; from Label0 to Label1
        .var 1 is arg0 Ljava/lang/String; from Label0 to Label1
     
        Label0:
    .line 17
           0: aload_0
           1: aload_1
           2: invokespecial javax/swing/JFrame/<init>(Ljava/lang/String;)V
     
        .line 18
           5: aload_0
           6: sipush 640
           9: sipush 480
          12: invokevirtual Hello/setSize(II)V
     
        .line 19
          15: aload_0
          16: iconst_3
          17: invokevirtual Hello/setDefaultCloseOperation(I)V
     
        .line 20
          20: aload_0
          21: invokespecial Hello/createCanvas3D()Ljavax/media/j3d/Canvas3D;
          24: astore_2
     
        .line 21
          25: aload_0
          26: invokevirtual Hello/createSceneGraph()Ljavax/media/j3d/BranchGroup;
          29: astore_3
     
        .line 22
          30: aload_0
          31: aload_2
          32: aload_3
          33: invokespecial Hello/connect(Ljavax/media/j3d/Canvas3D;Ljavax/media/j3d/BranchGroup;)V
     
        Label1:
    .line 23
          36: return
     
    .end method
     
    .method private createCanvas3D()Ljavax/media/j3d/Canvas3D;
        .limit stack 3
        .limit locals 3
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 26
           0: aload_0
           1: invokevirtual Hello/getContentPane()Ljava/awt/Container;
           4: new java/awt/BorderLayout
           7: dup
           8: invokespecial java/awt/BorderLayout/<init>()V
          11: invokevirtual java/awt/Container/setLayout(Ljava/awt/LayoutManager;)V
     
        .line 27
          14: invokestatic com/sun/j3d/utils/universe/SimpleUniverse/getPreferredConfiguration()Ljava/awt/GraphicsConfiguration;
          17: astore_1
     
        .line 28
          18: new javax/media/j3d/Canvas3D
          21: dup
          22: aload_1
          23: invokespecial javax/media/j3d/Canvas3D/<init>(Ljava/awt/GraphicsConfiguration;)V
          26: astore_2
     
        .line 29
          27: aload_0
          28: invokevirtual Hello/getContentPane()Ljava/awt/Container;
          31: aload_2
          32: invokevirtual java/awt/Container/add(Ljava/awt/Component;)Ljava/awt/Component;
          35: pop
     
        .line 30
          36: aload_2
     
        Label1:
          37: areturn
     
    .end method
     
    .method public createSceneGraph()Ljavax/media/j3d/BranchGroup;
        .limit stack 7
        .limit locals 5
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 34
           0: new javax/media/j3d/BranchGroup
           3: dup
           4: invokespecial javax/media/j3d/BranchGroup/<init>()V
           7: astore_1
     
        .line 35
           8: aload_0
           9: invokespecial Hello/moveTextBack()Ljavax/media/j3d/TransformGroup;
          12: astore_2
     
        .line 36
          13: aload_0
          14: invokespecial Hello/createSpinner()Ljavax/media/j3d/TransformGroup;
          17: astore_3
     
        .line 37
          18: new javax/media/j3d/RotationInterpolator
          21: dup
          22: new javax/media/j3d/Alpha
          25: dup
          26: iconst_m1
          27: ldc2_w 4000
          30: invokespecial javax/media/j3d/Alpha/<init>(IJ)V
          33: aload_3
          34: new javax/media/j3d/Transform3D
          37: dup
          38: invokespecial javax/media/j3d/Transform3D/<init>()V
          41: fconst_0
          42: ldc 6.2831855
          44: invokespecial javax/media/j3d/RotationInterpolator/<init>(Ljavax/media/j3d/Alpha;Ljavax/media/j3d/TransformGroup;Ljavax/media/j3d/Transform3D;FF)V
          47: astore 4
     
        .line 38
          49: aload 4
          51: new javax/media/j3d/BoundingSphere
          54: dup
          55: invokespecial javax/media/j3d/BoundingSphere/<init>()V
          58: invokevirtual javax/media/j3d/RotationInterpolator/setSchedulingBounds(Ljavax/media/j3d/Bounds;)V
     
        .line 39
          61: aload_3
          62: aload 4
          64: invokevirtual javax/media/j3d/TransformGroup/addChild(Ljavax/media/j3d/Node;)V
     
        .line 40
          67: aload_1
          68: aload_2
          69: invokevirtual javax/media/j3d/BranchGroup/addChild(Ljavax/media/j3d/Node;)V
     
        .line 41
          72: aload_2
          73: aload_3
          74: invokevirtual javax/media/j3d/TransformGroup/addChild(Ljavax/media/j3d/Node;)V
     
        .line 42
          77: aload_3
          78: aload_0
          79: invokespecial Hello/createTextShape()Ljavax/media/j3d/Shape3D;
          82: invokevirtual javax/media/j3d/TransformGroup/addChild(Ljavax/media/j3d/Node;)V
     
        .line 43
          85: aload_0
          86: aload_2
          87: invokespecial Hello/setLighting(Ljavax/media/j3d/TransformGroup;)V
     
        .line 44
          90: aload_1
     
        Label1:
          91: areturn
     
    .end method
     
    .method private createSpinner()Ljavax/media/j3d/TransformGroup;
        .limit stack 2
        .limit locals 2
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 48
           0: new javax/media/j3d/TransformGroup
           3: dup
           4: invokespecial javax/media/j3d/TransformGroup/<init>()V
           7: astore_1
     
        .line 49
           8: aload_1
           9: bipush 18
          11: invokevirtual javax/media/j3d/TransformGroup/setCapability(I)V
     
        .line 50
          14: aload_1
     
        Label1:
          15: areturn
     
    .end method
     
    .method private moveTextBack()Ljavax/media/j3d/TransformGroup;
        .limit stack 6
        .limit locals 2
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 54
           0: new javax/media/j3d/Transform3D
           3: dup
           4: invokespecial javax/media/j3d/Transform3D/<init>()V
           7: astore_1
     
        .line 55
           8: aload_1
           9: new javax/vecmath/Vector3f
          12: dup
          13: fconst_0
          14: fconst_0
          15: ldc -10.0
          17: invokespecial javax/vecmath/Vector3f/<init>(FFF)V
          20: invokevirtual javax/media/j3d/Transform3D/setTranslation(Ljavax/vecmath/Vector3f;)V
     
        .line 56
          23: new javax/media/j3d/TransformGroup
          26: dup
          27: aload_1
          28: invokespecial javax/media/j3d/TransformGroup/<init>(Ljavax/media/j3d/Transform3D;)V
     
        Label1:
          31: areturn
     
    .end method
     
    .method private createTextShape()Ljavax/media/j3d/Shape3D;
        .limit stack 7
        .limit locals 5
        .var 0 is this LHello; from Label0 to Label1
     
        Label0:
    .line 60
           0: new javax/media/j3d/Appearance
           3: dup
           4: invokespecial javax/media/j3d/Appearance/<init>()V
           7: astore_1
     
        .line 61
           8: aload_1
           9: new javax/media/j3d/Material
          12: dup
          13: invokespecial javax/media/j3d/Material/<init>()V
          16: invokevirtual javax/media/j3d/Appearance/setMaterial(Ljavax/media/j3d/Material;)V
     
        .line 62
          19: new javax/media/j3d/Font3D
          22: dup
          23: new java/awt/Font
          26: dup
          27: ldc "MS Pゴシック"
          29: iconst_0
          30: iconst_1
          31: invokespecial java/awt/Font/<init>(Ljava/lang/String;II)V
          34: new javax/media/j3d/FontExtrusion
          37: dup
          38: invokespecial javax/media/j3d/FontExtrusion/<init>()V
          41: invokespecial javax/media/j3d/Font3D/<init>(Ljava/awt/Font;Ljavax/media/j3d/FontExtrusion;)V
          44: astore_2
     
        .line 63
          45: new javax/media/j3d/Text3D
          48: dup
          49: aload_2
          50: new java/lang/String
          53: dup
          54: ldc "Hello, Java 3D World!"
          56: invokespecial java/lang/String/<init>(Ljava/lang/String;)V
          59: invokespecial javax/media/j3d/Text3D/<init>(Ljavax/media/j3d/Font3D;Ljava/lang/String;)V
          62: astore_3
     
        .line 64
          63: aload_3
          64: iconst_0
          65: invokevirtual javax/media/j3d/Text3D/setAlignment(I)V
     
        .line 65
          68: new javax/media/j3d/Shape3D
          71: dup
          72: invokespecial javax/media/j3d/Shape3D/<init>()V
          75: astore 4
     
        .line 66
          77: aload 4
          79: aload_3
          80: invokevirtual javax/media/j3d/Shape3D/setGeometry(Ljavax/media/j3d/Geometry;)V
     
        .line 67
          83: aload 4
          85: aload_1
          86: invokevirtual javax/media/j3d/Shape3D/setAppearance(Ljavax/media/j3d/Appearance;)V
     
        .line 68
          89: aload 4
     
        Label1:
          91: areturn
     
    .end method
     
    .method private setLighting(Ljavax/media/j3d/TransformGroup;)V
        .limit stack 6
        .limit locals 3
        .var 0 is this LHello; from Label0 to Label1
        .var 1 is arg0 Ljavax/media/j3d/TransformGroup; from Label0 to Label1
     
        Label0:
    .line 72
           0: new javax/media/j3d/DirectionalLight
           3: dup
           4: invokespecial javax/media/j3d/DirectionalLight/<init>()V
           7: astore_2
     
        .line 73
           8: aload_2
           9: new javax/media/j3d/BoundingSphere
          12: dup
          13: invokespecial javax/media/j3d/BoundingSphere/<init>()V
          16: invokevirtual javax/media/j3d/DirectionalLight/setInfluencingBounds(Ljavax/media/j3d/Bounds;)V
     
        .line 74
          19: aload_2
          20: new javax/vecmath/Vector3f
          23: dup
          24: fconst_0
          25: fconst_0
          26: ldc -1.0
          28: invokespecial javax/vecmath/Vector3f/<init>(FFF)V
          31: invokevirtual javax/media/j3d/DirectionalLight/setDirection(Ljavax/vecmath/Vector3f;)V
     
        .line 75
          34: aload_2
          35: new javax/vecmath/Color3f
          38: dup
          39: fconst_1
          40: fconst_1
          41: fconst_1
          42: invokespecial javax/vecmath/Color3f/<init>(FFF)V
          45: invokevirtual javax/media/j3d/DirectionalLight/setColor(Ljavax/vecmath/Color3f;)V
     
        .line 76
          48: aload_1
          49: aload_2
          50: invokevirtual javax/media/j3d/TransformGroup/addChild(Ljavax/media/j3d/Node;)V
     
        Label1:
    .line 77
          53: return
     
    .end method
     
    .method private connect(Ljavax/media/j3d/Canvas3D;Ljavax/media/j3d/BranchGroup;)V
        .limit stack 3
        .limit locals 4
        .var 0 is this LHello; from Label0 to Label1
        .var 1 is arg0 Ljavax/media/j3d/Canvas3D; from Label0 to Label1
        .var 2 is arg1 Ljavax/media/j3d/BranchGroup; from Label0 to Label1
     
        Label0:
    .line 80
           0: new com/sun/j3d/utils/universe/SimpleUniverse
           3: dup
           4: aload_1
           5: invokespecial com/sun/j3d/utils/universe/SimpleUniverse/<init>(Ljavax/media/j3d/Canvas3D;)V
           8: astore_3
     
        .line 81
           9: aload_3
          10: invokevirtual com/sun/j3d/utils/universe/SimpleUniverse/getViewingPlatform()Lcom/sun/j3d/utils/universe/ViewingPlatform;
          13: invokevirtual com/sun/j3d/utils/universe/ViewingPlatform/setNominalViewingTransform()V
     
        .line 82
          16: aload_3
          17: aload_2
          18: invokevirtual com/sun/j3d/utils/universe/SimpleUniverse/addBranchGraph(Ljavax/media/j3d/BranchGroup;)V
     
        Label1:
    .line 83
          21: return
     
    .end method

    コンパイル&実行方法

    C:¥> java -jar jasmin.jar Hello.j
    C:¥> javaw Hello

    実行結果

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