Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Java3d вращение + перемещение + текстурирование


Автор: diyana 20.4.2011, 09:31
Добрый день!
У меня стоит задача - вращать и перемещать текстурированную сферу.
Для этого использую такой код:
текстурирование:
Код

            Appearance ap = new Appearance();
            TextureLoader tl = new TextureLoader("earth1.jpg",this);
            ImageComponent2D ic =tl.getImage();
            Texture2D tex = new Texture2D(Texture2D.BASE_LEVEL, Texture2D.RGB, ic.getWidth(),ic.getHeight());
            tex.setImage(0,ic);
            TextureAttributes ta = new TextureAttributes();
            ta.setTextureMode(TextureAttributes.REPLACE);
            TexCoordGeneration tcg = new TexCoordGeneration(TexCoordGeneration.SPHERE_MAP,
            TexCoordGeneration.TEXTURE_COORDINATE_3);
            ap.setTexture(tex);
            ap.setTextureAttributes(ta);
            ap.setMaterial(new Material());
            ap.setTexCoordGeneration(tcg);
            Sphere s = new Sphere(0.7f, 1, 50, ap);
            trans.addChild(s);


перемещение:
Код

    canv.addMouseMotionListener(new MouseMotionListener() {
        Point oldPos, newPos;
        public void mouseDragged(MouseEvent e) {
            newPos = e.getPoint();
            if (oldPos != null)
            {
                Vector3d P = new Vector3d();
                spin.get(P);
                Vector3d V = new Vector3d();
                V.setX(P.x - 0.0001*(((oldPos.x - newPos.x))));
                V.setY(P.y + 0.0001*((oldPos.y - newPos.y)));
                V.setZ(P.z);
                spin.setTranslation(V);
                trans.setTransform(spin);
            }

        }

        public void mouseMoved(MouseEvent e) {
            oldPos = e.getPoint();
        }
    });


так вот, проблема в том, что при перемещениях искажается наложение сферы.  Насколько я поняла, это связано с параметром SPHERE_MAP. Где-то вычитала(уже не помню где), что текстура с параметром SPHERE_MAP накладывается корректно, если объект находится в положении (0,0,0). Отсюда у меня вопрос: могу ли я перемещать не саму сферу, а камеру, чтобы сфера всегда оставалась в положении (0,0,0)?И если так, то как эту камеру задать?

Заранее спасибо за советы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)