งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

บทที่ 5 Texture Mapping. Texture Mapping ทำได้ 2 วิธี - Surface detail polygons: กำหนด Polygon แต่ ละตัวตามสีที่ต้องการ - ถ้าภาพที่ต้องการซับซ้อน  Speed.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "บทที่ 5 Texture Mapping. Texture Mapping ทำได้ 2 วิธี - Surface detail polygons: กำหนด Polygon แต่ ละตัวตามสีที่ต้องการ - ถ้าภาพที่ต้องการซับซ้อน  Speed."— ใบสำเนางานนำเสนอ:

1 บทที่ 5 Texture Mapping

2 Texture Mapping ทำได้ 2 วิธี - Surface detail polygons: กำหนด Polygon แต่ ละตัวตามสีที่ต้องการ - ถ้าภาพที่ต้องการซับซ้อน  Speed down! - รูปบางอย่างสร้างยาก ( หาโมเดลไม่ได้ ) Map a texture to the surface ( ใช้ทั่วไป ) ความซับซ้อนของภาพไม่มีผลต่อ การจัดการทางเรขาคณิต (transformation, clipping … ) 2

3 Texture Mapping – เทคโนโลยีที่เอาภาพ (image) ไปแปะบนพื้นผิวของ วัตถุ – ไม่ต้องทำ Modeling ให้ซับซ้อนแต่ก็สร้างภาพที่ดูแล้ว เหมือนจริงได้ 3

4 Texture Mapping S t 3D geometry 2D image 2D projection of 3D geometry 1. projection 2. texture lookup 3. patch texel 4

5 Bump Mapping 5

6 Mapping 6

7 Environment Mapping 7

8 8

9 Texture Mapping = + 9

10 + = 10

11 ตัวอย่าง เอาภาพมาแปะที่ตัวคน s t 11

12 Map textures to surfaces (0,0) (1,0) (1,1) 12

13 Texture Texture = ข้อมูลของ pixel ที่บันทึกไว้ใน รูปแบบของ arrayTexture = ข้อมูลของ pixel ที่บันทึกไว้ใน รูปแบบของ array Pixel ของ texture เราเรียกว่า “textel”Pixel ของ texture เราเรียกว่า “textel” Texture coordinate: (s,t)Texture coordinate: (s,t) (s,t): s และ t จะมีค่า 0~1(s,t): s และ t จะมีค่า 0~1 13

14 Texture Representation Bitmap (pixel map) textures (supported by OpenGL) Bitmap texture:  เป็นภาพ2มิติแสดงได้ด้วย 2D array texture[height][width]  แต่ละเซ็ล (texel ) จะมีคู่กับจุด texture coordinate (s, t)  s=[0,1], t=[0,1] s t (0,0) (1,1) 14

15 Texture Mapping s t texel[j][k]: เก็บข้อมูลสีของ texture j:0~599, k:0~399 j:0~599, k:0~399 15

16 Texture Mapping st texture(0,0)  texel[0][0] texture(0,1)  texel[0][399] texture(1,0)  texel[599][0] texture(1,1)  texel[599][399] Color3 texture(float s,float t){ return texel[(int)s*W][(int)t*H]; return texel[(int)s*W][(int)t*H];} texture(0.261,0.783)  texel[156][313] 16

17 Texture Mapping การเอาภาพ (image) ไปแปะบน polygon การเอาภาพ (image) ไปแปะบน polygon st xyz xsxsxsxs ysysysys 17

18 Texture Mapping stxyz xsxsxsxs ysysysys 18

19 Texture Mapping st(1,1) ysysysys xsxsxsxs (1,1) s = x s t = y s s t (1,1) ysysysys xsxsxsxs (3/2,1) s = 2x s /3 t = y s 19

20 Texture Component 1 component texture:1 component texture: จะแสดงความสว่างของแสงเท่านั้น เช่น ไม้ สนามหญ้า หาดทรายขาว จะแสดงความสว่างของแสงเท่านั้น เช่น ไม้ สนามหญ้า หาดทรายขาว 20

21 Texture Component 2 component texture:2 component texture: จะแสดงความสว่างของแสงและความโปร่งใส เช่น เมฆ จะแสดงความสว่างของแสงและความโปร่งใส เช่น เมฆ 21

22 Texture Component 3 component texture: 3 component texture: จะแสดงสีของแสง (RGB) จะแสดงสีของแสง (RGB) 22

23 Texture Component 4 component texture: 4 component texture: จะแสดงสีของแสงและค่าความโปร่งใส (RGBA) จะแสดงสีของแสงและค่าความโปร่งใส (RGBA) 23

24 การกำหนดค่าต่างๆของ Texture Texture Setup GLvoid glTexImage2D(Glenum target,GLint level,GLint components, GLsizei width,GLsizei height,GLint border,GLenum format, GLenum type,const GLvoid *image); GLenum type,const GLvoid *image); target target เป็น GL_TEXTURE_2D เป็น GL_TEXTURE_2D level(mipmap level) level(mipmap level) 0: ภาพที่เป็น original 0: ภาพที่เป็น original i: ภาพ mipmap ลำดับที่ i i: ภาพ mipmap ลำดับที่ i 24

25 การกำหนดค่าต่างๆของ Texture GLvoid glTexImage2D(Glenum target,GLint level,GLint components, GLsizei width,GLsizei height,GLint border,GLenum format, GLenum type,const GLvoid *image); GLenum type,const GLvoid *image); Component(1~4) Component(1~4) Width(2^m) Width(2^m) Height(2^n) Height(2^n) Border(0 or 1) Border(0 or 1) 25

26 การกำหนดค่าต่างๆของ Texture GLvoid glTexImage2D(Glenum target,GLint level,GLint components, GLsizei width,GLsizei height,GLint border,GLenum format, GLenum type,const GLvoid *image); GLenum type,const GLvoid *image); Format เช่น GL_RGB,GL_RGBA Format เช่น GL_RGB,GL_RGBA type ประเภทของ texel เช่น type ประเภทของ texel เช่น GL_BYTE,GL_UNSIGNED_BYTE Image Image ภาพที่จะนำมาทำเป็น texture มีขนาด 2^m x 2^n ภาพที่จะนำมาทำเป็น texture มีขนาด 2^m x 2^n 26

27 Generate Texture #define ImageWidth 8 #define ImageHeight 8 static Glubyte textureImage1[ Width][ Height][ 4]; void generateTexture1() { int i, j, c; for (i= 0; i< ImageWidth; i++) for (j= 0; j< ImageHeight; j++) { for (j= 0; j< ImageHeight; j++) { c = (( i& 0x8)^( j& 0x8)) * 255; textureImage1[ i][ j][ 0] = (GLubyte) c; textureImage1[ i][ j][ 1] = (GLubyte) c; textureImage1[ i][ j][ 2] = (GLubyte) c; textureImage1[ i][ j][ 3] = 255;} }}} 27

28 Generate Texture R0G0B0A0R1G1B1A1R2G2B2A2R3G3B3A3 R0G0B0R1G1B1R2G2B2R3G3B3 3 component texture 4 component texture 28

29 การกำหนดค่าต่างๆของ Texture glTexImage2D( GL_ TEXTURE_ 2D, 0, 4, Width, Height,0, GL_ RGBA, GL_ UNSIGNED_ BYTE,textureImage1 GL_ RGBA, GL_ UNSIGNED_ BYTE,textureImage1); 29

30 Texture Object GLuint textureID; glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, … ); glBindTexture(GL_TEXTURE_2D, textureID); เรียกใช้ texture ชื่อ textureID กำหนดค่าต่างๆเช่น format … สร้าง texture object จำนวน texture object มี 1 อัน มี ID คือ ? 30

31 Texture Parameter void glTexParameteri( GLenum target,GLenum pname,TYPE param ); target : GL_ TEXTURE_ WRAP_ S GL_ TEXTURE_ WRAP_ T GL_ TEXTURE_ MAG_ FILTER GL_ TEXTURE_ MIN_ FILTER GL_ TEXTURE_ BORDER_ COLOR GL_ TEXTURE_ PRIORITY 31

32 Texture Parameter Magnification Minification texture texture Polygon Polygontexelpixel 32

33 MagnificationMagnification Parameter GL_NEAREST: เลือก texel ที่ใกล้ที่สุด GL_NEAREST: เลือก texel ที่ใกล้ที่สุด GL_LINEAR: หาค่าเฉลี่ยของ texel รอบๆ GL_LINEAR: หาค่าเฉลี่ยของ texel รอบๆ 4 texel 4 texel 33

34 MinificationMinification 34

35 MipmapMipmap การขยายหรือย่อขนาดของ texture ทำให้เกิดการ กระพริบเวลา reshape การขยายหรือย่อขนาดของ texture ทำให้เกิดการ กระพริบเวลา reshape สร้าง texture ที่มีขนาดหลายๆขนาดเตรียมเอาไว้ สร้าง texture ที่มีขนาดหลายๆขนาดเตรียมเอาไว้ OpenGL จะเลิกใช้ mipmap ที่เหมาะสมโดยอัตโนมัติ OpenGL จะเลิกใช้ mipmap ที่เหมาะสมโดยอัตโนมัติ 35

36 MipmapMipmap GLubyte mipmapImage32[ 32][ 32][ 4]; GLubyte mipmapImage16[ 16][ 16][ 4]; GLubyte mipmapImage8[ 8][ 8][ 4]; GLubyte mipmapImage4[ 4][ 4][ 4]; GLubyte mipmapImage2[ 2][ 2][ 4]; GLubyte mipmapImage1[ 1][ 1][ 4]; void createMipMaps() {....} 36

37 MipmapMipmap void createMipMaps() {.... glTexImage2D( GL_ TEXTURE_ 2D, 0, GL_ RGBA, 32, 32, 0, GL_ RGBA, GL_ UNSIGNED_ BYTE,mipmapImage32); glTexImage2D( GL_ TEXTURE_ 2D, 1, GL_ RGBA, 16, 16, 0, GL_ RGBA, GL_ UNSIGNED_ BYTE,mipmapImage16); glTexImage2D( GL_ TEXTURE_ 2D, 2, GL_ RGBA, 8, 8, 0, GL_ RGBA, GL_ UNSIGNED_ BYTE,mipmapImage8);....} 37

38 Texture Parameter (0,0) (1,1) texture GL_Repeat (0,0) (2,2) (0,0) (2,2) GL_Clamp If (s >1) s = 1 If (t >1) t = 1 38

39 Texture Parameter 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_ WRAP_ S,GL_ CLAMP); glTexParameteri( GL_ TEXTURE_ 2D, GL_ TEXTURE_ WRAP_ T,GL_ CLAMP); 39

40 Texture Parameter 40

41 การกำหนดตำแหน่งของ texture บน polygon glBegin( GL_QUADS ); glTexCoord2fv( t0 ); glVertex3fv( v0 ); glTexCoord2fv( t1 ); glVertex3fv( v1 ); glTexCoord2fv( t2 ); glVertex3fv( v2 ); glTexCoord2fv( t3 ); glVertex3fv( v3 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2fv(0.0,0.0 ); glVertex3fv(- 2.0,0.0,0.0); glTexCoord2fv(1.0,0.0); glVertex3fv(0.0,- 2.0,0.0); glTexCoord2fv(1.0,1.0); glVertex3fv(2.0,0.0,0.0); glTexCoord2fv(0.0,1.0); glVertex3fv(0.0,2.0,0.0); glEnd(); 41

42 Texture  Vertex glBegin( GL_ QUADS); glTexCoord2d( 0. 0, 0.0 ); glVertex3d( x0, y0, z0 ); glTexCoord2d( 1. 0, 0.0 ); glVertex3d( x1, y1, z1 ); glTexCoord2d( 1. 0, 1.0 ); glVertex3d( x2, y2, z2 ); glTexCoord2d( 0. 0, 1.0 ); glVertex3d( x3, y3, z3 ); glEnd(); 42

43 Texture  Vertex glBegin( GL_ QUADS); glTexCoord2d( 0. 0, 0. 0 ); glVertex3d( x0, y0, z0 ); glTexCoord2d( 1. 0, 0. 0 ); glVertex3d( x1, y1, z1 ); glTexCoord2d( 1. 0, 1. 0 ); glVertex3d( x2, y2, z2 ); glTexCoord2d( 0. 0, 1. 0 ); glVertex3d( x3, y3, z3 ); glEnd(); glBegin( GL_ QUADS); glTexCoord2d( 0. 0, 0. 0 ); glVertex3d( x0, y0, z0 ); glTexCoord2d( 4. 0, 0. 0 ); glVertex3d( x1, y1, z1 ); glTexCoord2d( 4. 0, 4. 5 ); glVertex3d( x2, y2, z2 ); glTexCoord2d( 0. 0, 4. 5 ); glVertex3d( x3, y3, z3 ); glEnd(); 43

44 Enable (Disable) Textures Enable texture – glEnable(GL_TEXTURE_2D) Disable texture – glDisable(GL_TEXTURE_2D) 44

45 Put it all together … 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_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); … glEnable(GL_TEXTURE_2D); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, mytexture); Draw_picture1(); // define texture coordinates and vertices in the function …. 45

46 Display List ก้อนคำสั่งทางกราฟฟิก ก้อนคำสั่งทางกราฟฟิก เก็บเอาไว้ใน memory เก็บเอาไว้ใน memory จะเสียเวลานานนิดนึงในการสร้าง display list จะเสียเวลานานนิดนึงในการสร้าง display list การเรนเดอร์ภาพจะเร็วขึ้นมาก การเรนเดอร์ภาพจะเร็วขึ้นมาก 46

47 Display List Model glBegin(GL_LINES); glVertex( … ); …. glEnd(); Display List เรียกใช้คำสั้งวาดภาพที่ เก็บไว้ใน display list 47

48 คุณสมบัติของ display list เร็วเพราะไม่ต้องเสียเวลาคำนวณใหม่ เร็วเพราะไม่ต้องเสียเวลาคำนวณใหม่ สับเปลี่ยน texture หลายๆแบบได้ สับเปลี่ยน texture หลายๆแบบได้ ออกแบบโมเดลที่มีความสัมพันธ์แบบ Tree ได้ ออกแบบโมเดลที่มีความสัมพันธ์แบบ Tree ได้ 48

49 วิธีการสร้าง Display List Gluint glGenLists(int count); สร้างและกำหนดชื่อ display list สร้างและกำหนดชื่อ display list คืน ID( ชื่อ ) คืน ID( ชื่อ ) count คือจำนวนของ display list count คือจำนวนของ display list ที่ต้องการสร้าง ที่ต้องการสร้าง Glboolean glIslist(Gluint list); ตรวจสอบว่าชื่อ list ถูกใช้แล้วหรือยัง ตรวจสอบว่าชื่อ list ถูกใช้แล้วหรือยัง 49

50 วิธีการใช้ Display List glNewList( 1, GL_COMPILE ); glColor3fv( colorVector ); glTranslatef( 1.5, 0.0, 0.0 ); glBegin( GL_TRIANGLES ); glVertex2f( 0.0, 0.0 ); glVertex2f( 1.0, 0.0 ); glVertex2f( 0.0, 1.0 ); glEnd();glEndList(); Glvoid glNewList(Gluinit Listindex,Glenum Mode); …… Glvoid glEndList(); Listindex: ชื่อ display list Mode: GLCOMPILE, GLCOMPILE_AND_EXECUTE 50

51 ลบ Display List GLvoid glDeleteLists( GLuint rstIndex, GLsizei count ) 51

52 ตัวอย่างตัวอย่าง glNewList( 1, GL_COMPILE ); /*สร้าง [1] */ drawFin();glEndList(); glNewList( 2, GL_COMPILE ); /* สร้าง [2] */ drawFish();glEndList(); glNewList( 3, GL_COMPILE ); /* สร้าง [3] ( run [1] 、 [2]*/ glCallList( 1 ); glCallList( 2 ); glEndList(); ・ ・ ・ glCallList( 3 ); /* drawFin(); drawFish(); */ 52

53 Display List glNewList( 1, GL_COMPILE ); /* define ใหม่ [1] */ drawNewFin();glEndList(); ・ ・ ・ glCallList( 3 ); /* drawNewFin(); drawFish(); */ 53

54 Texture+Display List glNewList( 1, GL_COMPILE ); /*สร้าง [1] */ สร้าง texture 1 สร้าง texture 1glEndList(); glNewList( 2, GL_COMPILE ); /* สร้าง [2] */ สร้าง texture 2 สร้าง texture 2glEndList();….glCallList(1);glBegin(GL_QUADS); กำหนด vertex ของ polygons กำหนด vertex ของ polygonsglEnd(); glCallList(2);glBegin(GL_QUADS); glEnd(); 54

55 glTexImage2D(GL TEXTURE 2D, 0, GL RGBA, 64, 64, 0, GL RGBA, GL UNSIGNED BYTE, MIPLevels[0]); 55


ดาวน์โหลด ppt บทที่ 5 Texture Mapping. Texture Mapping ทำได้ 2 วิธี - Surface detail polygons: กำหนด Polygon แต่ ละตัวตามสีที่ต้องการ - ถ้าภาพที่ต้องการซับซ้อน  Speed.

งานนำเสนอที่คล้ายกัน


Ads by Google