トップページ > Java3D入門 > Java3Dの座標変換(4)
物体の大きさを変える座標変換についてです。 今回扱うのは「相似拡大」のメソッドです。 物体の形はそのままに、大きさだけを変化させる変換です。 (Java3Dにはタテ・ヨコの寸法そのものを変化させるメソッドも用意されています 。これについてはまた後で扱います。)
setScale(double scale)引数に“1.0”を入れると、大きさは全く変化しません。それより大きい値をいれれば拡大、 1.0より小さい値を入れれば縮小となります。今回のテストプログラムでは立方体を 拡大してみます。
//******************************************************************************
//Java3D Scale_test
//拡大・縮小の座標変換
//******************************************************************************
//==============================================================================
//インポート・ファイル
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.Box;
import javax.vecmath.*;
import java.awt.*;
import javax.swing.*;
//==============================================================================
//メイン・クラス
public class Scale_test
{
//=============================================================================
//メイン・メソッド
public static void main(String[] args)
{
Scale_test test = new Scale_test();
}
//=============================================================================
//コンストラクタ
public Scale_test()
{
//============================================================================
//まずは、基礎フレームの設定。
//============================================================================
JFrame frame = new JFrame();
frame.setSize(250,250);
frame.setTitle("Scale_test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel cp = new JPanel();
cp.setLayout(null);
frame.add(cp);
//============================================================================
//次にJava3D関係の設定。
//============================================================================
GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(g_config);
canvas.setBounds(0,0,250,250);
cp.add(canvas);
//============================================================================
//空のSimpleUniverseを生成。
//============================================================================
SimpleUniverse universe = new SimpleUniverse(canvas);
frame.setVisible(true);
//============================================================================
//視点の設定
//============================================================================
ViewingPlatform camera = universe.getViewingPlatform();
camera.setNominalViewingTransform();
//============================================================================
//ライトの設定
//============================================================================
Color3f light_color = new Color3f(1.0f,1.0f,1.0f);
Vector3f light_direction = new Vector3f(0.2f,-0.2f,-0.6f);
DirectionalLight light = new DirectionalLight(light_color,light_direction);
BoundingSphere bounds = new BoundingSphere();
light.setInfluencingBounds(bounds);
BranchGroup group2 = new BranchGroup();
group2.addChild(light);
universe.addBranchGraph(group2);
//============================================================================
//Boxを作る
//============================================================================
Appearance appearance = new Appearance();
Material material = new Material();
material.setDiffuseColor(0.9f,0.75f,0.75f);
appearance.setMaterial(material);
Box box = new Box(0.3f,0.3f,0.3f,appearance);
//============================================================================
//BoxをTransfomrGroupに追加。さらにTransformGroupをBranchGroupへ登録。
//============================================================================
BranchGroup group1 = new BranchGroup();
TransformGroup transform_group = new TransformGroup();
transform_group.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transform_group.addChild(box);
group1.addChild(transform_group);
universe.addBranchGraph(group1);
//============================================================================
//拡大。
//============================================================================
//Transform3Dを生成
Transform3D transform1 = new Transform3D();
//Transform3Dに、2倍の拡大操作を登録
transform1.setScale(2.0f);
//TransformGroupにTransform3Dを登録。
transform_group.setTransform(transform1);
}
}
//ソースコードここまで。
//******************************************************************************
2倍の大きさになりました。(若干はみ出てます)