Mapping textures
treewall.wrl

	

#VRML V2.0 utf8
#
#  treewall.wrl
#  A set of trees in front of a wall
#    by David R. Nadeau
#
#  This world illustrates the use of textures with a transparency
#  channel (alpha channel).  Such textures include pixel-by-pixel
#  info about what parts of the image are transparent.  A tree texture,
#  for instance, should be opaque where there are leaves, branches, or
#  the trun, and transparent everywhere else.  To illustrate this
#  use of transparency channel textures, this world places three trees
#  side-by-side in front of a wall.  The left 'tree' polygon has no
#  texture on it.  The middle polygon has a tree texture without
#  the transparency channel.  The right polygon has a tree texture with
#  a transparency texture.  All three trees are in Billboard nodes so
#  that they always turn to face the viewer.
#
WorldInfo {
    title "Trees in front of a wall"
    info [ "Copyright (c) 1997, David R. Nadeau" ]
}

Viewpoint {
    position 0.0 1.5 10.0
    description "Entry View"
}

NavigationInfo {
    type [ "WALK", "ANY" ]
    headlight TRUE
    speed 2.0
}

# Ground and lower wall
Shape {
    appearance DEF Concrete Appearance {
	material Material { }
    }
    geometry IndexedFaceSet {
	coord Coordinate {
	    point [
		-5.0 0.0   5.0,   5.0 0.0   5.0,
		 5.0 0.0   1.0,  -5.0 0.0   1.0,
		 5.0 0.05  1.0,  -5.0 0.05  1.0,
		 5.0 0.05 -2.0,  -5.0 0.05 -2.0,
		 5.0 0.25 -2.0,  -5.0 0.25 -2.0,
		 5.0 0.25 -2.05, -5.0 0.25 -2.05,
	    ]
	}
	coordIndex [
	    0, 1, 2, 3, -1,
	    3, 2, 4, 5, -1,
	    5, 4, 6, 7, -1,
	    7, 6, 8, 9, -1,
	    9, 8, 10, 11, -1,
	]
	solid FALSE
    }
}

# Brick wall
Shape {
    appearance DEF Brick Appearance {
	material Material { }
	texture ImageTexture { url "brick.jpg" }
	textureTransform TextureTransform {
	    scale 15.0 15.0
	}
    }
    geometry IndexedFaceSet {
	coord Coordinate {
	    point [
		-5.0 0.25 -2.05,  5.0 0.25 -2.05,
		 5.0 5.0  -2.05, -5.0 5.0  -2.05,
	    ]
	}
	coordIndex [ 0, 1, 2, 3 ]
	texCoord TextureCoordinate {
	    point [
		0.0 0.0, 1.0 0.0,
		1.0 1.0, 0.0 1.0,
	    ]
	}
	texCoordIndex [ 0, 1, 2, 3 ]
	solid FALSE
    }
}

# Planter
DEF Planter Transform {
    scale 0.5 0.5 0.5
    children [
	Shape {
	    appearance USE Concrete
	    geometry IndexedFaceSet {
		coord DEF PlanterCoordinates Coordinate {
		    point [
			-1.0 0.5  1.0,
			 1.0 0.5  1.0,
			 1.0 0.5 -1.0,
			-1.0 0.5 -1.0,
			-0.8 0.5  0.9,
			 0.8 0.5  0.9,
			 0.8 0.5 -0.9,
			-0.8 0.5 -0.9,
			-1.0 0.0  1.0,
			 1.0 0.0  1.0,
			 1.0 0.0 -1.0,
			-1.0 0.0 -1.0,
			-0.8 0.3  0.9,
			 0.8 0.3  0.9,
			 0.8 0.3 -0.9,
			-0.8 0.3 -0.9,
		    ]
		}
		coordIndex [
		    0, 1, 5, 4, -1,
		    1, 2, 6, 5, -1,
		    2, 3, 7, 6, -1,
		    3, 0, 4, 7, -1,
		    0, 8, 9, 1, -1,
		    9, 10, 2, 1, -1,
		    10, 11, 3, 2, -1,
		    11, 8, 0, 3, -1,
		    15, 14, 6, 7, -1,
		    14, 13, 5, 6, -1,
		    13, 12, 4, 5, -1,
		    12, 15, 7, 4, -1,
		]
	    }
	}
	Shape {
	    appearance Appearance {
		material Material {
		    diffuseColor 0.0 0.5 0.0
		}
	    }
	    geometry IndexedFaceSet {
		coord USE PlanterCoordinates
		coordIndex [ 12, 13, 14, 15 ]
	    }
	}
    ]
}

# Tree faces

# Right tree
Transform {
    translation  3.5 0.0 0.0
    children [
	USE Planter
	Billboard {
	    axisOfRotation 0.0 1.0 0.0
	    children [
		Shape {
		    appearance Appearance {
			# No material, use emissive texturing
			texture ImageTexture { url "tree1.png" }
		    }
		    geometry DEF TreeFace IndexedFaceSet {
			coord Coordinate {
			    point [
				-1.51 0.05 0.0,   1.51 0.05 0.0,
				 1.51 3.05 0.0,  -1.51 3.05 0.0,
			    ]
			}
			coordIndex [ 0, 1, 2, 3 ]
			texCoord TextureCoordinate {
			    point [
				0.0 0.0, 1.0 0.0,
				1.0 1.0, 0.0 1.0,
			    ]
			}
			texCoordIndex [ 0, 1, 2, 3 ]
			solid FALSE
		    }
		}
	    ]
	}
    ]
}
Transform {
    children [
	DEF Tree Billboard {
	    axisOfRotation 0.0 1.0 0.0
	    children [
		Shape {
		    appearance Appearance {
			# No material, use emissive texturing
			texture ImageTexture { url "tree1.jpg" }
		    }
		    geometry USE TreeFace
		}
	    ]
	}
    ]
}

# Left tree
# Now do one face without the tree texture to show the difference
Transform {
    translation -3.5 0.0 0.0
    children [
	USE Planter
	Billboard {
	    axisOfRotation 0.0 1.0 0.0
	    children [
		Shape {
		    appearance Appearance {
			material Material { }
		    }
		    geometry USE TreeFace
		}
	    ]
	}
    ]
}