??? ??? RGBA ????? ?? - PowerPoint PPT Presentation

1 / 124
About This Presentation
Title:

??? ??? RGBA ????? ??

Description:

Title: Last modified by: Myeong Won Lee Created Date: 7/2/2004 7:33:25 AM Document presentation format: (4:3) – PowerPoint PPT presentation

Number of Views:8
Avg rating:3.0/5.0
Slides: 125
Provided by: vmlabSuw
Category:
Tags: rgba | cfit

less

Transcript and Presenter's Notes

Title: ??? ??? RGBA ????? ??


1
? ? ? ? ?
2
??? ??
  • ????? ??
  • ???? ???
  • ???
  • ??? ????
  • ??? ???
  • ??? ??? ??
  • ??? ?? ???? ????
  • ??? ??

3
??? ??? ??
  • ??? ????? ???, ????? ?? ???? ??
  • ???? ??? ??? ??? ???? ??? ??
  • ??? ??? ???
  • ???? ???? ??? ??? ??? ???.
  • ??? ??? RGBA ????? ??

4
??
  • ??? ???(??, ??, ??? ?? ???)?? ??? ??
  • ??(texel) ??? ?? ??? ?? ????? ?
  • ?????(tessellation) ???? ? ???? ???? ???? ????
    ??? ??? ??? ??? ????? ??
  • ?? ???? ?????? ??? ????? ?? ????? ???? ???? ????
    ?? ??? ???? ???? ??? ???? ???? ??? ?? ??

5
??? ??? ??
  • (1) ??? ????? ???, ????? ?? ??? ????
  • ???? ???? ?? 2???? ?? ??? 1??? ? ? ??, 3??? ? ?
    ??.
  • ???? ???? ???? ? ?, ? ?, ? ?, ?? ? ?? ? ??? ??
    ???? ??
  • R, G, B, A ? 4? ???? ??? ?? ??
  • ?? 9-1
  • ??? ??? ????? ??? ???? ???? ?? ??

6
  • (2) ???? ? ??? ???? ?? ????
  • ????? ??? ??? ?????? ??? RGBA?? ??? ? 4?? ?? ??
  • ??? ??? ??? ?? ??? ???? ??(????)?
  • ???? ????? ??? ??? ???? ???? ??? ??.
  • ???? ????? ??? ? ??

7
  • (3) ??? ??? ???
  • ??? ??? ?? ???? ???? ??
  • GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D ???
    ???? ??? ??? ???? ? ? ??
  • (4) ???? ???? ??? ??? ?? ???
  • ???? ??? ????? ?????? ?????? ??
  • ? ??? ????? ????? ??? ??? ???? ??? ???? ?

8
?? 9-1 ??? ?? ??? ??? checker.c
  • include ltGL/glut.hgt
  • include ltstdlib.hgt
  • include ltstdio.hgt
  • / Create checkerboard texture /
  • define checkImageWidth 64
  • define checkImageHeight 64
  • static GLubyte checkImagecheckImageHeightcheckI
    mageWidth4
  • ifdef GL_VERSION_1_1
  • static GLuint texName
  • endif

9
  • void makeCheckImage(void)
  • int i, j, c
  • for (i 0 i lt checkImageHeight i)
  • for (j 0 j lt checkImageWidth j)
  • c ((((i0x8)0)((j0x8))0))255
  • checkImageij0 (GLubyte) c
  • checkImageij1 (GLubyte) c
  • checkImageij2 (GLubyte) c
  • checkImageij3 (GLubyte) 255

10
  • void init(void)
  • glClearColor (0.0, 0.0, 0.0, 0.0)
  • glShadeModel(GL_FLAT)
  • glEnable(GL_DEPTH_TEST)
  • makeCheckImage()
  • glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
  • ifdef GL_VERSION_1_1
  • glGenTextures(1, texName)
  • glBindTexture(GL_TEXTURE_2D, texName)
  • endif

11
  • 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)
  • ifdef GL_VERSION_1_1
  • glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
    checkImageWidth, checkImageHeight,
  • 0, GL_RGBA, GL_UNSIGNED_BYTE,
    checkImage)
  • else
  • glTexImage2D(GL_TEXTURE_2D, 0, 4,
    checkImageWidth, checkImageHeight,
  • 0, GL_RGBA, GL_UNSIGNED_BYTE,
    checkImage)
  • endif

12
  • void display(void)
  • glClear(GL_COLOR_BUFFER_BIT
    GL_DEPTH_BUFFER_BIT)
  • glEnable(GL_TEXTURE_2D)
  • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
    GL_DECAL)
  • ifdef GL_VERSION_1_1
  • glBindTexture(GL_TEXTURE_2D, texName)
  • endif
  • glBegin(GL_QUADS)
  • glTexCoord2f(0.0, 0.0) glVertex3f(-2.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 1.0) glVertex3f(-2.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 1.0) glVertex3f(0.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 0.0) glVertex3f(0.0, -1.0,
    0.0)

13
  • glTexCoord2f(0.0, 0.0) glVertex3f(1.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 1.0) glVertex3f(1.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 1.0) glVertex3f(2.41421,
    1.0, -1.41421)
  • glTexCoord2f(1.0, 0.0) glVertex3f(2.41421,
    -1.0, -1.41421)
  • glEnd()
  • glFlush()
  • glDisable(GL_TEXTURE_2D)
  • void reshape(int w, int h)
  • glViewport(0, 0, (GLsizei) w, (GLsizei) h)
  • glMatrixMode(GL_PROJECTION)
  • glLoadIdentity()

14
  • gluPerspective(60.0, (GLfloat) w/(GLfloat) h,
    1.0, 30.0)
  • glMatrixMode(GL_MODELVIEW)
  • glLoadIdentity()
  • glTranslatef(0.0, 0.0, -3.6)
  • void keyboard (unsigned char key, int x, int y)
  • switch (key)
  • case 27
  • exit(0)
  • break
  • default
  • break

15
  • int main(int argc, char argv)
  • glutInit(argc, argv)
  • glutInitDisplayMode(GLUT_SINGLE GLUT_RGB
    GLUT_DEPTH)
  • glutInitWindowSize(250, 250)
  • glutInitWindowPosition(100, 100)
  • glutCreateWindow(argv0)
  • init()
  • glutDisplayFunc(display)
  • glutReshapeFunc(reshape)
  • glutKeyboardFunc(keyboard)
  • glutMainLoop()
  • return 0

16
(No Transcript)
17
?? ???? ?? checker.c
  • ???? makeCheckImage() ? ????
  • init()?? ????? ???
  • glGenTextures()? glBindTexture()? ??? ??? ???
    ???.
  • glTexImage2D()? ?? ??? ?? ??? ?? ????. ??? ??,
    ??, ??, ??? ??? ??? ???.
  • glTexParameter()? ???? ??? ??????, ???? ??
    ????? ??? ?? ?? ??? ??? ???? ???
  • display()?? glEnable()? ?? ???? ??
  • glTexEnv()? GL_REPLACE ? ??? ?? ??
  • ??? ???? ?? ?? GL_DECAL, GL_REPLACE,
    GL_MODULATE, GL_BLEND
  • glTexCoord()? ???? ??? ??? ??

18
???? ???
  • glTextImage2D()? 2?? ??? ???? ??
  • 1?? glTextImage1D(), 3?? glTextImage3D()
  • void glTextImage2D(GLenum target, GLint level,
    GLint internalFormat, GLsizei width, GLsizei
    height, GLint border, GLenum format, GLenum type,
    const GLvoid texels)
  • target ??? GL_TEXTURE_2D, GL_PROXY_TEXTURE_2D? ??
  • (??) ??????? OpenGL ????? ?? ?????? ?? ?? ??? ???
    ???? ???? ??? ? ??? ?.
  • level ??? ??? ??. ???? ??? ??(??? ???? ?? ??)
    level? 0
  • internalFormat ??? ??? ???? R, G, B, A ????? ??
    ????? ???. 1?? 4? ?. ?? 38?? ????? ???
  • GL_ALPHA, GL_ALPHA4, GL_LUMINANCE4, GL_RGB4 ?
  • width, height ? ??? ???? ??(?? ??) ??. ?? 64x64.
    2m2b (m? ??? ?? ?, b? border ?)??? ??? ?.

19
  • border? 0(???? ??)?? 1(??? ??)?? ???? ?? ???.
  • format, type ??? ??? ???? ??? ??? ??? ???
  • format GL_COLOR_INDEX, GL_RGB, GL_GREEN,
    GL_BLUE, GL_ALPHA,
  • type GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,
  • texels ??? ??? ???

20
  • ???? ???? ?? ???? ??? ??? ?? ?? ???? 2? ????? ?.
    ? ??? ?? ??? ????gluScaleImage() ???? ???? ???
    ????
  • Int gluScaleImage(GLenum format, GLint widthin,
    GLint heightin, GLenum typein, const void
    datain, GLint widthout, GLint heightout, GLenum
    typeout, void dataout)
  • datain?? ?? ???? ?? ?? ??? ?? ????? ??, ???? ???
  • ?? ???? GL_PACK ????? ???? dataout? ???.

21
  • glCopyTexImage2D()? ???????? ?? ???? read, ? ????
    ??? ???? ???? ??
  • void glCopyTexImage2D(GLenum target, GLint level,
    GLint internalFormat, GLint x, GLint y, GLsizei
    width, GLsizei height, GLint border)
  • ???? ???? ?? ??? ?? ???? ???? 2?? ???? ??.
  • target ??? ?? GL_TEXTURE_2D? ????? ?
  • ??? ??? ??? ?? (x, y) ??? ?? ?? ????? ???? ????
  • width/height ? ??? ???? ??, ? ? 2m2b ? ??
  • m? ?? ?? ??, b? border ?

22
??? ???
  • OpenGL ?? ??? ?? ??? ??? ?? ?? ??? ??? ???? ????
    ??? ? ??? ??? ??? ???(proxy) ??
  • OpenGL? ??? ?? ??? ??? ?? GL_PROXY_TEXTURE_2D ?
    target ??? ??? level, internalFormat, width,
    height, border, format, type? ??? glTexImage2D()?
    ??
  • ???? ?? ?? ??? ?? ????? NULL?? ??? ?
  • ???? ???? ??? ???? ??? ???? ?? ??? ???? ??? ??
    glGetTexLevelParameter()? ??, ??? ????? ??
  • void glGetTextLevelParameterifv(GLenum target,
    GLint level, GLenum pname, TYPE params)

23
?? 9-2 ??? ???
  • ??? ???? ??? ??? ????
  • GLInt width
  • glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA8,
    64, 64, 0,GL_RGBA, GL_UNSIGNED_BYTE, NULL)
  • glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D,
    0, GL_TEXTURE_WIDTH, width)

24
  • ??? ???? ?? ?? ?? ???
  • ?? ???? 2?? ??? ???? ???? ?? ??(subregion)? ?? ??
    ???? ???? 2?? ??? ??? ??
  • void glTexSubImage2D(GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLsizei width,
    GLsizei height, GLenum format, GLenum type, const
    GLvoid texels)
  • target ??? GL_TEXTURE_2D? ??
  • level ?? LOD(level-of-detail)
  • width/height ?? ??? ???? ?? ?? ??? ???? ?? ???
    ??
  • xoffset/yoffset x-, y- ??? ?? ???. ?? ???? ????
    ??

25
??9-3 ??? ?? ??? ?? texsub.c
  • include ltGL/glut.hgt
  • include ltstdlib.hgt
  • include ltstdio.hgt
  • ifdef GL_VERSION_1_1
  • define checkImageWidth 64
  • define checkImageHeight 64
  • define subImageWidth 16
  • define subImageHeight 16
  • static GLubyte checkImagecheckImageHeightcheckI
    mageWidth4
  • static GLubyte subImagesubImageHeightsubImageWi
    dth4
  • static GLuint texName

26
  • void makeCheckImages(void)
  • int i, j, c
  • for (i 0 i lt checkImageHeight i)
  • for (j 0 j lt checkImageWidth j)
  • c (((i0x8)0)((j0x8)0))255 //??
  • checkImageij0 (GLubyte) c
  • checkImageij1 (GLubyte) c
  • checkImageij2 (GLubyte) c
  • checkImageij3 (GLubyte) 255

27
  • for (i 0 i lt subImageHeight i)
  • for (j 0 j lt subImageWidth j)
  • c (((i0x4)0)((j0x4)0))255 //??
  • subImageij0 (GLubyte) c
  • subImageij1 (GLubyte) 0
  • subImageij2 (GLubyte) 0
  • subImageij3 (GLubyte) 255
  • void init(void)
  • glClearColor (0.0, 0.0, 0.0, 0.0)
  • glShadeModel(GL_FLAT)
  • glEnable(GL_DEPTH_TEST)

28
  • makeCheckImages()
  • glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
  • glGenTextures(1, texName)
  • glBindTexture(GL_TEXTURE_2D, texName)
  • 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)
  • glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
    checkImageWidth, checkImageHeight, 0, GL_RGBA,
    GL_UNSIGNED_BYTE, checkImage)

29
  • void display(void)
  • glClear(GL_COLOR_BUFFER_BIT
    GL_DEPTH_BUFFER_BIT)
  • glEnable(GL_TEXTURE_2D)
  • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
    GL_DECAL)
  • glBindTexture(GL_TEXTURE_2D, texName)
  • glBegin(GL_QUADS)
  • glTexCoord2f(0.0, 0.0) glVertex3f(-2.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 1.0) glVertex3f(-2.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 1.0) glVertex3f(0.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 0.0) glVertex3f(0.0, -1.0,
    0.0)

30
  • glTexCoord2f(0.0, 0.0) glVertex3f(1.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 1.0) glVertex3f(1.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 1.0) glVertex3f(2.41421,
    1.0, -1.41421)
  • glTexCoord2f(1.0, 0.0) glVertex3f(2.41421,
    -1.0, -1.41421)
  • glEnd()
  • glFlush()
  • glDisable(GL_TEXTURE_2D)
  • void reshape(int w, int h)
  • glViewport(0, 0, (GLsizei) w, (GLsizei) h)
  • glMatrixMode(GL_PROJECTION)
  • glLoadIdentity()

31
  • gluPerspective(60.0, (GLfloat) w/(GLfloat) h,
    1.0, 30.0)
  • glMatrixMode(GL_MODELVIEW)
  • glLoadIdentity()
  • glTranslatef(0.0, 0.0, -3.6)
  • void keyboard (unsigned char key, int x, int y)
  • switch (key)
  • case 's'
  • case 'S'
  • glBindTexture(GL_TEXTURE_2D, texName)
  • glTexSubImage2D(GL_TEXTURE_2D, 0, 12,
    44, subImageWidth,
  • subImageHeight, GL_RGBA,
  • GL_UNSIGNED_BYTE,
    subImage)
  • glutPostRedisplay()
  • break

32
  • case 'r'
  • case 'R'
  • glBindTexture(GL_TEXTURE_2D, texName)
  • glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
    checkImageWidth,
  • checkImageHeight, 0,
    GL_RGBA,
  • GL_UNSIGNED_BYTE,
    checkImage)
  • glutPostRedisplay()
  • break
  • case 27
  • exit(0)
  • break
  • default
  • break

33
  • int main(int argc, char argv)
  • glutInit(argc, argv)
  • glutInitDisplayMode(GLUT_SINGLE GLUT_RGB
    GLUT_DEPTH)
  • glutInitWindowSize(250, 250)
  • glutInitWindowPosition(100, 100)
  • glutCreateWindow(argv0)
  • init()
  • glutDisplayFunc(display)
  • glutReshapeFunc(reshape)
  • glutKeyboardFunc(keyboard)
  • glutMainLoop()
  • return 0

34
  • else
  • int main(int argc, char argv)
  • fprintf (stderr, "This program demonstrates a
    feature which is not in OpenGL Version 1.0.\n")
  • fprintf (stderr, "If your implementation of
    OpenGL Version 1.0 has the right extensions,\n")
  • fprintf (stderr, "you may be able to modify
    this program to make it run.\n")
  • return 0
  • endif

35
????
36
  • glCopyTexSubImage2D()? ?????? ?? ??? ???? ??,
    ???? ??? ??? ??? ??
  • void glCopyTexSubImage2D(GLenum target, GLint
    level, GLint xoffset, GLint yoffset, GLint x,
    GLint y,GLsizei width, GLsizei height)
  • ???? 2?? ??? ???? ???? ?? ??? ?? ?? ??? ???? ??
    ??? ??? ??? ?? ??
  • target ??? GL_TEXTURE_2D? ??
  • level? ????? ?? ??, xoffset,yoffset? x,y??? ??
    offset? ??

37
1?? ???
  • ??? 1?? ???? ??? ?? glTexImage1D() ??
  • ? ???? ???? ??? ? ??? ?? ? ??? 1?? ???? ?? ??
    ???? ?? 1?? ??? ??
  • void glTexImage1D(GLenum target, GLint level,
    GLint internalFormat, GLsizei width, GLint
    border, GLenum format, GLenum type, const GLvoid
    texels)
  • texels? 1?? ??, width ?? 2m (?? ??? ??? 2m 2)

38
  • 1?? ???? ?? ?? ?? ??? ???? ??? glTexSubImage1D()?
    ??
  • void glTexSubImage1D(GLenum target, GLint level,
    GLint xoffset, GLsizei width, GLenum format,
    GLenum type,const GLvoid texels)
  • ???? 1?? ??? ???? ???? ?? ??? ?? ?? ??? ???? 1??
    ??? ??? ??
  • level, format, type ??? glTexImage1D()?? ???? ??
    ??

39
  • ?????? ??? 1?? ???? ??? ??? 1?? ??? ????? ????
    ??? glCopyTexImage1D()? glCopyTexSubImage1()? ??
  • void glCopyTexImage1D(GLenum target, GLint level,
    GLint internalFormat, GLint x, GLint y, GLsizei
    width,GLint border)
  • ??? ???? ??? ????? ??? ??, 1?? ???? ???.
  • target? GL_TEXTURE_1D??? ????? ?
  • width ? ?? ?? ??? ? ??. ?? 2m(??? ?? ??? 2m2)

40
  • void glCopyTexSubImage1D(GLenum target, GLint
    level, GLint xoffset, GLint x, GLint y, GLsizei
    width)
  • ???? 1?? ??? ???? ???? ???? ?? ?? ??? ???? ??
    ?????? ??? ??? ??
  • target ??? GL_TEXTURE_1D? ??
  • level ?? ??? ?? ??
  • xoffset ?? offset ??

41
3?? ??? ? ?? ??
  • 3?? ???? ??, ????? ??????? ??? ?? ???
  • ??? ???? ????(CT), ???? ???(MRI)???? ????? ??
  • ?? ??? ? ???
  • 3?? ??? ???? 2?? ?? ??? ??? ??? ??
  • ????? ???? ??? ??
  • 3?? ???? ??? ?? glTexImage3D()??

42
  • void glTexImage3D(GLenum target, GLint level,
    GLint internalFormat, GLsizei width, GLsizei
    height, GLsizei depth, GLint border, GLenum
    format, GLenum type, const GLvoid texels)
  • 3?? ??? ??
  • ?? ??? glTexImage2D() ? ?? ??? ???? ??? 3?? ????
    depth ??? ??. Depth ?? 2m(???? ?? ??? 2m1)
  • ???? ??? ???? ??? ? ???, ??? ??? ??? ??

43
  • 3?? ???? ?? ?? ??? ????? glTexSubImage3D()? ??
  • void glTexSubImage3D(GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLint zoffset,
    GLsizei width, GLsizei height, GLsizei depth,
    GLenum format, GLenum type, const GLvoid
    texels)
  • ???? 3?? ??? ???? ???? 3?? ??? ??? ??
  • target ??? GL_TEXTURE_3D? ?? ?
  • level, format, type glTexImage3D() ?? ??? ??
    ??.

44
  • 3?? ???? ??? ???? ???? ?????? ???? ??
    glCopyTexSubImage3D()? ??
  • void glCopyTexSubImage3D(GLenum target, GLint
    level, GLint xoffset, GLint yoffset, GLint
    zoffset, GLsizei width, GLsizei height)
  • ???? 3?? ??? ???? ???? ?? ??? ???? ??, ??? ???
    ??? ??? ??
  • target ??? GL_TEXTURE_3D ??

45
3?? ???? ?? ?? ??
  • ?? ???? ? ?? ?? ??? ??
  • glPixelStore()? ???? ?? ??? ?? ???? ?? ???? ???
    ???? ????? ???? ?? ????? ???
  • ROW_LENGTH, ALIGNMENT, SKIP_PIXELS,
    SKIP_ROWS(? GL_UNPACK_ ?? GL_PACK_ ??)
  • 3?? ??? ??? ??? ?? ??? ???? ??? ??? ?? ?? ??? ??
  • IMAGE_HEIGHT,SKIP_IMAGES ?
  • ??? ???? ?? ??? ??? ??? ???? ?? glTexImage3D(),
    glSubImage3D(), glGetTexImage() ??? ??

46
  • ?? ???? ?? 3?? ???? ??? ?? ???? ??? ????
    IMAGE_HEIGHT??? ???? ??? ?? ??? ??? ??
  • ?? ??? ??? ??? ???? ???? SKIP_IMAGES ????? ??

47
IMAGE_HEIGHT ?? ?? ??
Subimage In layer 1
ROW_LENGTH
IMAGE_ HEIGHT
Subimage In layer 0
Height
SKIP_PIXELS
layer1
SKIP_ROWS
layer0
48
?? ??? ?? ??
  • ??? ????? ???? ??? ???? ?? ??? ??? ??? ????? ???
    ????? ??. ??? ?? ?????? ??? ??? ??? ????? ?. gt
    ?? ??(?? ??? ??? ?? ?? ??)
  • ???? ??? ? OpenGL? ????? ??? ????? ??? ??? ????
    ??? ??
  • ???? ???? ???? ?? ??? ?? ? ??? 1 1 ??? ??? 2?
    ????? ??? ? ?? ???? ??? ??? ?
  • ???? ?? ??? ?? 64x16 ???, ???? 32x8, 16x4, 8x2,
    4x1, 2x1, 1x1 ??? ?? ????? ?
  • ? ????? ???? ?? ??? ?? ??? ???? ? level, width,
    height,image ?????? ?? ?? ??? ?? glTexImage2D()?
    ?? ??

49
??9-5 ?? ??? mipmap.c
  • include ltGL/glut.hgt
  • include ltstdlib.hgt
  • GLubyte mipmapImage3232324
  • GLubyte mipmapImage1616164
  • GLubyte mipmapImage8884
  • GLubyte mipmapImage4444
  • GLubyte mipmapImage2224
  • GLubyte mipmapImage1114
  • ifdef GL_VERSION_1_1
  • static GLuint texName
  • endif

50
  • void makeImages(void)
  • int i, j
  • for (i 0 i lt 32 i)
  • for (j 0 j lt 32 j)
  • mipmapImage32ij0 255
  • mipmapImage32ij1 255
  • mipmapImage32ij2 0
  • mipmapImage32ij3 255

51
  • for (i 0 i lt 16 i)
  • for (j 0 j lt 16 j)
  • mipmapImage16ij0 255
  • mipmapImage16ij1 0
  • mipmapImage16ij2 255
  • mipmapImage16ij3 255
  • for (i 0 i lt 8 i)
  • for (j 0 j lt 8 j)
  • mipmapImage8ij0 255
  • mipmapImage8ij1 0
  • mipmapImage8ij2 0
  • mipmapImage8ij3 255

52
  • for (i 0 i lt 4 i)
  • for (j 0 j lt 4 j)
  • mipmapImage4ij0 0
  • mipmapImage4ij1 255
  • mipmapImage4ij2 0
  • mipmapImage4ij3 255
  • for (i 0 i lt 2 i)
  • for (j 0 j lt 2 j)
  • mipmapImage2ij0 0
  • mipmapImage2ij1 0
  • mipmapImage2ij2 255
  • mipmapImage2ij3 255

53
  • mipmapImage1000 255
  • mipmapImage1001 255
  • mipmapImage1002 255
  • mipmapImage1003 255
  • void init(void)
  • glEnable(GL_DEPTH_TEST)
  • glShadeModel(GL_FLAT)
  • glTranslatef(0.0, 0.0, -3.6)
  • makeImages()
  • glPixelStorei(GL_UNPACK_ALIGNMENT, 1)

54
  • ifdef GL_VERSION_1_1
  • glGenTextures(1, texName)
  • glBindTexture(GL_TEXTURE_2D, texName)
  • endif
  • 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_MIPMAP_NEAREST)
  • glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32,
    32, 0,
  • GL_RGBA, GL_UNSIGNED_BYTE,
    mipmapImage32)

55
  • 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)
  • glTexImage2D(GL_TEXTURE_2D, 3, GL_RGBA, 4, 4,
    0,
  • GL_RGBA, GL_UNSIGNED_BYTE,
    mipmapImage4)
  • glTexImage2D(GL_TEXTURE_2D, 4, GL_RGBA, 2, 2,
    0,
  • GL_RGBA, GL_UNSIGNED_BYTE,
    mipmapImage2)
  • glTexImage2D(GL_TEXTURE_2D, 5, GL_RGBA, 1, 1,
    0,
  • GL_RGBA, GL_UNSIGNED_BYTE,
    mipmapImage1)
  • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
    GL_DECAL)
  • glEnable(GL_TEXTURE_2D)

56
  • void display(void)
  • glClear(GL_COLOR_BUFFER_BIT
    GL_DEPTH_BUFFER_BIT)
  • ifdef GL_VERSION_1_1
  • glBindTexture(GL_TEXTURE_2D, texName)
  • endif
  • glBegin(GL_QUADS)
  • glTexCoord2f(0.0, 0.0) glVertex3f(-2.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 8.0) glVertex3f(-2.0, 1.0,
    0.0)
  • glTexCoord2f(8.0, 8.0) glVertex3f(2000.0,
    1.0, -6000.0)
  • glTexCoord2f(8.0, 0.0) glVertex3f(2000.0,
    -1.0, -6000.0)
  • glEnd()
  • glFlush()

57
  • void reshape(int w, int h)
  • glViewport(0, 0, (GLsizei) w, (GLsizei) h)
  • glMatrixMode(GL_PROJECTION)
  • glLoadIdentity()
  • gluPerspective(60.0, (GLfloat)w/(GLfloat)h,
    1.0, 30000.0)
  • glMatrixMode(GL_MODELVIEW)
  • glLoadIdentity()
  • void keyboard (unsigned char key, int x, int y)
  • switch (key)
  • case 27
  • exit(0)
  • break
  • default
  • break

58
  • int main(int argc, char argv)
  • glutInit(argc, argv)
  • glutInitDisplayMode (GLUT_SINGLE GLUT_RGB
    GLUT_DEPTH)
  • glutInitWindowSize (500, 500)
  • glutInitWindowPosition (50, 50)
  • glutCreateWindow (argv0)
  • init ()
  • glutDisplayFunc(display)
  • glutReshapeFunc(reshape)
  • glutKeyboardFunc(keyboard)
  • glutMainLoop()
  • return 0

59
?? ??
60
???? ?? ??
  • ?? ?? 0?? ? ?? ?? ???? ?? ????? ?????
    gluBuildD1Mipmaps(), gluBuild2DMipmaps(),
    gluBuild3DMipmaps() ??? 1 1 ???? ???? ???? ???
    ??? ??? ??
  • int gluBuild1DMipmaps(GLenum target, GLint
    internalFormat, GLint width, GLenum format,GLenum
    type, void texels)
  • int gluBuild2DMipmaps(GLenum target, GLint
    internalFormat, GLint width, GLenum height,
    GLenum format, GLenum type, void texels)
  • int gluBuild3DMipmpas(GLenum target, GLint
    internalFormat, GLint width, GLenum height,
    GLenum depth, GLenum format, GLenum type, void
    texels)
  • ??? ??? ??? ???? ?? ??? glTexImageD()? ????.
  • ?? ???? ????? ????? 0?? ???? ??? GLU ???? ??

61
??? ??? ?? ??
  • ??? ??? ??? ???? ??? ??? ?? ??? ?? ??? ??? ??? ??
  • ? log2 ?, ? ??? ??
  • ? lt 0.0
  • ???? ??? ???? ??, ???? ??
  • ? gt 0.0
  • ???? ??? ???? ??, ???? ??
  • ?? ??, ??? ???? 64x64 ????, ??? ??? 32x32????
  • ? 2.0, ? 1.0
  • ??? ???? 64x32??, ??? ??? 8x16????
  • ? 8.0, ? 3.0

62
  • OpenGL? ??? ???? ???? ??? ???? ??
  • GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_MAX_LEVEL,
    GL_TEXTURE_MIN_LOD, GL_TEXTURE_MAX_LOD
  • BASE_LEVEL
  • ???? ?? ??? ?? ??? ??
  • ???? 0
  • MAX_LEVEL
  • ??? ?? ??? ??
  • ???? 1000
  • ??? ?? BASE_LEVEL? ?? ?? ??? ??? ? ??? ?? ????
    ???? ?
  • ?? ?? ??? MAX_LEVEL ?? ??? ?? ????, ??? ???
    1??(1, 1x1, 1x1x1)? ?? ??

63
  • ??? ?? ???? ????

???? ?? ?
GL_TEXTURE_BASE_LEVEL ??? ?? ?? ???? ??? ???? ??(?? ?? ??? ?? ??) ?? ??? ?
GL_TEXTURE_MAX_LEVEL ??? ?? ?? ???? ??? ???? ??(?? ?? ??? ?? ??) ?? ??? ?
64
??? ??? ?? ??
  • MIN_LOD? MAX_LOD? ?? ??? ?(? ,??? ???? ?????? ???
    ??)? ??, ???? ??
  • BASE_LEVEL? MAX_LEVEL? ???? glTexParameter()?
    MIN_LOD? MAX_LOD? ??
  • glTexParameterf(GL_TEXTURE_2D,
    GL_TEXTURE_MIN_LOD, 2.5)
  • glTexParameterf(GL_TEXTURE_2D,
    GL_TEXTURE_MAX_LOD, 4.5)

65
???? ?? ?? ?? ??
  • ?? ??? ??? ??? ?? gluBuildDMipmaps()???? ??? ??
    ??? ?? ??? ??.
  • ?? ???? ????? ??? ??? ??? gluBuildDMipmapLevels()
    ? ??
  • int gluBuild1DMipmapLevels(GLenum target, GLint
    internalFormat, GLint width, GLenum format,
    GLenum type, GLint level,GLint base, GLint max,
    void texels)
  • int gluBuild2DMipmapLevels(GLenum target, GLint
    internalFormat, GLint width, Glint height, GLenum
    format, GLenum type, GLint level,GLint base,
    GLint max, void texels)
  • int gluBuild3DMipmapLevels(GLenum target, GLint
    internalFormat, GLint width, Glint height, GLint
    depth,GLenum format, GLenum type, GLint
    level,GLint base, GLint max, void texels)

66
? ? ?
  • ??? ?? ???? ?? ?????? ??? ????? ???? ??, ?? ???
    ?? ???? ??? ??? ????? ??
  • ??? ???? ????? ?? ??, ?????? ?? ??? ?? ??
  • glTexParameter()? ??, ?? ??? ??? ????.
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_MAG_FILTER, GL_NEAREST)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_MIN_FILTER, GL_NEAREST)

67
??? ??? ?? ??? ??
  • GL_NEAREST(????) ??? ??? ??? ??? ??? ??? ??? ???
    ?? ??
  • GL_LINEAR(???) ??? ??? ??? ??? ??? 2x2??? ??? ??
    ?? ??
  • GL_NEAREST_MIPMAP_NEAREST ??? ????? ?? ??? ????
    ??
  • GL_NEAREST_MIPMAP_LINEAR ??? ?? ??? ????? ??

???? ?
GL_TEXTURE_MAG_FLITER GL_NEAREST ?? GL_LINEAR
GL_TEXTURE_MIN_FILTER GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR
68
  • GL_LINEAR_MIPMAP_NEAREST ? ?? ? ??? ?? ??? ???
    ???? ? ? ?? ?? ????? ??
  • GL_LINEAR_MIPMAP_LINEAR ? ?? ?? ?? ??? ???? ??
    ?? ???? ????, ? ?? ?? ????? ??

69
OpenGL ???? - ???
70
??? ????
  • ??? ???? ????, ?? ??? ??? ??
  • ??? ???? ??? ???? ???? ?? ?? ??
  • ??? ???? ???? glTexImage() ?? ??
  • ??? ???? ?? ??? ???? ?? ??
  • ??? ??? ???.
  • ??? ??? ??? ??? ???? ??? ???? ??? ????? ???
  • ?? ???? ?? ??? ?? ?? ???? ??? ?? ??? ????? ???
    ???? ????? ??? ??? ???? ??
  • ??? ????? ??? ???? ???? ???? ??? ?? ??? ? ??? ??.

71
??? ????? ??
  • void glGenTextures(GLsizei n, GLuint
    textureNames)
  • texture Names ??? ?? ??? ????? n?? ???? ?? ??? ??
  • GLboolean glIsTexture(GLuint textureName)
  • ??? ??? ????? ?????? ??
  • ??? ??? ???? ?? ??? ?? ???? GL_FALSE? ??

72
??? ????? ??? ??
  • glBindTexture()? ??? ????? ??? ??
  • void glBindTexture(GLenum target, GLuint
    texture)
  • ??? 0 ? ?? ?? ?? ??? textureName? ??? ? ??? ???
    ????? ?????, ? ??? ??
  • ??? ???? ??? ????? ??? ? ? ??? ????? ???
  • 0? ?? ??? textureName? ?? ? OpenGL? ??? ???? ???
    ??, ???? ?? ??? ???? ??

73
??9-7 ??? ???? ??? texbind.c
  • include ltGL/glut.hgt
  • include ltstdlib.hgt
  • include ltstdio.hgt
  • ifdef GL_VERSION_1_1
  • define checkImageWidth 64
  • define checkImageHeight 64
  • static GLubyte checkImagecheckImageHeightcheckI
    mageWidth4
  • static GLubyte otherImagecheckImageHeightcheckI
    mageWidth4
  • static GLuint texName2

74
  • void makeCheckImages(void)
  • int i, j, c
  • for (i 0 i lt checkImageHeight i)
  • for (j 0 j lt checkImageWidth j)
  • c ((((i0x8)0)((j0x8))0))255
  • checkImageij0 (GLubyte) c
  • checkImageij1 (GLubyte) c
  • checkImageij2 (GLubyte) c
  • checkImageij3 (GLubyte) 255
  • c ((((i0x10)0)((j0x10))0))255

75
  • otherImageij0 (GLubyte) c
  • otherImageij1 (GLubyte) 0
  • otherImageij2 (GLubyte) 0
  • otherImageij3 (GLubyte) 255
  • void init(void)
  • glClearColor (0.0, 0.0, 0.0, 0.0)
  • glShadeModel(GL_FLAT)
  • glEnable(GL_DEPTH_TEST)

76
  • makeCheckImages()
  • glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
  • glGenTextures(2, texName)
  • glBindTexture(GL_TEXTURE_2D, texName0)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_WRAP_S, GL_CLAMP)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_WRAP_T, GL_CLAMP)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_MAG_FILTER,
  • GL_NEAREST)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_MIN_FILTER,
  • GL_NEAREST)
  • glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
    checkImageWidth,
  • checkImageHeight, 0, GL_RGBA,
    GL_UNSIGNED_BYTE,
  • checkImage)

77
  • glBindTexture(GL_TEXTURE_2D, texName1)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_WRAP_S, GL_CLAMP)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_WRAP_T, GL_CLAMP)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_MAG_FILTER, GL_NEAREST)
  • glTexParameteri(GL_TEXTURE_2D,
    GL_TEXTURE_MIN_FILTER, GL_NEAREST)
  • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
    GL_DECAL)
  • glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
    checkImageWidth,
  • checkImageHeight, 0, GL_RGBA,
    GL_UNSIGNED_BYTE,
  • otherImage)
  • glEnable(GL_TEXTURE_2D)

78
  • void display(void)
  • glClear(GL_COLOR_BUFFER_BIT
    GL_DEPTH_BUFFER_BIT)
  • glBindTexture(GL_TEXTURE_2D, texName0)
  • glBegin(GL_QUADS)
  • glTexCoord2f(0.0, 0.0) glVertex3f(-2.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 1.0) glVertex3f(-2.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 1.0) glVertex3f(0.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 0.0) glVertex3f(0.0, -1.0,
    0.0)
  • glEnd()

79
  • glBindTexture(GL_TEXTURE_2D, texName1)
  • glBegin(GL_QUADS)
  • glTexCoord2f(0.0, 0.0) glVertex3f(1.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 1.0) glVertex3f(1.0, 1.0,
    0.0)
  • glTexCoord2f(1.0, 1.0) glVertex3f(2.41421,
    1.0, -1.41421)
  • glTexCoord2f(1.0, 0.0) glVertex3f(2.41421,
    -1.0, -1.41421)
  • glEnd()
  • glFlush()
  • void reshape(int w, int h)
  • glViewport(0, 0, (GLsizei) w, (GLsizei) h)
  • glMatrixMode(GL_PROJECTION)

80
  • glLoadIdentity()
  • gluPerspective(60.0, (GLfloat) w/(GLfloat) h,
    1.0, 30.0)
  • glMatrixMode(GL_MODELVIEW)
  • glLoadIdentity()
  • glTranslatef(0.0, 0.0, -3.6)
  • void keyboard(unsigned char key, int x, int y)
  • switch (key)
  • case 27
  • exit(0)
  • break

81
  • int main(int argc, char argv)
  • glutInit(argc, argv)
  • glutInitDisplayMode(GLUT_SINGLE GLUT_RGB
    GLUT_DEPTH)
  • glutInitWindowSize(250, 250)
  • glutInitWindowPosition(100, 100)
  • glutCreateWindow(argv0)
  • init()
  • glutReshapeFunc(reshape)
  • glutDisplayFunc(display)
  • glutKeyboardFunc (keyboard)
  • glutMainLoop()
  • return 0

82
  • else
  • int main(int argc, char argv)
  • fprintf (stderr, "This program demonstrates a
    feature which is not in OpenGL Version 1.0.\n")
  • fprintf (stderr, "If your implementation of
    OpenGL Version 1.0 has the right extensions,\n")
  • fprintf (stderr, "you may be able to modify
    this program to make it run.\n")
  • return 0
  • endif

83
?? ??
84
  • ??? ????? ???
  • ??? ????? ??? ???? ? ? ????? ???? ??? ???? ????
    ??? ??
  • ?? ??? ???? ???? ?? ? ??? ??? ??? ??? ? ??
  • void glDeleteTexture(GLsizei n, const GLuint
    textureName)
  • textureNames ??? ???? ??? n?? ??? ????? ??

85
???? ???? ?? ??
  • ? ?? ????? ??(resident)?? ??? ?? ?? ???? ?? ???
    ??
  • GLboolean glAreTexturesResident(GLsizei n, const
    GLuint textureNames, GLboolean residences)
  • ???? ?? ??? ????? ?? ?? ? ??
  • textureNames ??? ??? ?? n? ??? ????? ?? ??? ??
  • residences? ??? ?? ??? textureNames ??? ?? ???
    ????? ??? ?? ??? ???? ??
  • glAreTexturesResident()? ??? ?? ??? ??
  • ??? ????? ??? ????, ?? ??? ?? ?? ??

86
??? ????
  • ? ?? ???? ?? ??? ? ?? ????? ???? ???? ?? ??? ??
    ????? ???? ??
  • void glPrioritizeTextures(GLsizei n, const
    GLuint, textureNames, const GLclampf
    priorities)
  • n?? textureNames?? ????, priorities ??? ????
    ????? ?? ???? ??? ????? ??
  • priorities ??? ?????? 0.0, 1.0 ??? ??? ????.
  • 0? ?? ?? ??? ???? 1? ?? ?? ??? ????.

87
??? ??
  • ???? ?? ???? ??? ??? ?????, ????? ??? ?? ??? ??
    ????? ??? ?? ?? ??
  • glTexEnv()? ??? ??? ???? 4? ? ??? ??? ??? ??
  • void glTexEnvif(GLenum target, GLenum pname,m
    TYPE param)
  • void glTexEnvifv(GLenum target, GLenum pname,m
    TYPE param)
  • ??? ???? ??? ??, target? GL_TEXTURE_ENV ??
  • pname? GL_TEXTURE_ENV_MODE, GL_TEXTURE_ENV_COLOR
    ?
  • param? ??? ????? ???? ?????? ???? ?????? ????,
    GL_DECAL, GL_REPLACE, GL_MODULATE, GL_BLEND
  • ???? ??? ???? ?? ??? ??? ???? ??? ??? ?? ???
    ?????? ??

88
  • ???? ??? ?? ?? (GL_REPLACE, GL_MODULATE)

??? ?? ?? ??? ?? ?? ??? ?? ??
GL_ALPHA C Cf A At C Cf A AfAt
GL_LUMINANCE C Lt A Af C CfLt A At
GL_ALUMINANCE_ALPHA C Lt C At C CfLt A AfAt
GL_INTENSITY C It A It C CfIt A AfIt
GL_RGB C Ct A At C CfCt A Af
GL_RGBA C Ct A Af C CfCt A AfAt
89
  • ???? ??? ??? ?? (GL_DECAL, GL_BLEND)

??? ?? ?? ??? ?? ?? ??? ??? ??
GL_ALPHA ???? ?? C Ct A AfAt
GL_LUMINANCE ???? ?? CCf(1-Lt)CcLt A At
GL_LUMINANCE_ALPHA ???? ?? CCf(1-Lt)CcLt A AtAt
GL_INTENSITY ???? ?? CCf(1-Lt)CcLt AAf(1-Lt)AcLt
GL_RGB C Ct A Af CCf(1-Lt)CcLt A Af
GL_RGBA CCf(1At)CtAt A At CCf(1-Lt)CcLt A AfAt
90
  • ??? ?? ??(GL_DECAL)? ????(GL_REPLACE)? ???? RGB?
    RGBA ?? ????? ????, ???? ???? ????? ??? ??
  • ??? ?(GL_MODULATE) ?????? ??? ???? ????? ????.
  • ?? ??? GL_LUMINANCE, GL_LUMINANCE_ALPHA,
    GL_INTENSITY? ? ???? ?? ??? ????.
  • GL_RGB? GL_RGBA ?? ???? ??? ???? ?? ??? ???? ????
    ?? ????.
  • ??? ???? ??? ??? ??? ??? ?? ???? ??? ?? ??? ??

91
??? ??? ??
  • ??? ? ??? ?? ? ??? ??? ?? ???? ??? ??? ??? ???? ?
  • ?? ?? ????? ??? ??? ??? ???? ???? ??? ??
  • ??? ??? ??? ?? ??? ??? ? ??? ????? ??
  • void glTexCoord1234sifd(TYPE coords)
  • void glTexCoord1234vsifd(TYPE coords)
  • ??? ??(s, t, r, q)? ??
  • ?????? ( x, y, z, w)? ???? ?? ??? ??

92
???? ??? ???
  • 0, 1 ?? ??? ??? ??? ??? ? ??, ??? ? ??? ?????
    ???? ? ? ??.
  • ?? ???? ??? ??? ??? ?? ?
  • 1.0?? ??? 1.0?? ??
  • 0.0?? ???? 0.0?? ??
  • ???? ?? ???? ?????, ??? ???? ??? ?????
  • ?? ??? ??? ?? ? ? ??? ??? ?????? ?? ??? ??

93
  • ?? ???? ??? ???? GL_LINEAR? ????? ??? ??? ?? ??
    ??? 2 2??? ??? ??? ??
  • ???? ??? ??? ??? ??, ???? ??? ??? ??? ?? ???
  • ???? GL_REPEAT ??? ?? ???
  • ???? GL_CLAMP ????? ??? ??? ??? 2x2 ??? ???
  • ???? GL_CLAMP_TO_EDGE ???? ?? ???.
  • void glTexParameterif(GLenum target, GLenum
    pname, TYPE param)
  • void glTexParameterifv(GLenum target, GLenum
    pname, TYPE param)
  • ???? ?????? ?????, ??? ????? ???? ??? ???? ???
    ??? ??

94
?? 9-1??
  • glBegin(GL_QUADS)
  • glTexCoord2f(0.0, 0.0) glVertex3f(-2.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 3.0) glVertex3f(-2.0, 1.0,
    0.0)
  • glTexCoord2f(3.0, 3.0) glVertex3f(0.0, 1.0,
    0.0)
  • glTexCoord2f(3.0, 0.0) glVertex3f(0.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 0.0) glVertex3f(1.0, -1.0,
    0.0)
  • glTexCoord2f(0.0, 3.0) glVertex3f(1.0, 1.0,
    0.0)
  • glTexCoord2f(3.0, 3.0) glVertex3f(2.41421,
    1.0, -1.41421)
  • glTexCoord2f(3.0, 0.0) glVertex3f(2.41421,
    -1.0, -1.41421)
  • glEnd()

95
  • GL_REPEAT ??? ??
  • glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
    GL_REPEAT)
  • glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
    GL_REPEAT)

96
  • GL_CLAMP ??? ??
  • glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
    GL_CLAMP)
  • glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
    GL_CLAMP)

97
  • glTexParameter() ???? ?

???? ???
GL_TEXTURE_WRAP_S GL_CLAMP, GL_CLAMP_TO_EDGE, GL_REPEAT
GL_TEXTURE_WRAP_T GL_CLAMP, GL_CLAMP_TO_EDGE, GL_REPEAT
GL_TEXTURE_WRAP_R GL_CLAMP, GL_CLAMP_TO_EDGE, GL_REPEAT
GL_TEXTURE_MAG_FILTER GL_CLAMP, GL_LINEAR
GL_TEXTURE_MIN_FILTER GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GLLINEAR_MIPMAP_NEAREST, GL_LINER_MIPMAP_LINEAR
98
???? ???
GL_TEXTURE_BORDER_COLOR 0.0, 1.0 ??? ?? 4?? ??
GL_TEXTURE_PRIORITY 0.0, 1.0?? ??? ??? ????
GL_TEXTURE_MIN_LOD ????? ?? ??? ??
GL_TEXTURE_MAX_LOD ????? ?? ??? ??
GL_TEXTURE_BASE_LEVEL ?? ???? ?? ??? ??
GL_TEXTURE_MAX_LEVEL ?? ???? ?? ??? ??
99
??? ?? ???? ????
  • ??? ??? ????, ??? ??? ??? ???? ???? ??? ??? ????
    ?? ??? ??? ?? ??
  • glTextureCoord() ??? OpenGL? ???? ??? ??? ?????
    ??.
  • void glTexGenifd(GLenum coord, GLenum pname,
    TYPE param)
  • void glTexGenidfv(GLenum coord, GLenum pname,
    TYPE param)
  • ? ?? ???? coord? ??? ??? ?????? ???? ?? GL_S,
    GL_T, GL_R, GL_Q ??
  • pname? GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE,
    GL_EYE_PLANE
  • param? GL_OBJECT_LINEAR, GL_EYE_LINEAR,
    GL_SPHERE_LINEAR

100
  • ??? ???
  • GL_TEXTURE_GEN_MODE? GL_OBJECT_LINEAR? ????? ?
  • ?? ??? ??(x0, y0, z0, w0)??? ?? ??
  • ??? ?? p1x0 p2y0 p3z0 p4w0
  • p14? GL_OBJECT_PLANE ?? ?? pname ??? ??
    glTextGenv()? param ??? ??
  • p14? ??? ??? ? ? ??? ??? ?? ??? ??? ??
  • ?? ??, p2p3p40??, p11?? ? ??? ??? x0 ?? ???
    ??? ????.
  • ??? ??? ? ???? ????, ?? ???? ????, ??? ? ?? ?? ??
    ?? 0??.

101
  • static Glfloat xequalzero 1.0, 0.0, 0.0,
    0.0
  • x0 ??? ??
  • glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, xequalzero)
  • ????? ?? ???? ?? ??? ??.
  • Static GLFloat slanted 1.0, 1.0, 1.0, 0.0
  • ?? ???? xyz0 ??? ??, ????? ???.
  • GL_OBJECT_LINEAR ??
  • ??? ????? ??? ??? ????.
  • ???? ??? ??? ?? ?? ???? ??? ???? ???.

102
  • GL_EYE_LINEAR ??
  • ???? ?? ?? ???? ???? ???
  • ???? ?? ??? ??? ??(p1, p2, p3, p4)? ??? ??? ????
    ???.
  • (p1, p2, p3, p4) (p1, p2, p3, p4) M-1
  • (xe, ye, ze, we) ??? ????
  • (p1, p2, p3, p4)? pname? GL_EYE_PLANE ?? ????? ?
    glTexGen()? param ??? ???
  • ??? ?? p1 xe p2 ye p3 ze p4 we

103
??9-8 ?? ??? ?? ?? texgen.c
  • include ltGL/glut.hgt
  • include ltstdlib.hgt
  • include ltstdio.hgt
  • define stripeImageWidth 32
  • GLubyte stripeImage4stripeImageWidth
  • ifdef GL_VERSION_1_1
  • static GLuint texName
  • endif

104
  • void makeStripeImage(void)
  • int j
  • for (j 0 j lt stripeImageWidth j)
  • stripeImage4j (GLubyte) ((jlt4) ? 255
    0)
  • stripeImage4j1 (GLubyte) ((jgt4) ? 255
    0)
  • stripeImage4j2 (GLubyte) 0
  • stripeImage4j3 (GLubyte) 255
  • static GLfloat xequalzero 1.0, 0.0, 0.0,
    0.0
  • static GLfloat slanted 1.0, 1.0, 1.0, 0.0
  • static GLfloat currentCoeff

105
  • static GLenum currentPlane
  • static GLint currentGenMode
  • void init(void)
  • glClearColor (0.0, 0.0, 0.0, 0.0)
  • glEnable(GL_DEPTH_TEST)
  • glShadeModel(GL_SMOOTH)
  • makeStripeImage()
  • glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
  • ifdef GL_VERSION_1_1
  • glGenTextures(1, texName)
  • glBindTexture(GL_TEXTURE_1D, texName)

106
  • endif
  • glTexParameteri(GL_TEXTURE_1D,
    GL_TEXTURE_WRAP_S, GL_REPEAT)
  • glTexParameteri(GL_TEXTURE_1D,
    GL_TEXTURE_MAG_FILTER, GL_LINEAR)
  • glTexParameteri(GL_TEXTURE_1D,
    GL_TEXTURE_MIN_FILTER, GL_LINEAR)
  • ifdef GL_VERSION_1_1
  • glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA,
    stripeImageWidth, 0,
  • GL_RGBA, GL_UNSIGNED_BYTE,
    stripeImage)
  • else
  • glTexImage1D(GL_TEXTURE_1D, 0, 4,
    stripeImageWidth, 0,
  • GL_RGBA, GL_UNSIGNED_BYTE,
    stripeImage)
  • endif

107
  • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
    GL_MODULATE)
  • currentCoeff xequalzero
  • currentGenMode GL_OBJECT_LINEAR
  • currentPlane GL_OBJECT_PLANE
  • glTexGeni(GL_S, GL_TEXTURE_GEN_MODE,
    currentGenMode)
  • glTexGenfv(GL_S, currentPlane, currentCoeff)
  • glEnable(GL_TEXTURE_GEN_S)
  • glEnable(GL_TEXTURE_1D)
  • glEnable(GL_CULL_FACE)
  • glEnable(GL_LIGHTING)
  • glEnable(GL_LIGHT0)
  • glEnable(GL_AUTO_NORMAL)

108
  • glEnable(GL_NORMALIZE)
  • glFrontFace(GL_CW)
  • glCullFace(GL_BACK)
  • glMaterialf (GL_FRONT, GL_SHININESS, 64.0)
  • void display(void)
  • glClear(GL_COLOR_BUFFER_BIT
    GL_DEPTH_BUFFER_BIT)
  • glPushMatrix ()
  • glRotatef(45.0, 0.0, 0.0, 1.0)

109
  • ifdef GL_VERSION_1_1
  • glBindTexture(GL_TEXTURE_1D, texName)
  • endif
  • glutSolidTeapot(2.0)
  • glPopMatrix ()
  • glFlush()
  • void reshape(int w, int h)
  • glViewport(0, 0, (GLsizei) w, (GLsizei) h)
  • glMatrixMode(GL_PROJECTION)
  • glLoadIdentity()

110
  • if (w lt h)
  • glOrtho (-3.5, 3.5, -3.5(GLfloat)h/(GLfloat
    )w,
  • 3.5(GLfloat)h/(GLfloat)w, -3.5,
    3.5)
  • else
  • glOrtho (-3.5(GLfloat)w/(GLfloat)h,
  • 3.5(GLfloat)w/(GLfloat)h, -3.5,
    3.5, -3.5, 3.5)
  • glMatrixMode(GL_MODELVIEW)
  • glLoadIdentity()

111
  • void keyboard (unsigned char key, int x, int y)
  • switch (key)
  • case 'e'
  • case 'E'
  • currentGenMode GL_EYE_LINEAR
  • currentPlane GL_EYE_PLANE
  • glTexGeni(GL_S, GL_TEXTURE_GEN_MODE,
    currentGenMode)
  • glTexGenfv(GL_S, currentPlane,
    currentCoeff)
  • glutPostRedisplay()
  • break

112
  • case 'o'
  • case 'O'
  • currentGenMode GL_OBJECT_LINEAR
  • currentPlane GL_OBJECT_PLANE
  • glTexGeni(GL_S, GL_TEXTURE_GEN_MODE,
    currentGenMode)
  • glTexGenfv(GL_S, currentPlane,
    currentCoeff)
  • glutPostRedisplay()
  • break
  • case 's'
  • case 'S'
  • currentCoeff slanted
  • glTexGenfv(GL_S, currentPlane,
    currentCoeff)
  • glutPostRedisplay()
  • break

113
  • case 'x'
  • case 'X'
  • currentCoeff xequalzero
  • glTexGenfv(GL_S, currentPlane,
    currentCoeff)
  • glutPostRedisplay()
  • break
  • case 27
  • exit(0)
  • break
  • default
  • break

114
  • int main(int argc, char argv)
  • glutInit(argc, argv)
  • glutInitDisplayMode (GLUT_SINGLE GLUT_RGB
    GLUT_DEPTH)
  • glutInitWindowSize(256, 256)
  • glutInitWindowPosition(100, 100)
  • glutCreateWindow (argv0)
  • init ()
  • glutDisplayFunc(display)
  • glutReshapeFunc(reshape)
  • glutKeyboardFunc(keyboard)
  • glutMainLoop()
  • return 0

115
????
116
?? ?? ? ??
  • ????? ??
  • ????? ???? ???? ??? ???? ??? ??? ??? ??? ?? ????
    ???? ???? ?? ?
  • ????? ??? ?? ?????? ???? ??? ??? ??? ??? ????
    ???? ???
  • ???? ????? ??? ??? ? ????? ?? ?? ??
  • ???? ??? ??? ?? ??? ?? ???? ? ??? ?? ???, ???? ??
    ????, ???? ?? ??? ??? ???? ?? ?? ??? ??? ??, ???
    ????? ??.
  • 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)

117
??? ?? ?? ? ??
  • ???? ?? ??? ????? ?? ??? ????, ??? ??? ??? ???
    ??? ???? ?? 44??? ???
  • ???? ?? ??? ??? ??, ????? ???? ??? ??? ??? ?????
  • ???? ??? ??????, ? ???? ????, ????, ?????? ? ??
    ??? ???? ?
  • ??? ??? ??? ??? ????, ??? ? ??? ??? ??? ???.
  • glPushMatrix(), glPopMatrix(), glMultMatrix(),
    glRotate() ?? ?? ?? ?? ?? ??? ??? ??? ???? ??.
  • ??? ??? ??? ???? ???? ?? ??? GL_TEXTURE ? ??
  • glMatrixMode(GL_TEXTURE)
  • ?

118
?????? ? ??
  • ?????? ??? ??? ???? ??? ???? ??
  • OpenGL 1.2??? ? ??? ????? ??? ?? ???? ???? ?? ??
  • ?? ????? ? ?? ??? ??? ??? ??
  • ??? ??? ??? ?? ??? ??? ??? ??? ??? ???? ??? ??,
    ?? ??? ???? ??
  • ??????? ??? ??, ??, ??, ??? ??? ?? ?? ??

119
  • ?? ????? ??
  • 1) ????? ??? ?????? ??
  • 2) ??? ???? ??? ?? ??? ???, ??, ??, ?? ?? ??? ???
    ???? ???? ??? ??
  • 3) ??? ??? ? ??? ??? ?? ?? ?? ? ??? ??? ??? ????
    GLMULTITEXCOORDARB()? ????

120
??? ??? ??
  • ??????? ??? ???? ??? ?????? ??? ?? ?? ?? ??? ???
    ???.
  • ??? ??
  • ?? ???? ??? ???? ??? ???? ??
  • ??? ?? ??? ???? ???? ??? ??
  • ??? ???
  • ??? ??
  • ?? ??
  • ??? ?? ??
  • ?? ??? ?? ??
  • ?? ?? ??(??? ?)

121
  • void glActiveTextureARB(GLenum texUnit)
  • ???? ??? ?? ???? ??? ??? ??
  • ?? ???? ??? ????? ????? ???? ???? ??? ??? ????
    ??? ? ??.

122
?? ??? ??? ??
  • ????????, ??? ??? ??? ??? ?? ??? ??? ?? ???? ??
  • ??? ??? ??? ??? ??? ??? ??? ? ??
  • void glMultiTexCoord1234sifdARB(GLenum
    texUnit, TYPE coords)
  • void glMultiTexCoord1234sifdvARB(GLenum
    texUnit, TYPE coords)
  • ??? ??? texUnit?? ???? ?? coords? ??? ?? ?? (s,
    t, r, q)? ??
  • texUnit ? ??? ??? glActiveTextureARB() ? ??? ??
    ??.

123
??? ?? ??? ?? ??
  • glMultiTexCooredARB()?? ?? 2 ?? ??? ?? ??? ??
    ??? ????? ?? ??? ?? ?? ???.
  • ?????? ???, ?? ??? ?? ??? ?????
  • glActiveTextureARB()? ??? ??? ??? ??? ?? ??? ??
    ?? ??? ??? ???? ??
  • glTexGen(..)
  • glEnable(GL_TEXTURE_GEN_..)
  • glDisable(GL_TEXTURE_GEN_..)

124
  • ?????? ???? ?? ??? ??? ??? ?????
  • glClientActiveTextureARB()? glTexCoordPointer()?
    ?? ??? ??? ?? ??? ????? ??
  • void glClientActiveTextureARB(GLenum texUnit)
  • ?? ??? ??? ??? ?? ?? ??? ???? ??? ??? ??? ??
  • texUnit? glActiveTextureARB()?? ??? ?? ?? ?? ???
    GL_TEXTUREi_ARB ??? ???? ??
Write a Comment
User Comments (0)
About PowerShow.com