ÄãºÃ£¬»¶Ó­À´µ½¾­¹ÜÖ®¼Ò [µÇ¼] [×¢²á]

ÉèΪÊ×Ò³ | ¾­¹ÜÖ®¼ÒÊ×Ò³ | Êղر¾Õ¾

»ùÓÚAndroidƽ̨µÄÎÆÀíÓ³Éä·ÖÎöÓëʵÏÖ _ÍøÂ繤³Ì±ÏÒµÂÛÎÄ

·¢²¼Ê±¼ä£º2014-10-25 À´Ô´£ºÈË´ó¾­¼ÃÂÛ̳
ÕªÒª£ºÔÚ¼ÆËã»úͼÐÎѧÖУ¬ÎÆÀíÓ³Éä¾ÍÊÇʹÓÃͼÏñ¡¢º¯Êý»òÕßÆäËûÊý¾ÝÔ´À´¸Ä±äÎïÌå±íÃæÍâ¹Û¡£ÎÆÀíÓ³Éä¼¼ÊõÊǽü¼¸ÄêÀ´·¢Õ¹×î¿ìµÄ¼¼ÊõÖ®Ò»£¬¹ã·ºÓ¦ÓÃÓÚÈýάÕæʵ¸ÐͼÐεÄÉú³ÉÓëÏÔʾÖС£ÔËÓÃÎÆÀíÓ³Éä¿ÉÒÔ·½±ãµØÖÆ×÷Õæʵ¸ÐͼÐζø²»±Ø»¨¸ü¶àµÄʱ¼äÈ¥¿¼ÂÇÎïÌåµÄ±íÃæϸ½Ú¡£±¾ÎÄÔÚAndroidƽ̨ÖУ¬Í¨¹ý¶ÔÎÆÀíÓ³ÉäÔ­ÀíµÄ·ÖÎö£¬ÀûÓÃOpengl ESͼÐοâʵÏÖÁËÎÆÀíÓ³ÉäЧ¹û¡£ ¹Ø¼ü´Ê£ºÎÆÀíÓ³Éä;Opengl ES;Android ÒýÑÔ ÎÆÀíÓ³ÉäµÄ±¾ÖÊÊǶÔÈýάÎïÌå½øÐжþά²ÎÊý»¯£¬¼´ÏÈÇóµÃÈýάÎïÌå±í¶øÉÏÈÎÒ»µãµÄ¶þά(u£¬v)²ÎÊýÖµ£¬½ø¶øµÃµ½¸ÃµãµÄÎÆÀíÖµ£¬×îÖÕÉú³ÉÈýάͼÐαí¶øÉϵÄÎÆÀíͼ°¸¡£Ôڹ⻬Çú¶øÉÏÌí¼ÓÎÆÀíͼ°¸µÄºËÐÄÎÊÌâÊÇÓ³É䣬Òò´ËÎÆÀíÎÊÌâ¿ÉÒÔ¼ò»¯Îª´ÓÒ»¸ö×ø±êϵµ½ÁíÒ»¸ö×ø±êϵµÄ±ä»»¡£×ܵÄÀ´Ëµ£¬ÎÆÀíÓ³Éä¼¼ÊõÊÇÒ»ÖÖʹ½¨Á¢µÄ3DÄ£Ð͸ü½Ó½üÏÖʵÎïÌåµÄ¼¼Êõ¡£ 1¡¢ÎÆÀíÓ³Éä»ù±¾Ô­Àí ÎÆÀíÉú³É¹ý³ÌʵÖÊÉÏÊǽ«Ëù¶¨ÒåµÄÎÆÀíÓ³ÉäΪ·´Ó³Ä³ÖÖÈýά¾°Îï±íÃæµÄÊôÐÔ(Óë¹âÕÕÃ÷Ä£Ðͼ°±íÃ漸ºÎÓйصĸ÷ÖÖ²ÎÊý£¬Èç±íÃæ·¨Ïò¡¢Âþ/¾µÃæ·´ÉäÂʵÈ)£¬²¢²ÎÓëºóÐøµÄ¹âÕÕÃ÷¼ÆËã¡£ ¶þάÎÆÀíÓ³Éä¾ÍÊÇ´Ó¶þάÎÆÀíƽÃæµ½ÈýάÎïÌå±íÃæµÄÓ³Éä¡£Ò»°ã¶þάÎÆÀíƽÃæÊÇÓз¶Î§ÏÞÖƵÄ, ÔÚÕâ¸öƽÃæÇøÓòÄÚ£¬Ã¿µã¶¼¿ÉÓÃÊýѧº¯Êý±í´ï£¬´Ó¶ø¿ÉÒÔÀëÉ¢µÄ·ÖÀë³öÿµãµÄ»Ò¶ÈÖµºÍÑÕÉ«Öµ£¬Õâ¸öƽÃæÇøÓò³ÆΪÎÆÀí¿Õ¼ä£¬ Ò»°ã½«ÎÆÀí¿Õ¼äµÄƽÃæÇøÓò¶¨ÒåÔÚ[0,1]*[0,1]¡£ÎÆÀíÓ³ÉäÊÇÈ·¶¨ÎïÌå±íÃæÒ»µãPÔÚÎÆÀí¿Õ¼äÖеĶÔÓ¦µã(u,v)£¬´Ó¶øÎÆÀí¿Õ¼äÖеĵã(u,v)´¦µÄÎÆÀíÖµ¾ÍÊÇÎïÌå±íÃæµãPµÄÎÆÀíÊôÐÔ¡£½¨Á¢ÎÆÀí¿Õ¼äÓë¾°Îï¿Õ¼ä¼°¾°Îï¿Õ¼äÓëÆÁÄ»¿Õ¼äÖ®¼äµÄÓ³Éä¹Øϵ£º ͼ1 ÎÆÀíÓ³Éä ¾°Îï±íÃæµÄÎÆÀíÊôÐÔÖ÷ÒªÓÐÒÔϼ¸ÖÖ£º ±íÃæÑÕÉ«£¬¼´±íÃæµÄÂþ·´ÉäÂÊ;¾µÃæ·´Éä·ÖÁ¿£¬¼´±íÃæµÄ¾µÃæ·´ÉäÂÊ;͸Ã÷¶È;±íÃæ·¨Ïò£¬¼´ÄÓ¶¯±íÃæ·¨ÏòÀ´²úÉú±íÃæµÄ°¼Í¹ÎÆÀí;»·¾³µÄÂþ·´ÉäºÍ¾µÃæ·´ÉäЧ¹û;¹âÔ´Ç¿¶ÈºÍÉ«²Ê·Ö²¼¡£ ¸ù¾ÝÎÆÀí¶¨ÒåÓòµÄ²»Í¬£¬¿É·ÖΪ¶øΪ¶þάºÍÈýάÎÆÀí£¬ÓÉÓÚ±¾ÎÄÊÇ»ùÓÚAndroidƽ̨µÄ£¬¿¼Âǵ½Ð§ÂʺÍ×ÊÔ´ÎÊÌ⣬Ö÷Òª¸ø³öÁ˶þάÎÆÀíµÄÄ£ÐÍ£¬¶ÔÈýάÎÆÀíÓ³Éä¼¼Êõ¾Í²»ÔÙÌÖÂÛÁË¡£ 2¡¢ÎÆÀíÓ³ÉäµÄʵÏÖ ±¾½Ú½«Í¨¹ýÔÚÒ»¸öÁ¢·½Ìå¸÷¸öÃæÌùÉÏͼƬÀ´½éÉÜAndroidƽ̨Ï»ùÓÚOpenGL ESµÄÎÆÀíÓ³ÉäÓйصÄÄÚÈÝ£º¶¨ÒåÎÆÀí¡¢¿ØÖÆÂ˲¨¡¢ËµÃ÷Ó³É䷽ʽ¡¢»æÖƳ¡¾°£¬¸ø³ö¶¥µãµÄÎÆÀí×ø±êºÍ¼¸ºÎ×ø±ê¡£ Ê×ÏÈ£¬ÎÒÃÇͨ¹ýAndroidƽ̨µÄOpenGL ES¿âÀ´´´½¨Ò»¸öÎÆÀí£¬²¢Ê¹ÓÃͼƬÀ´Éú³ÉÒ»¸öÎÆÀí£¬¹ý³ÌÈçÏ£º IntBuffer intBuffer = IntBuffer.allocate(1);//´´½¨ÎÆÀí gl.glGenTextures(1, intBuffer);//ÉèÖÃҪʹÓõÄÎÆÀí gl.glBindTexture(GL10.GL_TEXTURE_2D, texture); º¯ÊýglGenTextures(int n, intBuffer textures)ÓÃÓÚ֪ͨOpenGLÎÒÃÇÏëÉú³ÉÒ»¸öÎÆÀíµÄÃû×Ö¡£º¯ÊýglBindTexture(int target, int texture)·½·¨ÓÃÓÚ֪ͨOpenGL½«ÎÆÀíÃû×Ötexture°ó¶¨µ½ÎÆÀíÄ¿±êÉÏ¡£ ÔÚAndroidÖÐÎÒÃÇʹÓÃGLUtilsÖеÄÒ»¸ö¾²Ì¬·½·¨texImage2D(int target, int level, Bitmap bitmap, int border)À´Éú³ÉÒ»¸öÎÆÀí¡£¹ý³ÌÈçÏ£º //Éú³ÉÎÆÀí GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.mBitmap, 0) ͨ¹ýÒÔÉϹý³Ì£¬ÎÒÃDZã³É¹¦µØ´´½¨ÁËÒ»¸öÎÆÀí¡£ ΪÁËÄÜÓиüºÃµÄЧ¹û£¬ÎÒÃÇ»¹ÐèÒªÉèÖÃÔÚOpenGLÏÖʵͼÏñʱ£¬Ëü·Å´óµÃ±ÈԭʼÎÆÀí´ó(GL_TEXTURE_MAG_FILTER)»òËõСµÃ±ÈԭʼÎÆÀíС(GL_TEXTURE_MIN_FILTER)ʱOpenGLËù²ÉÓõÄÂ˲¨·½Ê½¡£ÒÔϹý³ÌÊÇÎÒÃÇÉèÖõÄÏßÐÔÂ˲¨£º//ÉèÖÃÏßÐÔÂ˲¨ Gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); ÔÚandroidÖпÉÒÔʹÓÃglBindTexture(int target, int texture)·½·¨À´°ó¶¨ÎÆÀí¡£ÒÔϹý³Ì°ó¶¨ÁËÉÏÃæ´´½¨µÄÎÆÀí£ºGl.glBindTexture(GL10.GL_TEXTURE_COORD_ARRAY);//°ó¶¨ÎÆÀí ÎÆÀíÐèҪʹÓÃglEnableClientState()·½·¨À´¿ªÆôÎÆÀí£ºGl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); ÓëÖ®¶ÔÓ¦µÄ£¬¹Ø±ÕÎÆÀí¹ý³ÌÈçÏ£º Gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); ΪÁ˽«ÎÆÀíÕýÈ·µÄÓ³Éäµ½ËıßÐÎÉÏ£¬±ØÐ뽫ÎÆÀíµÄÓÒÉϽÇÓ³Éäµ½ËıßÐεÄÓÒÉϽǣ¬ÎÆÀíµÄ×óÉϽÇÓ³Éäµ½ËıßÐεÄ×óÉϽǣ¬ÎÆÀíµÄÓÒϽǺÍ×óϽÇÒàÊÇÈç´Ë¡£ÒòΪ£¬Èç¹ûÓ³Éä´íÎóµÄ»°£¬Í¼ÏñÏÔʾʱ¿ÉÄÜÉÏϵߵ¹£¬²àÏòÒ»±ß»òÕßʲô¶¼Ã»ÓС£ÏÂÃæÊÇÎÒÃǶÔÁ¢·½ÌåµÄÿһ¸öÃæËùÉèÖõÄÎÆÀíÓ³ÉäÊý¾Ý£º IntBuffer texCoords = IntBuffer.wrap(new int[] { One,0.,0,0,0,one,one,one, 0,0,0,one,one,one,one,0, One,one,one,0,0,0,0,one 0,one,one,one,one,0,0,0, 0,0,0,one,one,one,one,0, One,0,0,0,0,one,one,one }); ÉèÖúÃÕâЩӳÉäÊý¾ÝÖ®ºó£¬¿ÉÒÔͨ¹ýglTexCoordPointer½«ÎÆÀí°ó¶¨µ½Òª»æÖƵÄÎïÌåÉÏ¡£¹ý³ÌÈçÏ£º Gl.glTextCoordPointer(2, GL10.GL_FIXED, 0, texCoords); ×îºó£¬½«Æä»æÖƵ½ÆÁÄ»Éϼ´¿É¡£Ð§¹ûͼ2ÈçͼËùʾ£º ͼ2 ÎÆÀíÓ³ÉäЧ¹û 3¡¢½áÊøÓï ±¾ÎÄͨ¹ý¶ÔÎÆÀíÓ³ÉäµÄ»ù±¾Ô­Àí½øÐÐÁË·ÖÎö£¬²¢ÔÚAndroidƽ̨ÖÐÀûÓÃOpengl ESͼÐοâ¶ÔÎÆÀíÓ³Éä¼¼Êõ½øÐÐÁËʵÏÖ¡£ ÓÉÓÚ±¾ÎÄÀûÓõÄÊÇAndroidÓ¦Óòã·â×°ºóµÄOpengl ESͼÐο⣬ÔÚЧÂÊÉÏÇ·¼Ñ£¬ÒÔºóµÄÖ÷Òª¹¤×÷ÊÇͨ¹ýAndroid NDK¶ÔOpengl ES½øÐÐÔ­Éú̬¿ª·¢£¬½ø¶øÌá¸ßʵÏÖЧÂÊ¡£ ²Î¿¼ÎÄÏ× [1]ÀîÔöÖÒ.ÎÆÀíÓ³Éä¼¼ÊõµÄÑо¿[D].ÖйúÓÅÐã˶ʿѧλÂÛÎÄÈ«ÎÄÊý¾Ý¿â,2005. [2](ÃÀ)Shane Co.comnder.AndroidÒƶ¯Ó¦Óÿª·¢´ÓÈëÃŵ½¾«Í¨[M].±±¾©£ºÈËÃñÓʵç³ö°æÉç,2010. [3]Ñî·áÊ¢.AndroidÓ¦Óÿª·¢½ÒÃØ[M].±±¾©:»úе¹¤Òµ³ö°æÉç,2010.
¾­¹ÜÖ®¼Ò¡°Ñ§µÀ»á¡±Ð¡³ÌÐò
  • ɨÂë¼ÓÈë¡°¿¼ÑÐѧϰ±Ê¼ÇȺ¡±
ÍƼöÔĶÁ
¾­¼ÃѧÏà¹ØÎÄÕÂ
±êÇ©ÔÆ
¾­¹ÜÖ®¼Ò¾«²ÊÎÄÕÂÍƼö