# Fehlerhafte Darstellung durch Transparenz?



## SebastianM (4. Sep 2007)

Hallo Leute, ich programmiere gerade ein kleines rotierendes Menü.. Dazu habe ich ein paar Quader erstellt, die ich auf einer Kreisbahn rotieren lasse. Den Fokus auf ein bestimmtes Element stelle ich dar, indem ich die restlichen Quader je nach ihrer Entfernung immer transparenter werden lasse. (Zum besseren Verständnis habe ich Screenshots angehängt). 

Es ist möglich dass ich einen selektierten Quader rotieren lasse,so dass er in seiner Breitseite sichtbar ist. Nun habe ich aber das Problem, dass die dahinterliegenden semi-transparenten Körper durchscheinen, obwohl der vordere Körper 100% untransparent ist. Ich kann mir das nicht erklären... bin für jeden Tip dankbar!

ciao
Basti


Hier sieht man das Menü in Grundstellung. Der mittlerer Quader hat den höchsten z-Wert, liegt im Raum also vor den anderen Schachteln... 






Hier ein Snapshot der Drehung:






Und hier das Resultat.... Die beiden benachbarten Quader haben die selben X- und Z-Koordinaten, komischerweise wird einer falsch gezeichnet...


----------



## Guest (4. Sep 2007)

Probier in Deinem Canvas3D mal folgendes:

```
getView().setTransparencySortingPolicy(View.TRANSPARENCY_SORT_GEOMETRY);
```
Bei meinem letzten 3D-Projekt funktionierten die Transparenzen danach einwandfrei. Natürlich nur unter der Annahme, dass Du auch Java3D verwendest. Wenn es um JOGL oder sonst einen OpenGL-Clone geht, kann ich Dir nicht weiterhelfen. Es wäre vielleicht hilfreich, wenn Du demnächst die verwendete API dazuschreiben würdest...
Schönen (Arbeits-?)Tag wünscht
*kaie*


----------



## SebastianM (4. Sep 2007)

danke, habs hinbekommen... hab aber jetzt noch ein anderes kleines Problem und will kein extra Topic aufmachen...

Ich habe ein png erstellt, das wie ein Kuchen aussieht aus dem ein Stück rausgeschnitten wurde. Das fehlende Segment ist transparent, der rest schwarz. 

siehe hier:
http://bwiebertha.de/filterscheibe.png

Dieses Bild möchte ich nun als Textur auf die Deckel bzw. Bodenflächen eines Zylinders legen, und zwar so dass 2/3 des Zylinders schwarz sind und 1/3 durchsichtig. 

Das Problem ist nun dass die ganze Deckel- bzw Bodenfläche schwarz ausgemalt wird; der transparente Sektor wird also irgendwie verschluckt... 

danke im voraus

Basti


----------



## merlin2 (4. Sep 2007)

Kann es sein, dass es am schwarzen Rand liegt?


----------



## SebastianM (4. Sep 2007)

wie meinst du das? Ich habe überhaupt keine Ahnung woran es liegt... tappe völlig im dunkeln..


----------



## merlin2 (4. Sep 2007)

Ich meine Folgendes: Versuch mal, das Bild als Textur zu verwenden, nachdem du im transparenten Abschnitt den Rand entfernt hast (ist allerdings nur so eine Idee).


----------



## Evil-Devil (4. Sep 2007)

Unterstüzt Java3D keine Texturen Transparenz? Ich würd einfach alles von der Textur schwarz machen, bis auf den sichtbaren Bereich. Der bleibt weiß oder welche Farbe auch immer da angezeigt werden soll.


----------



## SebastianM (4. Sep 2007)

Ich habe das Problem nun etwas weiter analysiert... Dazu habe ich das oben gepostete Kreissegment anstatt schwarz mal grün gemacht und auf Merlins anraten die Umrandung entfernt.. und siehe da, nun sehe ich 2/3  von dem Kreis grün und 1/3 schwarz. 
D.h. der transparente Sektor wird immer schwarz gezeichnet, auch wenn der Zylinder unter der Textur selber transparent ist.. Finde das etwas merkwürdig... Teilweise transparente Textur auf transparentem Körper ergibt schwarze Stellen...

bin weiterhin für jeden Tip dankbar

ciao
Basti


----------



## kaie (5. Sep 2007)

Hier wieder etwas Quelltext aus meinem eigenen Projekt:

```
Appearance appear = new Appearance();
appear.setTexture(irgendeineTextur);
TransparencyAttributes alpha = new TransparencyAttributes( TransparencyAttributes.SCREEN_DOOR, 0f);
RenderingAttributes render = new RenderingAttributes();
render.setDepthBufferEnable(true);
render.setDepthBufferWriteEnable(true);
appear.setRenderingAttributes(render);
appear.setTransparencyAttributes(alpha);
alpha.setTransparencyMode(TransparencyAttributes.NICEST);
```
Hilft Dir das weiter?
Wenn Du die Transparenz in Aktion sehen willst, gibt es hier ein Video. Die Fußgänger sind dabei als transparent texturierte QuadArrays realisiert.


----------

