¿¬½ÀÀå(´Ù¹ö¸®°í °©´Ï´Ù...)-³²±æ ±ÛÀÌ ÀÖÀ¸¸é ¹Î°¡ÃÌ¿¡ ³²°ÜÁֽðí, ȸ¿ø °¡ÀÔÀ» ¹ÞÁö ¾Ê½À´Ï´Ù. |
---|
2004/04/09 (18:47) from 203.247.201.190' of 203.247.201.190' | Article Number : 993 |
_Àü | Access : 4978 , Lines : 113 |
[³ëƼ]OpenGL-20030828 °í±ÞÅؽºÃÄ ±â¹ý |
---|
20030828 °í±ÞÅؽºÃÄ ±â¹ý 0828-1.´ÙÁß ÅؽºÃÄ -.OpenGLÀÇ È®ÀåÀ» »ç¿ë -.glext.h¸¦ include ½ÃÄÑ¾ß È®Àå±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. -.NV_/ EXT_ 0.ÇöÀç OpneGL ±¸ÇöÀÌ ´ÙÁß ÅؽºÃĸµ È®ÀåÀ» Áö¿øÇÏ´Â Á¡°Ë (char *)glSetString(GL_EXTENSION); -.»ç¿ë °¡´ÉÇÑ ÅؽºÃÄ ´ÜÀ§ÀÇ ÃÖ´ë °¹¼ö glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits); 0.È®Àå ÇÔ¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ´Â ±× È®Àå ÇÔ¼ö¿¡ ´ëÇÑ ÁÖ¼Ò¸¦ ¾ò¾î¾ß ÇÑ´Ù. [¼±¾ð] PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL; PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL; PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB = NULL; int maxTextureUnits = 0; // glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits); ; maxTextureUnitsÀÇ °ªÀÌ 1À̶ó¸é OpenGLÀÌ ´ÙÁß ÅؽºÃĸµÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress("glMultiTexCoord2fARB"); ; ´ÙÁß ÅؽºÃĸµÀ» À§ÇÑ ÅؽºÃÄ ÁÂÇ¥µéÀ» ÁöÁ¤ glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB"); ; ÇöÀç ÅؽºÃÄ ´ÜÀ§¸¦ ¼³Á¤ glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) wglGetProcAddress("glClientActiveTextureARB"); ; Æ÷ÀÎÅÍ ¹è¿ ¸í·ÉµéÀ» À§ÇÑ ÇöÁ¦ ÅؽºÃÄ ´ÜÀ§¸¦ ¼³Á¤ [ÃʱâÈ] -1.µÎ Å×½ºÃÄ °´Ã¼µéÀ» ´ÙÁß ÅؽºÃĸµÀ» ÇÒ ¶§, µÎ °³ÀÇ ÅؽºÃÄ ´ÜÀ§µé·Î ¸¸µç´Ù. glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Mult1->texID); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glActiveTextureARB(GL_TEXTURE1_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Mult2->texID); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); -2.°¢°¢ÀÇ ¸ÊÀÇ uv¿¡ ´ëÇؼ Àû¿ëÇÒ È®´ë, Ãà¼Ò ¹æ¹ý ¼³Á¤ glBindTexture(GL_TEXTURE_2D, Mult1->texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, Mult1->width, Mult1->height, GL_RGB, GL_UNSIGNED_BYTE, Mult1->data); glBindTexture(GL_TEXTURE_2D, Mult2->texID); ... -3.µ¥ÀÌŸ ¸Þ·Î¸®¸¦ ÇØÁ¦; OpenGLÀº µ¥ÀÌŸ ID¸¦ »ý¼ºÇÑ ÈÄ data¿¡ Á¢±Ù ¿¹) free(Mult1->data); [·»´õ¸µ] ; ¸ÖƼÀ̹ǷΠº¹¼öÀÇ uvÁÂÇ¥ ¼³Á¤ glBegin(GL_QUADS); // ¿À¸¥Âʸé glColor4f( 0.0f, 1.0f, 0.0f, 1.0f); glNormal3f( 1.0f, 0.0f, 0.0f ); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 1.0f); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 2.0f, 2.0f); glVertex3f( 1.0f, 1.0f, 1.0f ); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 0.0f); ... 0828-2.ȯ°æ¸ÊÇÎ ; ÁÖº¯ ȯ°æ Àüü¸¦ ¿ÏÀüÇÏ°Ô ¹Ý»çÇÏ´Â °´Ã¼¸¦ ·»´õ¸µÇÏ´Â ±â¹ý ¿¹) ȯ°æ ¸ÅÇο¡¼ ÅؽºÃÄ ÁÂÇ¥µéÀ» ÀÚµ¿À¸·Î »ý¼ºÇÏ°Ô ÇÏ´Â ¿¹ glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); 0828-3.Á¶¸í¸ÊÇÎ 0828-4.´ÙÁßÆнº-´ÙÁßÅؽºÃĸµ 0828-5.µð½ºÇ÷¹ÀÌ ¸®½ºÆ® ; ÀÚÁÖ ¾²ÀÌ´Â ÀÏ·ÃÀÇ ¸í·ÉµéÀ» ¹Ì¸® ÄÄÆÄÀÏÇØ µÒÀ¸·Î½á ¼º´ÉÀ» Çâ»ó glCallList(); ·Î È£ÃâÇϱâ Àü¿¡ ¹Ì¸® ÇѹøÀº ½ÇÇà ÇؾßÇÑ´Ù.(ÃʱâÈ ºÎºÐ¿¡¼ ½Ç½Ã) -.¸ñ·Ï »ý¼º GLuint glGenLists(GLsizei Num); ¸¸µé°íÀÚ ÇÏ´Â µð½ºÇ÷¹ÀÌ ¸ñ·Ï°¹¼ö #-> void glNewList(GLuint listName, GLenum mode); ¸ðµç OpenGL ¸í·É¾î #<- void glEndlist(); -.¸ñ·Ï ½ÇÇà ; ¸ñ·Ï ¾È¿¡ ´ã±ä ¸í·ÉµéÀÌ ¼ø¼´ë·Î ½ÇÇà void glCallList(GLint listName); 0828-6.Á¤Á¡¹è¿ [¼±¾ð] GLfloat vertices[] = { -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vertices); [·»´õ¸µ] -1.¹è¿ ¼Ò¿ä¿¡¼ Á÷Á¢ Àбâ glBegin(GL_QUADS); glArrayElement(0); ÇöÀç È°¼ºÈµÈ ¸ðµç ¹è¿ÀÇ 0¹ø° Á¤Á¡¿¡ ´ëÇÑ µ¥ÀÌÅ͸¦ ¾ò´Â´Ù. glArrayElement(1); glArrayElement(2); glArrayElement(3); glEnd(); -2.À妽º¸¦ ÀÌ¿ë GLubyte frontIndex[] = {0,1,2,3}; glDrawElements(GL_QUADS, 4, GL_UNSIGNED_BYTE, frontIndex); -3.À妽º¸¦ ÀÌ¿ëÇÑ ¿¬¼ÓµÈ ¿ø¼Òµé¿¡ ´ëÇÑ Á¢±Ù void glDrawArray(GLenum, GLint first, CLsizei count); first¹ø° ¿ø¼ÒºÎÅÍ first+count-1¹øÂÅ ¿ø¼ÒµéÀ» »ç¿ëÇÏ¿© ±âÇÏ ÇÁ¸®¹ÌÅ͵éÀ» ±¸¼ºÇÑ´Ù. |