[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