# Text an einer Seite eines Cubes



## seeder2 (2. Jan 2007)

Ich versuche einen String auf eine Seite eines Cubes zu schreiben, leider funktioniert das nicht. Ich habe es so versucht:

```
Appearance app1 = new Appearance();

    Text2D text2d = new Text2D("2D text", new Color3f(0.9f, 0.2f, 0.9f), "Helvetica", 12, Font.ITALIC);
    Color3f ambientColour1 = new Color3f(mObjectColor);
    Color3f emissiveColour1 = new Color3f(0.0f, 0.0f, 0.0f);
    Color3f specularColour1 = new Color3f(1.0f, 1.0f, 1.0f);
    Color3f diffuseColour1 = new Color3f(mObjectColor);
    float shininess1 = 20.0f;

    app1.setMaterial(new Material(ambientColour1, emissiveColour1, diffuseColour1, specularColour1, shininess1));
    Box cube = new Box(1.3f, 0.1f, 2.0f, app1);

    Appearance textAppear = text2d.getAppearance();
    textAppear.setTexture(text2d.getAppearance().getTexture());

    cube.getShape(com.sun.j3d.utils.geometry.Box.TOP).setAppearance(textAppear);
```
Die obere Seite wird dann aber nur schwarz dargestellt ohne Text.
Weiss jemand, wieso das nicht geht oder wie man es machen könnte. Danke...


----------



## Gast (3. Jan 2007)

Wo sollte dein Cube UV-Koordinaten herhaben?


----------



## seeder2 (3. Jan 2007)

Ich habe versucht die Koordinaten folgendermassen festzulegen:

```
TexCoordGeneration tcg = new TexCoordGeneration(TexCoordGeneration.EYE_LINEAR,TexCoordGeneration.TEXTURE_COORDINATE_2);
    textAppear.setTexCoordGeneration(tcg);
```

Damit wird der Text sichbar, wird jedoch laufend wiederholt und ist oft zu stark verzerrt.

Gibt es dafür eine bessere Möglichkeit?


----------



## kaie (4. Jan 2007)

Du kannst direkt bei der Erzeugung der Box passende Textur-Koordinaten generieren lassen:

```
Box cube = new Box(1.3f, 0.1f, 2.0f, Box.GENERATE_TEXTURE_COORDS, app1);
```


----------



## seeder2 (4. Jan 2007)

So funktioniert es. Super. Vielen Dank für euere Hilfe...


----------



## seeder2 (7. Jan 2007)

Leider gibt es trotzdem noch ein Problem:

Wenn ich die Box so erzeuge:

```
Box cube = new Box(1.3f, 0.1f, 2.0f, Box.GENERATE_TEXTURE_COORDS, app1);
```

wird die Appearance app1 nicht mehr angewendet.


----------



## kaie (8. Jan 2007)

'tschuldigung, mein Fehler. Hatte folgende Zeile im Standardkonstruktor nicht gelesen:


> public Box()
> Constructs a default box of 1.0 in all dimensions. *Normals are generated by default*, texture coordinates are not.


Ich dachte, alle Standardboxen hätten weder Texturkoordinaten noch Normalen. Anscheinend wurden die Normalen aber vorher erzeugt, und da sie jetzt nicht mehr da sind, wird die Appearance nicht mehr korrekt ausgeleucht. Du musst also noch explizit angeben, dass die Normalen bei Dir mit erzeugt werden sollen:

```
Box cube = new Box(1.3f, 0.1f, 2.0f, Box.GENERATE_TEXTURE_COORDS|Box.GENERATE_NORMALS , app1);
```
Dann sollte es eigentlich wieder klappen!

Schöne Arbeitswoche wünscht
*kaie*


----------



## Guest (8. Jan 2007)

Hallo kaie

Genau, nun wird die Appearance wieder richtig angewendet. Ich habe auch nachgelesen, bin aber leider nicht darauf gekommen.
*
Vielen vielen Dank für deine schnelle und kompetente Hilfe.
*

Noch etwas kleines. Ich möchte den Text gerne auf mehreren Zeilen haben, also mit Zeilenumbrüchen. Ist das irgendwie möglich? Das mit \n oder der Trick von Swing mit html Tags funktioniert da ja leider nicht. Müsste ich  für jede Zeile eine eigene Textur erzeugen und die untereinander anordnen? Oder weisst du gerade eine andere Möglichkeit?


----------

