[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:00930] Re: 内側にテクスチャ



■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
   『アスクル』はオフィス・生活用品を格安で翌日にお届けいたします。

   商品は全て75%〜10%オフ!!
     (例) コピー用紙    1288円  (A4−2500枚)
         トイレットペーパー 298円 (12ロール)
     8700アイテムの無料カタログのお申し込みは今すぐ!!
■■■■■■■ http://www.kansai.ne.jp/buneido/askul/ ■■■■■■■■

こんにちは、Atsushi です。

>> Cylinder から getShape(Cylinder.BODY) メソッドで側面を取り出して、
>> 複製した後に SceneGraph に追加します。
>> getShape(Cylinder.BODY) メソッドを取り出した側面ノードは Cylinder
>> ノードの下にすでにぶら下げられているので、複製するところがポイント
>> です。
> 括弧の数があってないらしくて、自分でいろいろいじってみましたが
> だめでした。

2 行目には括弧が 1 つ多くて、3 行目には 1 つ少なかったですね。

私の試したコードを載せます。
試してみてください。

public class Tunnel extends Applet
{
    private Canvas3D canvas;
    private SimpleUniverse universe;

    public void init()
    {
        canvas=new Canvas3D(null);
        universe=new SimpleUniverse(canvas);
        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(createSceneGraph());
        setLayout(new BorderLayout());
        add(canvas,BorderLayout.CENTER);
    }

    private BranchGroup createSceneGraph()
    {
        BranchGroup root=new BranchGroup();
        root.addChild(createLight());
        root.addChild(createTunnel());
        return root;
    }

    private Node createLight()              // 光源の設定
    {
        Light light=new PointLight(new Color3f(10.0f,10.0f,10.0f),
                                   new Point3f( 0.3f, 0.3f,10.0f),
                                   new Point3f( 0.1f, 0.1f, 0.0f));
        BoundingSphere bounds=
            new BoundingSphere(new Point3d(),Double.POSITIVE_INFINITY);
        light.setInfluencingBounds(bounds);
        return light;
    }

    private Node createTunnel()             // トンネルの設定
    {
        Transform3D rotation;
        TransformGroup transform;
        Appearance appearance;
        Texture texture;
        Material material;
        Cylinder tunnel;
    
        rotation=new Transform3D();
//      rotation.rotX(Math.PI/2.0);
        transform=new TransformGroup(rotation);
        appearance=new Appearance();
        texture=new TextureLoader("./hoge.jpg",this)
               .getTexture();
        appearance.setTexture(texture);
        material=new Material();
        material.setLightingEnable(true);
        appearance.setMaterial(material);
        tunnel=new Cylinder(1.0f,100.0f,
            Cylinder.GENERATE_NORMALS |
            Cylinder.GENERATE_NORMALS_INWARD |
            Cylinder.GENERATE_TEXTURE_COORDS,300,100,appearance);
        transform.addChild(tunnel.getShape(Cylinder.BODY)
                 .cloneNode(true));
        return transform;
    }
}

--------------------------------------------------
   Atsushi
   mailto:atusi@xxxxxxxxxx
   http://www.ipc-tokai.or.jp/~atusi/index.html