[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 (藤原 功)