Добрый день! У меня стоит задача - вращать и перемещать текстурированную сферу. Для этого использую такой код: текстурирование:
| Код | 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)?И если так, то как эту камеру задать?
Заранее спасибо за советы. |