Motivation
You can model every tiny texture detail of a world using a vast number of colored faces:
- Takes a long time to write the X3D
- Takes a long time to draw
Use a trick instead:
- Take a picture of the real thing
- Paste that picture on the shape, like sticking on a decal
This technique is called Texture Mapping
Using image textures
Image texture:
- Uses a single image from a file in one of these formats:
GIF | 8-bit lossless compressed images 1 transparency color |
JPEG | Usually a poor choice for texture mapping 8-bit thru 24-bit lossy compressed images No transparency support |
PNG | An adequate choice for texture mapping 8-bit thru 24-bit lossless compressed images 8-bit transparency per pixel Best choice |
Syntax: Appearance
An Appearance node describes overall shape appearance:
- texture - texture source
XML Encoding
1 2 3 4 5 6 7 |
<Shape> <Appearance> <Material ... /> <ImageTexture ... /> </Appearance> <!-- geometry ... --> </Shape> |
Classic Encoding
1 2 3 4 5 6 7 |
Shape { appearance Appearance { material Material { ... } texture ImageTexture { ... } } geometry ... } |
Syntax: ImageTexture
An ImageTexture node selects a texture image for texture mapping:
- url - texture image file URL
XML Encoding
1 2 3 4 5 6 7 8 |
<Shape> <Appearance> <Material/> <ImageTexture url='"wood.jpg"'/> </Appearance> <!-- geometry ... --> </Shape> |
Classic Encoding
1 2 3 4 5 6 7 8 9 |
Shape { appearance Appearance { material Material { } texture ImageTexture { url "wood.jpg" } } geometry ... } |
Syntax: PixelTexture
A PixelTexture node specifies texture image pixels for texture mapping:
- image - texture image pixels
- Image data - width, height, bytes/pixel, pixel values
XML Encoding
1 2 3 4 5 6 7 8 9 |
<Shape> <Appearance> <Material/> <PixelTexture image='2 1 3 0xFFFF00 0xFF0000'/> </Appearance> <!-- geometry ... --> </Shape> |
Classic Encoding
1 2 3 4 5 6 7 8 9 10 |
Shape { appearance Appearance { material Material { } texture PixelTexture { image 2 1 3 0xFFFF00 0xFF0000 } } geometry ... } |
Syntax: MovieTexture
A MovieTexture node selects a texture movie for texture mapping:
- url - texture movie file URL
- When to play the movie, and how quickly (like a TimeSensor node)
XML Encoding
1 2 3 4 5 6 7 8 9 10 11 12 |
<Shape> <Appearance> <Material/> <ImageTexture url='"wood.jpg"' loop='true' speed='1.0' startTime='0.0' stopTime='0.0'/> </Appearance> <!-- geometry ... --> </Shape> |
Classic Encoding
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Shape { appearance Appearance { material Material { } texture MovieTexture { url "movie.mp4" loop TRUE speed 1.0 startTime 0.0 stopTime 0.0 } } geometry ... } |
Using materials with textures
- Color textures override the color in a Material node
- Grayscale textures multiply with the Material node color
- Good for colorizing grayscale textures
- If there is no Material node, the texture is applied emissively
Summary
- A texture is like a decal pasted to a shape
- Specify the texture using an ImageTexture, PixelTexture, or MovieTexture node in an Appearance node
- Color textures override material, grayscale textures multiply
- Textures with transparency create holes