Open GL Super Bible:Texture Mapping
To access the contents, click the chapter and section titles.
Open GL Super Bible
(Publisher: Macmillan Computer Publishing)
Author(s): Waite group Press
ISBN: 1571690735
Publication Date: 08/01/96
Previous
Table of Contents
Next
Mipmapped Textures
So far, wełve dealt exclusively with single-texture images. That is, whenever we draw a textured polygon, the polygon is painted with a single 1D or 2D image. This is fine for some scenes, but animated displays often need various levels of detail depending on the distance from the viewer. For example, when walking through a virtual room, you might want a high-resolution image of a picture close up, but only the outline at a distance.
OpenGL supports textures with multiple images, called mipmapped textures. Mipmapping selects the texture image closest to the screen resolution for a polygon. Loading mipmapped textures takes slightly longer than standard textures, but the visual results are impressive. In addition, mipmapped textures can improve display performance by reducing the need for GL_LINEAR image filters.
What Does the 'Mipł in 'Mipmappedł Mean?: 'mipł is latin for 'manył. 'Mipmappingł means 'many imagesł.
Mipmapped textures are defined by providing a specific level parameter for each image. For the ROY-G-BIV texture in the previous example, you would use the following:
static unsigned char roygbiv_image0[16][3];
static unsigned char roygbiv_image1[8][3];
static unsigned char roygbiv_image2[4][3];
static unsigned char roygbiv_image3[2][3];
static unsigned char roygbiv_image4[1][3];
glNewList(RainbowTexture = glGenLists(1), GL_COMPILE);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST_MIPMAP_LINEAR);
glTexImage1D(GL_TEXTURE_1D, 0, 3, 16, 0, GL_RGB, GL_UNSIGNED_BYTE,
roygbiv_image0);
glTexImage1D(GL_TEXTURE_1D, 1, 3, 8, 0, GL_RGB, GL_UNSIGNED_BYTE,
roygbiv_image1);
glTexImage1D(GL_TEXTURE_1D, 2, 3, 4, 0, GL_RGB, GL_UNSIGNED_BYTE,
roygbiv_image2);
glTexImage1D(GL_TEXTURE_1D, 3, 3, 2, 0, GL_RGB, GL_UNSIGNED_BYTE,
roygbiv_image3);
glTexImage1D(GL_TEXTURE_1D, 4, 3, 1, 0, GL_RGB, GL_UNSIGNED_BYTE,
roygbiv_image4);
glEndList();
The image levels are specified in the first parameter to glTexImage1D(). The level 0 image is your primary, highest-resolution image for the texture. The level 1 image is half the size of the primary image, and so forth. When drawing polygons with a mipmapped texture, you need to use one of the minification filters (GL_TEXTURE_MIN_FILTER) in Table 12-3.
Table 12-3 Minification Filters
Filter
Description
GL_NEAREST_MIPMAP_NEAREST
Use the image nearest to the screen (polygon) resolution. Use the GL_NEAREST filter when texturing with this image.
GL_NEAREST_MIPMAP_LINEAR
Use the image nearest to the screen (polygon) resolution. Use the GL_LINEAR filter when texturing with this image.
GL_LINEAR_MIPMAP_NEAREST
Linearly interpolate between the two images nearest to the screen (polygon) resolution. Use the GL_NEAREST filter when texturing with this image.
GL_LINEAR_MIPMAP_LINEAR
Linearly interpolate between the two images nearest to the screen (polygon) resolution. Use the GL_LINEAR filter when texturing with this image.
The GL_LINEAR_MIPMAP_NEAREST and GL_LINEAR_MIPMAP_LINEAR filters can be very expensive in terms of display performance. GL_NEAREST_MIPMAP_NEAREST is roughly equivalent to GL_NEAREST in performance, but generally produces much better results. Mipmap images are chosen by comparing the size of the polygon as it will be drawn on the screen, to the sizes of the mipmap images.
To make your life a bit easier, the OpenGL utility library (GLU32.LIB) provides two functions that automatically generate mipmapped images based on a single, high-resolution texture. In the following code, the gluBuild1DMipmaps and gluBuild2DMipmaps functions take the place of glTexImage1D and glTexImage2D:
/* 1D texture */
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST_MIPMAP_LINEAR);
gluBuild1DMipmaps(GL_TEXTURE_1D, 3, 8, 0, GL_RGB, GL_UNSIGNED_BYTE,
roygbiv_image);
/* 2D texture */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, info->bmiHeader.biWidth,
info->bmiHeader.biHeight, 0, GL_RGB,
GL_UNSIGNED_BYTE, rgb);
Because the gluBuild1DMipmaps and gluBuild2DMipmaps functions create images from one image, the appearance of some textured images may not be accurate. Itłs like drawing text characters at different sizesscaling the bitmaps doesnłt always generate good-looking results! When you run into this sort of problem, generate your mipmap images manually.
A Terrain Viewing Program
Our project for this chapter is a terrain viewing program that takes advantage of some of the texture-mapping features we have discussed. With this program, wełll want to accomplish the following:
• View textured terrain scenes
• Edit the terrain interactively in 3D
• Fly through the terrain
• Print the current scene
• Save
the current scene to a .BMP file
The entire terrain program is listed at the end of this chapter, just before the Reference Section. A copy of the program is in the CH12 source directory on your CD-ROM. Double-click on the TEXSCENE.EXE program icon to try it out!
Defining the Terrain
To keep things simple, weÅ‚ll define our terrain as a grid of elevation points with a texture attribute such as “this is water" or “this is a mountain." Each point in the grid will also have an associated lighting normal to add realism.
#define TERRAIN_SIZE 21
int TerrainType[TERRAIN_SIZE][TERRAIN_SIZE];
GLfloat TerrainHeight[TERRAIN_SIZE][TERRAIN_SIZE];
GLfloat TerrainNormal[TERRAIN_SIZE][TERRAIN_SIZE][3];
Here the TerrainType array contains the type of terrain at each point and is assigned one of the following control IDs from our user-interface resource file:
IDC_GRASS
Grasslands
IDC_WATER
Water
IDC_TREES
Trees/woodland
IDC_ROCKS
Rocks/cliffs
IDC_MOUNTAINS
Mountains
Previous
Table of Contents
Next
Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc.
All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement.
Wyszukiwarka
Podobne podstrony:
393 04390 (2)393 16390 394 ezvsba2wgoc7nualallnxgc6cwsmpxxds5ar7ni393 Ujęcie w księgach rachunkowych zakupu od rolnika ryczałtowego393 397393 13393 06więcej podobnych podstron