[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