"verstümmelte Flächen" nach TransparenzInterpolation

aze

Bekanntes Mitglied
Hi

Ich hab auf den Flächen einer Branchgroup einen TransparenzInterpolator laufen lassen ,der alle Flächen abwechselnd ein und ausblendet.Das klappt auch.Allerdings sehen die Flächen danach leciht "verstümmelt" aus , wie man auf dem angehängten Screenshot sehen kann.Woran kann das liegen ?

Edit: Was mir auch merkwürdig vorkamm ist ,das die Flächen auf die ich den Interpolator angewendet habe, keine TransparencyAttributes besassen.Ich musste den Flächen erstmal ein solches Obejkt zuweisen bevor ich interpolieren konnte.Wie kann es sein ,dass die Flächen keine solchen Objekte besitzen ? Ich lade die betreffenden Flächen aus einer .obj Datei ein.

Schöne Grüße

Aze
 

Anhänge

  • Zahnfleisch_Unten_verstümmelt.jpg
    Zahnfleisch_Unten_verstümmelt.jpg
    34,2 KB · Aufrufe: 35
Zuletzt bearbeitet:
Erstmal zur zweiten fragen.
.obj Datei enthalten meines wissens keine Attribute Informationen wie z.B ( Transparenz, Farbe usw ). Anders als wie bei VRML Dateien.
Schau dir mal eine obj Datei in Nodpad++ oder Co. an , sind eigentlich nur Koodinaten die drin stehen.
Falls ich falsch liege, verbessert mich 😉

Und zur ersten frage.
Habe leider noch nicht mit den TransparencyInterpolator gearbeitet bzw verwenden.
Interessant wäre es , wie es den vor der Interpolation aussah?

Mfg
 
Hmm okay.Danke für die Antwort auf Frage 2.

Das Zahnfleisch sah vorher ganz normal aus.Siehe Screenshot im Anhang
 

Anhänge

  • Zahnfleisch_Unten_normal.jpg
    Zahnfleisch_Unten_normal.jpg
    28,7 KB · Aufrufe: 27
Also ich wüsste nicht woran es liegen könnte denn

Java:
            Alpha alpha = new Alpha(-1, Alpha.DECREASING_ENABLE, 0, 10000, 5000, 0, 1000, 5000, 0, 1000); 
            TransparencyAttributes target = new TransparencyAttributes(TransparencyAttributes.BLENDED, 0.5f);
            target.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);

            TransparencyInterpolator transInt  = new TransparencyInterpolator(alpha, target);
            transInt.setSchedulingBounds(bigBounds);
            transInt.setMinimumTransparency(1f);
            transInt.setMaximumTransparency(0f);


...

            appereance.setTransparencyAttributes(target);

dieser Code "verstümmelt" meine Objekte nicht ( VRML ).

Wie schaut denn dein Code aus?
 
Mein Code

Java:
private void createGumAnimations(Alpha a) {

        System.out.println("Create Gum Animation");

        List<TransparencyInterpolator> createGumTransInterpolator = createGumTransInterpolator(JawsConst.UPPER, a);

        for (TransparencyInterpolator transparencyInterpolator : createGumTransInterpolator) {

            animation.addChild(transparencyInterpolator);

        }

        List<TransparencyInterpolator> createGumTransInterpolator1 = createGumTransInterpolator(JawsConst.LOWER, a);

        for (TransparencyInterpolator transparencyInterpolator : createGumTransInterpolator1) {

            animation.addChild(transparencyInterpolator);

        }

    }

    private List<TransparencyInterpolator> createGumTransInterpolator(int g, Alpha a) {

        List<TransparencyAttributes> gumTrans = getGumTrans(g);

        List<TransparencyInterpolator> transparencyInterpolators = new ArrayList<TransparencyInterpolator>();

        for (TransparencyAttributes transparencyAttributes : gumTrans) {

            TransparencyInterpolator ti = new TransparencyInterpolator(
                    a,
                    transparencyAttributes,
                    (jawsMode == JawsConst.LINE) ? 1.0f : 0.0f,
                    (jawsMode == JawsConst.LINE) ? 0.0f : 1.0f);
            ti.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 10000.0));

            transparencyInterpolators.add(ti);


        }


        return transparencyInterpolators;
    }

    private List<TransparencyAttributes> getGumTrans(int g) {
        BranchGroup gum = gums[g];
        lookForShape3d(gum.getAllChildren());

        List<TransparencyAttributes> tas = new ArrayList<TransparencyAttributes>();

        TransparencyAttributes ta = new TransparencyAttributes(TransparencyAttributes.BLENDED, 0);
        ta.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);
        ta.setCapability(TransparencyAttributes.ALLOW_VALUE_READ);

       

        for (Shape3D shape3D : shapes) {

            if (shape3D.getAppearance().getTransparencyAttributes() == null) {
                shape3D.getAppearance().setTransparencyAttributes(ta);

                //return ta;
            }

            tas.add(shape3D.getAppearance().getTransparencyAttributes());

        }

        return tas;


    }
    
    List<Shape3D> shapes = new ArrayList<Shape3D>();

    private void lookForShape3d(Enumeration enumeration) {

        while (enumeration.hasMoreElements()) {
            Object nextElement = enumeration.nextElement();
            //System.out.println(nextElement.getClass().toString());

            if (nextElement instanceof Shape3D) {
                shapes.add((Shape3D) nextElement);
            }

            if (nextElement instanceof Group) {
                lookForShape3d(((Group) nextElement).getAllChildren());
            }

        }

    }
 
Na dann ist alles bestens 🙂


Wieso verwendest du eigentlich nicht VRML Dateien (VRML Loader) ?
Frage nur aus reiner Interesse 🙂

Mfg
 
Ich muss mit dem arbeiten was ich bekomme und das sind .obj Files.Ich selbst habe keine Ahnung von dem Design 3 dimensionaler Objekte.
 

Zurück
Oben