[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:02020] Swing と Java3D



------------------------- infoseek ML Sponsor --------------------------
■比べて下さい!  オリックスVIPローンカードは、こんなにもオトク
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     実質年率8.7%からご利用可能 ご利用限度額最高300万円  
 あなたの街の【銀行】【郵便局】【コンビニ】などでご利用頂けます。
     http://bishop.va-cats.com/cgi-bin/vts/va0/ID=001191802537 
------------------------------------------------------------------------

はじめて投稿させていただきます。
古川と申します。

現在、Java3DとSwingにてプログラムを作成しております。

Heavy component と Light component の混在が原因で
JInternalFrameに描画したJava3Dの表示がおかしくなることに
ついて、過去にこのMLでも取り上げられました。
http://www.javaopen.org/j3dbook/mlarchive/msg00196.html

PopupMenuについては解決できるようですが、
PopupMenu以外のウィンドウでも正しく表示したいと
思っています。

Webでいろいろ調べ、以下のページを参考にして
OffScreenレンダリングを利用した実装を試みましたが、
見慣れないエラーが発生してうまく動作しません。
(末尾にエラーメッセージとソースを添付します)
http://mikilab.doshisha.ac.jp/dia/research/person/kouta/indi/report/3dview15
.html

エラーの原因をいろいろ調べてみたのですが、
どうもsetOffScreenBufferの辺りでエラーに
なっているようです。

参考にすべき情報があまり見当たらないので、
OffScreenレンダリングを利用したJInternalFrame内の
実装に関する書籍、HP等の情報をご存知の方が
いらっしゃいましたらお教え願えないでしょうか?

開発環境は
Red Hat Linux 7.1
j2sdk-1_4_0
java3d-sdk-1.3
です。

Javaは最近使い始めたばかりですが、
よろしくお願いいたします。

-----------エラーメッセージ--------------------

An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : 11 occurred at PC=0x4D3F223E
Function=Java_javax_media_j3d_Canvas3D_createOffScreenBuffer+0x25A
Library=/usr/java/j2sdk1.4.0/jre/lib/i386/libJ3D.so

Current Java thread:
 at javax.media.j3d.Canvas3D.createOffScreenBuffer(Native Method)
 at javax.media.j3d.Canvas3D.setOffScreenBuffer(Canvas3D.java:1776)
 at myJPanel.paintComponent(test.java:80)
 at javax.swing.JComponent.paint(JComponent.java:804)

           (途中略)

 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:130)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:98)

Dynamic libraries:
08048000-0804d000 r-xp 00000000 03:06 2490626
/usr/java/j2sdk1.4.0/bin/java
0804d000-0804e000 rw-p 00004000 03:06 2490626
/usr/java/j2sdk1.4.0/bin/java
40000000-40016000 r-xp 00000000 03:06 851972     /lib/ld-2.2.2.so

           (途中略)

4d748000-4d75c000 r-xp 00000000 03:06 1163318
/usr/X11R6/lib/libXmu.so.6.2
4d75c000-4d75d000 rw-p 00013000 03:06 1163318
/usr/X11R6/lib/libXmu.so.6.2
4d75e000-4d765000 r-xp 00000000 03:06 1163316    /usr/X11R6/lib/libXi.so.6.0
4d765000-4d766000 rw-p 00006000 03:06 1163316    /usr/X11R6/lib/libXi.so.6.0

Local Time = Wed Sep 11 18:08:20 2002
Elapsed Time = 5
#
# The exception above was detected in native code outside the VM
#
# Java VM: Java HotSpot(TM) Client VM (1.4.0-b92 mixed mode)
#


----------ソース---------------------
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.applet.*;
import javax.vecmath.*;
import java.awt.event.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import java.awt.image.BufferedImage;

class test {

    public static void main( String[] args ) {
        JFrame frame = new JFrame( "Java3D Test3" );
        JDesktopPane desktop = new JDesktopPane();
        frame.getContentPane().add( desktop , BorderLayout.CENTER );
        frame.setSize( 500 , 500 );
        frame.setLocation( 100 , 100 );
        frame.setVisible( true );

        JIFrame f1 = new JIFrame( "Frame1" );
        f1.setBounds( 20 , 20 , 300 , 300 );
        desktop.add( f1 );
        f1.setVisible( true );

        JIFrame f2 = new JIFrame( "Frame2" );
        f2.setBounds( 100 , 100 , 300 , 300 );
        desktop.add( f2 );
        f2.setVisible( true );
    }
}

class JIFrame extends JInternalFrame {

    public JIFrame( String title ) {
        super( title );
        JPanel panel = new myJPanel();

        setClosable( true );
        setMaximizable( true );
        setIconifiable( true );
        setResizable( true );
        getContentPane().add( panel , BorderLayout.CENTER );
    }

}

class myJPanel extends JPanel {

    myJPanel() {
    }

    public void paintComponent(Graphics g){
 super.paintComponent(g);
 setLayout(new BorderLayout());

 Canvas3D canvas =
     new anvas3D(SimpleUniverse.getPreferredConfiguration(),true);

 SimpleUniverse universe = new SimpleUniverse( canvas );

 BranchGroup root = createSceneGraph();

 universe.getViewingPlatform().setNominalViewingTransform();
 universe.addBranchGraph( root );

 Dimension dd=this.getSize();
 canvas.getScreen3D().setSize(dd);
 canvas.getScreen3D().setPhysicalScreenHeight(1);
 canvas.getScreen3D().setPhysicalScreenWidth(1);

 BufferedImage image
     = new BufferedImage(200,200,BufferedImage.TYPE_INT_BGR);

 ImageComponent2D buffer
     = new ImageComponent2D(ImageComponent2D.FORMAT_RGB,image);

 canvas.setOffScreenBuffer(buffer);

 g.drawImage(canvas.getOffScreenBuffer().getImage(),0,0,this);

    }

    BranchGroup createSceneGraph() {

        BranchGroup objGroup = new BranchGroup();

        TransformGroup objTrans = new TransformGroup();
        Transform3D translation = new Transform3D();
        objTrans.setTransform( translation );

        Shape3D shape = new ColorCube( 0.5 );

        objTrans.addChild( shape );

     objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE );
     objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_READ );
     objGroup.addChild( objTrans );

        setMouseBehavior( objGroup , objTrans );

        return objGroup;
    }

    private void setMouseBehavior( BranchGroup root , TransformGroup trans )
{

        MouseBehavior behavior1 = new MouseRotate();
        behavior1.setTransformGroup( trans );
        root.addChild( behavior1 );
        MouseBehavior behavior2 = new MouseTranslate();
        behavior2.setTransformGroup( trans );
        root.addChild( behavior2 );
        MouseBehavior behavior3 = new MouseZoom();
        behavior3.setTransformGroup( trans );
        root.addChild( behavior3 );
        BoundingSphere bounds=new BoundingSphere( new Point3d( 0.0,0.0,0.0 )
, 100.0 );

        behavior1.setSchedulingBounds( bounds );
        behavior2.setSchedulingBounds( bounds );
        behavior3.setSchedulingBounds( bounds );
    }

}

-----------
古川 裕之


------------------------------------------------------------------------
      ★《広告》が消える!?!? それが、有料メーリングリスト
         http://sml.www.infoseek.co.jp/?svx=971122