89
418382 สสสสสสสสสสสสสส สสสสสสสสสสสสสสสสสสสสสสส สส สสสสสสสสสสสสสสสสส 5 สสสสสส สสสสสสส [email protected]

418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

  • Upload
    hogan

  • View
    58

  • Download
    8

Embed Size (px)

DESCRIPTION

418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5. ประมุข ขันเงิน [email protected]. TEXTURE MAPPING. Textures. Texture Object An OpenGL data type that keeps textures resident in memory and provides identifiers to easily access them - PowerPoint PPT Presentation

Citation preview

Page 1: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

418382 สภาพแวดล้อมการทำางานคอมพวิเตอรก์ราฟกิส์การบรรยายครัง้ที่ 5

ประมุข ขนัเงิน[email protected]

Page 2: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 3: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 4: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 5: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 6: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 7: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 8: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 9: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 10: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 11: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 12: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 13: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 14: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 15: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 16: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 17: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 18: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 19: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 20: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 21: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 22: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 23: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 24: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 25: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 26: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 27: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 28: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 29: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 30: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 31: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 32: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 33: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

TEXTURE MAPPING

Page 34: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 35: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 36: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 37: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 38: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 39: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 40: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 41: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 42: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 43: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 44: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 45: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

TexturesTexture ObjectTexture Object

• An OpenGL data type that keeps textures resident in memory An OpenGL data type that keeps textures resident in memory and provides identifiers to easily access themand provides identifiers to easily access them

• Provides efficiency gains over having to repeatedly load and Provides efficiency gains over having to repeatedly load and reload a texturereload a texture

• You can prioritize textures to keep in memoryYou can prioritize textures to keep in memory

• OpenGL uses least recently used (LRU) if no priority is OpenGL uses least recently used (LRU) if no priority is assignedassigned

Page 46: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

Step 1 – create Texture Objects

glGenTextures(1, &texture[texture_num]);glGenTextures(1, &texture[texture_num]); • First argument tells GL how many Texture First argument tells GL how many Texture

Objects to createObjects to create

• Second argument is a pointer to the place where Second argument is a pointer to the place where OpenGL will store the names (unsigned OpenGL will store the names (unsigned integers) of the Texture Objects it createsintegers) of the Texture Objects it creates

– texture[ ] is of type GLuinttexture[ ] is of type GLuint

Page 47: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

Step 2 – Specify which texture object is about to be defined

Tell OpenGL that you are going to define the Tell OpenGL that you are going to define the specifics of the Texture Object it createdspecifics of the Texture Object it created• glBindTexture(GL_TEXTURE_2D, glBindTexture(GL_TEXTURE_2D, texture[texture_num]);texture[texture_num]);

– Textures can be 1D and 3D as wellTextures can be 1D and 3D as well

Page 48: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

Step 3 – Begin defining textureglTexParameter()glTexParameter()

• Sets various parameters that control how a texture is treated Sets various parameters that control how a texture is treated as it’s applied to a fragment or stored in a texture objectas it’s applied to a fragment or stored in a texture object

• // scale linearly when image bigger than texture // scale linearly when image bigger than texture glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);FILTER,GL_LINEAR);

• // scale linearly when image smaller than texture // scale linearly when image smaller than texture glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); FILTER,GL_LINEAR);

Page 49: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

Step 4 – Assign image data• glTexImage2D();glTexImage2D();

GL_TEXTURE_2DGL_TEXTURE_2D (2D Texture)(2D Texture)00 (level of detail 0)(level of detail 0)33 (3 components, RGB)(3 components, RGB)image1->sizeXimage1->sizeX (size)(size)image1->sizeYimage1->sizeY (size)(size)00 (no border pixel)(no border pixel)GL_RGBGL_RGB (RGB color order)(RGB color order)GL_UNSIGNED_BYTEGL_UNSIGNED_BYTE (unsigned byte data)(unsigned byte data)

image1->dataimage1->data (pointer to the data))(pointer to the data))

Page 50: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

glTexImage2D – Arg 1GLenum targetGLenum target

• GL_TEXTURE_{1|2|3}DGL_TEXTURE_{1|2|3}D• GL_PROXY_TEXTURE_2DGL_PROXY_TEXTURE_2D

– Provides queries for texture resourcesProvides queries for texture resources– Proceed with hypothetical texture use (GL won’t Proceed with hypothetical texture use (GL won’t

apply the texture)apply the texture)– After query, call GLGetTexLevelParamter to verify After query, call GLGetTexLevelParamter to verify

presence of required system componentspresence of required system components– Doesn’t check possibility of multiple texture Doesn’t check possibility of multiple texture

interferenceinterference

Page 51: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

glTexImage2D – Arg 2GLint levelGLint level

• Used for Level of Detail (LOD)Used for Level of Detail (LOD)• LOD stores multiple versions of texture that can be LOD stores multiple versions of texture that can be

used at runtime (set of sizes)used at runtime (set of sizes)• Runtime algorithms select appropriate version of Runtime algorithms select appropriate version of

texturetexture– Pixel size of polygon used to select best texturePixel size of polygon used to select best texture– Eliminates need for error-prone filtering Eliminates need for error-prone filtering

algorithmsalgorithms

Page 52: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

glTexImage2D – Arg 3GLint internalFormatGLint internalFormat

• GL defines 38 symbolic constants that describe which GL defines 38 symbolic constants that describe which of R, G, B, and A are used in internal representation of of R, G, B, and A are used in internal representation of texelstexels

• Provides control over things texture can doProvides control over things texture can do– High bit depth alpha blendingHigh bit depth alpha blending– High bit depth intensity mappingHigh bit depth intensity mapping– General purpose RGBGeneral purpose RGB

• GL doesn’t guarantee all options are available on GL doesn’t guarantee all options are available on given hardwaregiven hardware

Page 53: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

glTexImage2D – Args 4-6GLsizei widthGLsizei widthGLsizei heightGLsizei height

• Dimensions of texture imageDimensions of texture image– Must be 2Must be 2mm + 2b (b=0 or 1 depending on border) + 2b (b=0 or 1 depending on border) – min, 64 x 64min, 64 x 64

GLint borderGLint border• Width of border (1 or 0)Width of border (1 or 0)

– Border allows linear blending between overlapping texturesBorder allows linear blending between overlapping textures– Useful when manually tiling texturesUseful when manually tiling textures

Page 54: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

glTexImage2D – Args 7 & 8GLenum formatGLenum format

• Describe how texture data is stored in input arrayDescribe how texture data is stored in input array

– GL_RGB, GL_RGBA, GL_BLUE…GL_RGB, GL_RGBA, GL_BLUE…

GLenum type GLenum type • Data size of array componentsData size of array components

– GL_SHORT, GL_BYTE, GL_INT…GL_SHORT, GL_BYTE, GL_INT…

Page 55: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

glTexImage2D – Arg 9Const GLvoid *texelsConst GLvoid *texels

• Pointer to data describing texture mapPointer to data describing texture map

Page 56: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

Step 5 – Apply textureBefore defining geometryBefore defining geometry

• glEnable(GL_TEXTURE_2D);glEnable(GL_TEXTURE_2D);

• glBindTexture(GL_TEXTURE_2D, glBindTexture(GL_TEXTURE_2D, texture[0]);texture[0]);

• glTexEnvf(GL_TEXTURE_ENV, glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);GL_TEXTURE_ENV_MODE, GL_REPLACE);

Page 57: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

glTexEnv()

GL_TEXTURE_ENV_MODEGL_TEXTURE_ENV_MODE GL_DECAL GL_DECAL (alpha blends texture (alpha blends texture with poly color)with poly color)

GL_REPLACE GL_REPLACE (straight up (straight up replacement)replacement)

GL_MODULATE GL_MODULATE (texture (texture application is a function of poly application is a function of poly lighting)lighting)

GL_BLEND GL_BLEND (texture controls (texture controls blending with another color)blending with another color)

If GL_BLEND selected, second If GL_BLEND selected, second call to glTexEnv() must specify call to glTexEnv() must specify GL_TEXTURE_ENV_COLORGL_TEXTURE_ENV_COLOR

4-float array for R,G,B,A blend4-float array for R,G,B,A blend

First argument to function is always GL_TEXTURE_ENV

Page 58: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 59: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 60: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 61: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 62: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 63: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

MIPMAPPING

Page 64: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 65: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 66: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 67: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 68: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 69: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 70: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 71: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 72: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 73: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 74: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5
Page 75: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

MIPMAPSWith versus without MIPMAPWith versus without MIPMAP

Page 76: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

FilteringOpenGL tries to pick best mipmap levelOpenGL tries to pick best mipmap levelQuestion: Question: Which texel corresponds to a particular pixel?Which texel corresponds to a particular pixel?GL_NEAREST (Point Sampling)GL_NEAREST (Point Sampling)

• Pick the texel with center nearest pixelPick the texel with center nearest pixel

GL_LINEAR (Bilinear Sampling)GL_LINEAR (Bilinear Sampling)• Weighted average of 2x2 closest texelsWeighted average of 2x2 closest texels

GL_NEAREST_MIPMAP_LINEARGL_NEAREST_MIPMAP_LINEAR• Average nearest texels from two mipmap levelsAverage nearest texels from two mipmap levels

GL_LINEAR_MIPMAP_LINEAR (Trilinear)GL_LINEAR_MIPMAP_LINEAR (Trilinear)• Average two averaged texels from two mipmapsAverage two averaged texels from two mipmaps

Page 77: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

DEVIL

Page 78: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

DevIL• เป็นไลบรารสีำาหรบัอ่านและเขยีนไฟล์รูปภาพต่างๆ

– นามสกลุ .jpg, .png, .tiff, ฯลฯ• ติดต่อกับ OpenGL ได้ดี• ดาวน์โหลด

– http://openil.sourceforge.net– DevIL 1.7.8 SDK for 32-bit Windows

• Unzip แล้ว– นำาไฟล์ .dll ไปใสไ่วใ้น bin ของท่ีไวไ้ฟล์สำาหรบั CMake– นำาไฟล์ .lib ไปใสไ่วใ้น lib ของท่ีไวไ้ฟล์สำาหรบั CMake– นำาไฟล์ .h ต่างๆ ไปใสไ่วใ้น include/IL ของท่ีไวไ้ฟล์สำาหรบั

CMake

Page 79: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ไฟล์ที่ต้อง include

• สัง่– #include <IL/il.h>– #include <IL/ilu.h>– #include <IL/ilut.h>ไวท่ี้หวัโปรแกรม

Page 80: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ฟงัก์ชนั init ต่างๆ• มไีวเ้พีอ่ให ้DevIL ทัง้ค่าเริม่ต้นของตนเอง• ในฟงัก์ชนั main สัง่

– ilInit();– iluInit();ก่อนเรยีกฟงัก์ชนัอ่ืนๆ ทัง้หมด

• แล้วเรยีก – ilutInit();หลังเรยีก glutInit(…);

Page 81: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

Image Object

• DevIL มรีะบบ รูป คล้ายกับระบบ “ ” texture ของ OpenGL– สรา้งด้วย ilGenImages– กำาหนดด้วย ilBindImage– อ่านรูปจากไฟล์ด้วย ilLoadImage– ลบด้วย ilDeleteImages

Page 82: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ilGenImages

• ILvoid ilGenImages( ILsizei Num, ILuint *ids);– สรา้ง image object หลายๆ อัน– argument แรกคือจำานวน image object ท่ีต้องการสรา้ง– argument ท่ีสองคืออะไรสำาหรบัใส ่ ชื่อ ของ “ ” image

object– การสรา้ง image object เพยีงแค่อันเดียว

• ILuint id;• ilGenImages(1, &id);

– การสรา้ง image object หลายอัน• ILuint id[3];• ilGenImages(3, id);

Page 83: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ilBindImage

• ILvoid ilBindImage(ILuint id)– ใชเ้ซต image object ปัจจุบนัใหเ้ป็น image object ท่ี

มชีื่อท่ีกำาหนด– ตัวอยา่ง

• ILuint id;• ilGenImages(1, &id);• ilBindImage(id);

Page 84: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ilLoadImage• ILboolean ilLoadImage(const char *FileName)

– ใชส้ำาหรบัอ่านรูปจากไฟล์ท่ีกำาหนดชื่อใหม้ายงั image object ปัจจุบนัท่ี bind ไวแ้ล้ว

– argument แรกคือชื่อไฟล์• DevIL จะรูว้า่เป็นไฟล์ชนิดใดโดยอัตโนมติั

– คืนค่า จรงิ ถ้าสามารถอ่านรูปได้และคืนค่า เท็จ ถ้าอ่านไม่“ ” “ ”สำาเรจ็

– ตัวอยา่ง• ILuint id;• ilGenImages(1, &id);• ilBindImage(id);• ilLoadImage(“test.jpg”);

Page 85: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ilDeleteImages• ILvoid ilDeleteImages(

ILsizei Num, ILuint *ids);– ลบ image object หลายๆ อัน– argument แรกคือจำานวน image object ท่ีต้องการลบ– argument ท่ีสองคืออะไรสำาหรบัใส ่ ชื่อ ของ “ ” image object– การลบ image object เพยีงแค่อันเดียว

• ILuint id;• …• ilDeleteImages(1, &id);

– การสรา้ง image object หลายอัน• ILuint id[3];• ilGenImages(3, id);• …• ilDeleteImages(3, id);

Page 86: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ilConvertImage• ILboolean ilConvertImage(

ILenum DestFormat, ILenum DestType )– ใชส้ำาหรบัแปลงขอ้มูลรูปภาพท่ีอยูใ่นภาพท่ี bind ไวเ้ป็นรูปแบบ

อ่ืน– DestFormat คือรูปแบบสขีองแต่ละ pixel

• IL_RGB, IL_RGBA, IL_BGR, IL_BGRA, IL_LUMINANCE, IL_COLOUR_INDEX

– DestType คือชนิดขอ้มูลท่ีใชเ้ก็บสแีต่ละชอ่ง• IL_BYTE, IL_UNSIGNED_BYTE, IL_SHORT , IL_UNSIGNED_SHORT,

IL_INT, IL_UNSIGNED_INT, IL_FLOAT, IL_DOUBLE

Page 87: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

การสง่ขอ้มูลรูปภาพเขา้ OpenGL Texture

• เรยีก glTexImage2D โดยใหข้อ้มูลต่างๆ จาก Image Object– internalFormat ใหป้้อน ilGetInteger(IL_IMAGE_BPP)– width ใหป้้อน ilGetInteger(IL_IMAGE_WIDTH)– height ใหป้้อน ilGetInteger(IL_IMAGE_HEIGHT)– format ใหป้้อน ilGetInteger(IL_IMAGE_FORMAT)– type ใหป้้อน ilGetInteger(IL_IMAGE_TYPE)– data ใหป้้อน ilGetData()

Page 88: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ilGetData

• ILubyte* ilGetData(ILvoid)– คืนขอ้มูลของ image object ท่ิ bind ไวเ้ป็นอะเรยข์อง

unsigned byte

Page 89: 418382 สภาพแวดล้อมการทำงานคอมพิวเตอร์กราฟิกส์ การบรรยายครั้งที่ 5

ตัวอยา่งการใชง้านglGenTextures(1, &tex0);glBindTexture(GL_TEXTURE_2D, tex0);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

ILuint image0;ilGenImages(1, &image0);ilBindImage(image0);char imageName[] = "../../data/yellow-flowers.jpg";ilLoadImage(imageName);ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE);

gluBuild2DMipmaps(GL_TEXTURE_2D, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT),

ilGetInteger(IL_IMAGE_FORMAT), ilGetInteger(IL_IMAGE_TYPE), ilGetData());

ilDeleteImages(1, &image0);