[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:01159] Re: テクスチャーの張り替え時に関する問題
■ DNSの一行広告 ■ =========================
通販業界のダイナマイトtuuhan → http://www.tuuhan.co.jp
■最新転職情報■仕事で輝く人のために・・ → http://www.perso.co.jp/
激安!万年筆500点,時計,イタリアンジュエリー → http://www.hitmart.co.jp/
ノンジャンルチャットはここ! → http://www.gonzo.net/Dp-chat/
出会のコミュニティ(無料HP,掲示板、チャット) → http://machikado.com/
====================================■
肝心のコードを乗せるのを忘れてしまいました.
ごみ記事を増やしてしまって申し訳在りません.
> > ライブになっている Sphere のテクスチャーを張り替えると,張り替えるたびに
> > メモリーの消費量が増加します.最終的には OutOfMemoryError が出て,テクス
> > チャーの張り替えが行えなくなります.
>
> の,再現コードを別途用意しました.
> フレームの上でマウスクリックを行うと,テクスチャーを張り替えるというプロ
> グラムです.
> 実行時には,"01.jpg"という名前で画像を用意してください.
> 元コードは見せることが出来ないのですが,こちらのコードでも同様の症状が出
> ます.
>
> windows 固有の問題でしょうか?
>
> 環境
> ----------------
> WindowsNT 4.0 SP5
> JDK 1.2.2
> Java3D 1.1.2
> グラフィックボード Maxtor Millennium G200 AGP
> cygwin20b + bash
=====================================================================
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.image.*;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.geometry.*;
import javax.vecmath.*;
public class TFlipTexture extends Frame
{
Toolkit mTk = Toolkit.getDefaultToolkit();
Canvas3D mCanv = new Canvas3D(null);
String mImgDir = "./image/";
Image mImg = null;
Appearance mSphApr = null;
public TFlipTexture(){
super("texture");
SceneGraph();
SetupListener();
SetupFrame();
}
public void SetupFrame(){
add(mCanv);
setSize(600, 480);
setVisible(true);
}
public void SetupListener(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
setVisible(false);
dispose();
}
public void windowClosed(WindowEvent e){
System.exit(0);
}
});
// 画像の読み込み.
// 実際は次々を違う絵を読み込むが,
// 見通しを良くするため1枚の絵からテクスチャーを何回も作成する.
mImg = mTk.getImage(mImgDir + "01.jpg");
mCanv.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent event)
{
try{
// テクスチャーの張り替え
// 実際には,
// 次々と違う絵をテクスチャーにする.
TextureLoader texLoader = new TextureLoader(mImg, mCanv);
Texture tex = texLoader.getTexture();
mSphApr.setTexture(tex);
System.gc();
}
catch(NullPointerException except){
except.printStackTrace();
}
}
});
}
public void SceneGraph()
{
SimpleUniverse univ = new SimpleUniverse(mCanv);
BranchGroup rootBG = new BranchGroup();
TransformGroup rootTG = new TransformGroup();
rootTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
rootTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
mSphApr = new Appearance();
mSphApr.setCapability(Appearance.ALLOW_TEXTURE_WRITE);
Sphere sphere = new Sphere(1.0f,
Primitive.GENERATE_NORMALS
| Primitive.GENERATE_TEXTURE_COORDS,
mSphApr);
BoundingSphere bounds = new BoundingSphere(new Point3d(), 10.0);
MouseRotate rotator = new MouseRotate(rootTG);
rotator.setSchedulingBounds(bounds);
rootBG.addChild(rotator);
MouseTranslate translator = new MouseTranslate(rootTG);
translator.setSchedulingBounds(bounds);
rootBG.addChild(translator);
MouseZoom zoomer = new MouseZoom(rootTG);
zoomer.setSchedulingBounds(bounds);
rootBG.addChild(zoomer);
univ.getViewingPlatform().setNominalViewingTransform();
rootTG.addChild(sphere);
rootBG.addChild(rootTG);
univ.addBranchGraph(rootBG);
}
public static void main(String[] arg)
{
new TFlipTexture();
}
}
===========================================================================
--
----------------
Fujiwara Isao (藤原 功)