Presentation is loading. Please wait.

Presentation is loading. Please wait.

CH6 Texture.

Similar presentations


Presentation on theme: "CH6 Texture."— Presentation transcript:

1 CH6 Texture

2 Before coding… 1/2 Prepare all texture images you need.
BMP file is a good choice  If you want to use TIFF file, maybe try this. Download the developer files. Or…just change TIFF files to BMP files ˋ(′~‵")ˊ

3 Before coding… 2/2 Add GlAux.Lib into your project.

4 How to use texture? glTexEnv (…) glTexParameteri (…) Enable
glEnable(GL_TEXTURE_2D); Generate Texture glGenTextures(number of textures , texture id array) Bind glBindTexture(GL_TEXTURE_2D, textId); Move date into texture gluBuild2DMipmaps(…) or glTexImage2D (…) Setting the texture glTexEnv (…) glTexParameteri (…) Assign texCoor before vertexCoor in display glTexCoord2f(0.0, 0.0); glVertex3f(-50.0, 0.0, 0.0);

5 Example Program 1/4 #include<gl/glaux.h>
#include<gl/glut.h> #define TEX_NUM 1 //the number of textures you use. #define MIPMAP AUX_RGBImageRec * img; //to save image file GLuint texObject[TEX_NUM]; //texture object

6 Example Program 2/4 void LoadTexture(char* filename){
img = auxDIBImageLoadA(filename); glGenTextures(TEX_NUM, texObject); glBindTexture(GL_TEXTURE_2D, texObject[0]); #ifdef MIPMAP gluBuild2DMipmaps(GL_TEXTURE_2D, 4, img->sizeX, img->sizeY, GL_RGB, GL_UNSIGNED_BYTE, img->data); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); #else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->sizeX, img->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, img->data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #endif glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); }

7 Example Program 3/4 void GL_display(){ glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texObject[0]); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-50.0, 0.0, 0.0); glTexCoord2f(0.0, 100.0); glVertex3f(-50.0, 0.0, 100.0); glTexCoord2f(100.0, 100.0); glVertex3f(50.0, 0.0, 100.0); glTexCoord2f(100.0, 0.0); glVertex3f(50.0, 0.0, 0.0); glEnd(); glFlush(); }

8 Example Program 4/4 void GL_reshape(GLsizei w, GLsizei h) {
glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 0.5, 100.0); glMatrixMode(GL_MODELVIEW); gluLookAt(0.0, 0.5, 0.0, 50.0, 0.0, 50.0, 0.0, 1.0, 0.0); } int main(int argc, char** argv) glutInit(&argc, argv); glutInitWindowSize(400, 400); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("Texture"); LoadTexture("check.bmp"); glutDisplayFunc(GL_display); glutReshapeFunc(GL_reshape); glutMainLoop();

9 Result Check_old.bmp Width/Height: 256/256

10 Load BMP file AUX_RGBImageRec* auxDIBImageLoadA(char *);
Load a BMP file. typedef struct _AUX_RGBImageRec { GLint sizeX, sizeY; unsigned char *data; }; sizeX, sizeY : image width / height. data : A pointer to the image data in memory.

11 Generate Texture Object
void glGenTextures( GLsizei n, GLuint *textures ); To generate texture names. n: the number of texture names to be generated. textures: pointer to the first element of an array in which the texture are stored. GLboolean glIsTexture( GLuint texture ); To determine if a name corresponds to a texture.

12 Bind texture To bind the texture to the target.
void glBindTexture( GLenum target, GLuint texture ); To bind the texture to the target. target: GL_TEXTURE_1D, GL_TEXTURE_2D void glDeleteTextures( GLsizei n, const GLuint *textures ); Delete named textures.

13 Send texture data: glTexImage2D 1/4
void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );

14 Send texture data: glTexImage2D 2/4
Specifies a 2D texture image target: Must be GL_TEXTURE_2D level: level-of-detail level. It must be 0 if you don’t want to use mip-map. internalformat: GL_RGBA and many others… Width / height : image witdh / height

15 Send texture data: glTexImage2D 3/4
border: 0 or 1 0 : no border, image width & height must be power of 2. 1 : use border, image width & height must be power of 2 plus 2.

16 Send texture data: glTexImage2D 4/4
format: format of the image data GL_RGB, GL_RGBA, and many others… type: data type of the image data pixel: A pointer to the image data in memory. (Hint: the BMP file you have loaded…)

17 Texture Setting: glTexEnv 1/3
void glTexEnv{fi}(GLenum target, GLenum pname, GLfloat param ); to indicate how the texels are combined with the original pixels target: must be GL_TEXTURE_ENV pname: must be GL_TEXTURE_ENV_MODE param: 5 choices, see next page

18 Texture Setting: glTexEnv 2/3
Base Internal Format GL_REPLACE GL_MODULATE GL_ADD GL_ALPHA C = Cf, A = At C = Cf, A = AfAt C=Cf, A=AfAt GL_LUMINANCE C = Lt, A = Af C = CfLt, A = Af C=Cf+CT, A=Af GL_LUMINANCE_ALPHA C = Lt, A = At C = CfLt, A = AfAt C=Cf+Ct, A=AfAt GL_INTENSITY C = It, A = It C = CfIt, A = AfIt C=Cf+Ct, A=Af+At GL_RGB C = Ct, A = Af C = CfCt, A = Af C=Cf+Ct, A=Af GL_RGBA C = Ct, A = At C = CfCt, A = AfAt C=Cf+Ct, A=AfAt Base Internal Format GL_DECAL GL_BLEND GL_ALPHA Undefined C = Cf, A = AfAt GL_LUMINANCE Undefined C = Cf(1-Lt)+CcLt, A = Af GL_LUMINANCE_ALPHA Undefined C = Cf(1-Lt)+CcLt, A = AfAt GL_INTENSITY Undefined C = Cf(1-It)+CcIt, A = Af(1-It)+AcIt GL_RGB C = Ct, A = Af C = Cf(1-Ct)+CcCt, A = Af GL_RGBA C = Cf(1-At)+CtAt, A = At C = Cf(1-Ct)+CcCt, A = AfAt Ct = color of texture , At = alpha of texture Cf = color of frame buffer , Af = alpha of frame buffer

19 Texture Setting: glTexEnv 3/3
glTexEnv{fi}v(GLenum target, GLenum pname, const GLfloat *params ) target: must be GL_TEXTURE_ENV pname: GL_TEXTURE_ENV_COLOR or GL_TEXTURE_ENV_MODE params: if pname is GL_TEXTURE_ENV_MODE : A pointer to an array of parameters.(GL_MODULATE, GL_DECAL, and GL_BLEND) if pname is GL_TEXTURE_ENV_COLOR: a pointer to an array of R, G, B, A

20 Texture parameter 1/5 glTexParameter{if}(GLenum target, GLenum pname, GLfloat param ) Set texture parameters. target: GL_TEXTURE_1D, GL_TEXTURE_2D pname / param: see next page

21 Texture parameter 2/5 pname param GL_TEXTURE_WRAP_S
GL_TEXTURE_WRAP_T GL_REPEAT, GL_CLAMP GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_NEAREST GL_TEXTURE_BORDER_COLOR color value

22 Texture parameter 3/5 WRAP Clamp both S, T Repeat both S, T
Repeat T but Clamp S

23 Texture parameter 4/5 MAG filter MIN filter
When the pixel being textured maps to an area less than or equal to one texture element MIN filter When the pixel being textured maps to an area greater then one texture element

24 Texture parameter 5/5 GL_LINEAR GL_NEARST pixel Get average color...
texel GL_NEAREST_MIPMAP_XXXXXX Find the most closely match mipmap GL_LINEAR_MIPMAP_XXXXXXX Find the most 2 closely match mipmap and get average.

25 Build mip-maps 1/3 int gluBuild2DMipmaps( GLenum target,
GLint components, GLint width, GLint height, GLenum format, GLenum type, const void *data );

26 Build mip-maps 2/3 target : Must be GL_TEXTURE_2D.
components :The number of color components in the texture. Must be 1, 2, 3, or 4. width, height :width / height of image. format : GL_RGB, GL_RGBA and many others… type :The data type for data data :A pointer to the image data in memory.

27 Build mip-maps 3/3 without mip-map with mip-map

28 Automatic Texture Coordinate Generation
No need to use glTexCoord Three types Sphere Object plane Eye plane

29 Sphere environment.bmp Width/Height: 128/128

30 Object plane -1 S = 1.0 x + 0.0 y + 0.0 z + 0.0 w
T = 0.0 x y z w xyz in world space

31 Object plane -2 S = 1.0 x + 0.0 y + 0.0 z + 0.0 w
T = 0.0 x y z w xyz in world space

32 Eye plane S = 1.0 x y z w T = 0.0 x y z w xyz in eye space

33 Sphere Example 1/3 #include<gl/glaux.h>
#include<gl/glut.h> AUX_RGBImageRec * img; GLuint texObject; void LoadTexture(char* filename){ img = auxDIBImageLoad(filename); glGenTextures(1, &texObject); glBindTexture(GL_TEXTURE_2D, texObject); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img->sizeX, img->sizeY, GL_RGB, GL_UNSIGNED_BYTE, img->data); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D); }

34 Sphere Example 2/3 void GL_display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glColor3f(1.0, 1.0, 1.0); glutSolidTeapot(18); glFlush(); } void GL_reshape(GLsizei w, GLsizei h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 0.5, 100.0); glMatrixMode(GL_MODELVIEW); gluLookAt(0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

35 Sphere Example 3/3 int main(int argc, char** argv) {
glutInit(&argc, argv); glutInitWindowSize(400, 400); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("Texture"); LoadTexture("environment.bmp"); glutDisplayFunc(GL_display); glutReshapeFunc(GL_reshape); glutMainLoop(); }

36 Object Plane Example void LoadTexture(char* filename) {
GLint params1[] = {1.0 , 0.0 , 0.0 ,0.0}; GLint params2[] = {0.0 , 1.0 , 0.0 ,0.0}; img = auxDIBImageLoad(filename); glGenTextures(1, &texObject); glBindTexture(GL_TEXTURE_2D, texObject); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img->sizeX, img->sizeY, GL_RGB,GL_UNSIGNED_BYTE, img->data); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGeniv(GL_S , GL_OBJECT_PLANE , params1); glTexGeniv(GL_T , GL_OBJECT_PLANE , params2); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D); }

37 Eye Plane Example void LoadTexture(char* filename) {
GLint params1[] = {1.0 , 0.0 , 0.0 ,0.0}; GLint params2[] = {0.0 , 1.0 , 0.0 ,0.0}; img = auxDIBImageLoad(filename); glGenTextures(1, &texObject); glBindTexture(GL_TEXTURE_2D, texObject); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img->sizeX, img->sizeY, GL_RGB,GL_UNSIGNED_BYTE, img->data); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGeniv(GL_S , GL_EYE_PLANE , params1); glTexGeniv(GL_T , GL_EYE_PLANE , params2); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D); }

38 Automatic Texture-Coordinate Generation
glTexGen{dfi}(GLenum coord, GLenum pname, GLdouble param); control the generation of texture coordinates coord: GL_S, GL_T, GL_R, or GL_Q. pname: must be GL_TEXTURE_GEN_MODE. param: GL_OBJECT_LINEAR, GL_EYE_LINEAR, or GL_SPHERE_MAP

39 Automatic Texture-Coordinate Generation
glTexGen{dfi}v(GLenum coord, GLenum pname, const GLdouble *params ); coord: GL_S, GL_T, GL_R, or GL_Q. pname: GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE, or GL_EYE_PLANE params: the array of texture generation parameters, if pname is GL_OBJECT_PLANE, or GL_EYE_PLANE. *Generated plane = p1X + p2Y + p3Z + p4W


Download ppt "CH6 Texture."

Similar presentations


Ads by Google