Texturwiederholung in VRML

poldiberlin

Grünschnabel
Hallo,

ich habe ein Problem mit der Texturwiederholung in VRML. Entweder ich hab was falsch gemacht oder aber mein Viewer tut nicht das was er soll. Folgende kleine Szene habe ich geschrieben:

#VRML V2.0 utf8


NavigationInfo
{
avatarSize[0.1 1.8 0.1]
}

Background
{
skyAngle[0.785 1.57]
skyColor[0 0.1 0.8, 0 0.5 1, 1 1 1]
groundAngle[1.5 1.57]
groundColor[.01 0.8 0.6, 0 0.3 0]
}



DEF Kameras Group
{
children
[


Viewpoint
{
jump FALSE
position 8 30 40
orientation 1 0 0 -0.82
description "Vogel 1"
}

Viewpoint
{
jump FALSE
position 8 50 7
orientation 1 0 0 -1.57
description "Vogel 2"
}

Viewpoint
{
jump FALSE
position 40 7 25
orientation -0.1 1 0.08 1.2
description "zu Hause"
}

Viewpoint
{
jump FALSE
position 8 20 -9
orientation 0 1 0.4 3.14
description "Vogel 3"
}
]
}

DEF Szene Group
{
children
[
DirectionalLight
{direction 0 -1 0.2}



DEF Boden
Transform
{
translation 8.5 0 6.75
children
[
Shape
{
appearance Appearance
{ texture ImageTexture
{
url "boden.jpg"
repeatS TRUE
repeatT TRUE
}
}
geometry Box
{size 40 0.001 40}
}
]
}



DEF Zaun1
Transform
{
translation 1.01 .5 6.75
children
[
Shape
{
appearance Appearance
{ texture ImageTexture
{url "holz2.jpg"}
}
geometry Box
{size 0.02 1 11.5}
}
]
}
]} # Group Szene


Das Problem ist jetzt das das kleine Bild "boden.jpg" (128*128) nicht wiederholt auf der Fläche dargestellt wird, sondern verzerrt über die ganze Größe. Ich hab schon alles versucht, repeatS TRUE und FALSE oder ganz weglassen, unterschiedliche Viewer: Cosmo, Blaxun, Cortona und momentan BS Contact. Aber überall das gleiche Bild, keine Wiederholung.
Kann mir jemand helfen? Hat jemand schon mal so ein Problem gehabt?
Die gesamte Szene mit Bildern kann als .zip unter :
http://www.igg.tu-berlin.de/~denis/vrml.html
downgeloaded werden.

Vielen Dank!
Poldi aus Berlin
 
Hi,

hmmm ja, ich habe das ebenso festgestellt. Keine Ahnung, was das repeat-Zeugs soll. Am ehesten geht es, wenn Du das Bild skalierst.

Die genaueste Kontrolle über die Texturierung hast Du mWn bei IndexedFaceSet. Da kannst Du für jeden 3D-Punkt eine 2D-Koordinate angeben aus der Textur. Und zwar stellst Du Dir das am Besten so vor:

Du bastelst ein Modell aus Papier. So eines zum Ausschneiden und zusammenkleben. Nur ohne die Klebekanten, die brauchst Du hier nicht. Dann bringst Du auf diese Papierzeichnung die Textur auf. Das kann entweder ein vollständiges Bild sein, oder eben eine wiederholte Textur. Die 2D-koordinate 0,0 ist dabei immer die linke untere Ecke der Textur, die Koordinate 1,1 immer die rechte obere Ecke. Wenn Du also ein vollständiges Bild drauflegst, also ohne Wiederholungen, dann werden alle Texturkoordinaten kleiner als 1 sein. Wenn Du eine widerholte Textur drauflegst, werden zwangsläufig die Koordinaten größer als 1 werden.

Du nummerierst in dieser 2D-Zeichnung sämtliche Punkte durch. Dann füngst Du an, das 3D-Modell mit Zahlen zu füllen, in der oben durchgeführten Reihenfolge. Dann kommen anschließend die Texturkoordinaten mit den aus der 2D-Zeichnung extrahierten Werten in der gleichen Reihenfolge.

Bei allen anderen Objekten gibt's mehr oder weniger Probleme mit der genauen Kontrolle der Textur. Allenfalls noch bei ElevationGrid ist das noch hinzukriegen.
 
Zurück