トップページ > 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倍の大きさになりました。(若干はみ出てます)