Положение перевода объекта, видимого только в диапазоне от -1,0 до +1,0 в Java3D - PullRequest
1 голос
/ 17 октября 2011

У меня есть крошечная маленькая программа на Java, которая должна отображать 2 сферы.Работает нормально, пока я не переведу сферу из диапазона от -1.0 до 1.0, объект в этом случае исчезнет.У меня есть установка SimpleUniverse, и я попробовал несколько setBounds в нескольких местах, но я не мог понять, как это исчезает.Реальная странность в том, что это положение не зависит от положения камеры, так как у меня есть OrbitBehavior в преобразовании ViewPlatform при приближении не показывает объект.

Это настройка для сфер:Открытый класс CelestialBody расширяет TransformGroup {

    CelestialBody(float posX, float posY, float posZ) {
        // This is set for the dynamic behaviour.
        setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

        Transform3D t3d = new Transform3D();
        t3d.setTranslation(new Vector3f(posX, posY, posZ));
        setTransform(t3d);
        setBounds(new BoundingSphere(new Point3d(0.0f, 0.0f, 0.0f), 10000.0f));

        Sphere sphere = new Sphere(1.0f, Sphere.GENERATE_NORMALS, 100, createAppearance());

        addChild(sphere);
    }

    private Appearance createAppearance() {
        Appearance appear = new Appearance();
        Material mat = new Material();
        mat.setShininess(100.0f);
        appear.setMaterial(mat);

        return appear;
    }
}

Это основная программа:

public class CelestialApp extends Frame {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new CelestialApp();
    }

    private SimpleUniverse universe = null;

    public CelestialApp() {
    // ...

        BranchGroup scene = constructContentBranch();
        scene.compile();

        universe = new SimpleUniverse(defaultCanvas);
        setupView();
        universe.addBranchGraph(scene);
    }

    private void setupView() {
        ViewingPlatform vp =  universe.getViewingPlatform();
        OrbitBehavior orbit = new OrbitBehavior();
        orbit.setSchedulingBounds(new BoundingSphere(new Point3d(0.0f, 0.0f, 0.0f), 10000.0f));
        vp.setNominalViewingTransform();
        vp.setViewPlatformBehavior(orbit);
    }

    private BranchGroup constructContentBranch() {
        BranchGroup scene = new BranchGroup();

        CelestialBody body1 = new CelestialBody(-2.0f, 0.0f, 0.0f);
        scene.addChild(body1);

        CelestialBody body2 = new CelestialBody(2.0f, 0.0f, -1.1f);
        scene.addChild(body2);

        PhysicalBehavior physics1 = new PhysicalBehavior(body1);
        scene.addChild(physics1);

        PhysicalBehavior physics2 = new PhysicalBehavior(body2, new Vector3d(0.0f, 0.0f, 0.0f));
        scene.addChild(physics2);

        setupLights(scene);

        return scene;
    }

    private void setupLights(BranchGroup scene) {
        AmbientLight lightA = new AmbientLight();
        lightA.setInfluencingBounds(new BoundingSphere());
        lightA.setColor(new Color3f(0.3f, 0.3f, 0.3f));
        scene.addChild(lightA);

        DirectionalLight lightD1 = new DirectionalLight();
        lightD1.setInfluencingBounds(new BoundingSphere());
        Vector3f dir = new Vector3f(-0.3f, -1.0f, -0.5f);
        dir.normalize();
        lightD1.setDirection(dir);
        lightD1.setColor(new Color3f(1.0f, 1.0f, 1.0f));
        scene.addChild(lightD1);

        Background bg = new Background(0.0f, 0.0f, 0.0f);
        bg.setApplicationBounds(new BoundingSphere());
        scene.addChild(bg);
    }
}

1 Ответ

0 голосов
/ 17 октября 2011

Бах, не бери в голову. Источник света имел только ограничивающую сферу с радиусом 1.0f, и объект был визуализирован, но с черным.

...