º£²ó¤ÏiPhone¤Ç¤ÎOpenGLES2¤Î½é´ü²½¤ò¤·¤Þ¤¹¡£


&ref(screenshot1.PNG);

º£²ó¤Î¥×¥í¥°¥é¥à°ì¼°¤Ï¤³¤Á¤é
¡¦&ref(OpenGLES2Initialize.zip);

OpenGLES¤ò»È¤¦¤¿¤á¤Ë¤Ï
°Ê²¼¤Îframework¤¬É¬ÍפǤ¹¤Î¤Ç¥×¥í¥¸¥§¥¯¥È¤ËÄɲä·¤Þ¤¹¡£
¡¦OpenGLES.framework
¡¦QuartzCore.framework

&ref(framework.png);

¶ñÂÎŪ¤Ê½é´ü²½½èÍý¤Ï
OpenGLView.m¤Ë¼ÂÁõ¤·¤Æ¤¢¤ê¤Þ¤¹
¤Û¤Ü·è¤Þ¤ê¤­¤Ã¤¿¼ê½ç¤Ë¤Ê¤ë¤È»×¤¤¤Þ¤¹¤Î¤Ç¼¡²ó°Ê¹ß¤â»È¤¤²ó¤·¤Ç¤¹
°Ê²¼¤Îή¤ì¤È¤Ê¤ê¤Þ¤¹¡£
¡¦­¡CAEAGLLayer¥¯¥é¥¹¤ò¥ì¥¤¥ä¡¼¤ËÀßÄê
¡¦­¢ÉÁ²è¥ì¥¤¥ä¡¼¤òȾƩÌÀ²½
¡¦­£OpenGL¥³¥ó¥Æ¥­¥¹¥È¤ÎºîÀ®
¡¦­¤¥«¥é¡¼¥Ð¥Ã¥Õ¥¡¤ÎºîÀ®
¡¦­¥Z¥Ð¥Ã¥Õ¥¡¤ÎºîÀ®
¡¦­¦¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤ÎºîÀ®
¡¦­§Äê´üŪ¤Ë¥ì¥ó¥À¥ê¥ó¥°½èÍý¤ò¸Æ¤Ó½Ð¤·
´ðËÜŪ¤Ë­§¤ÇOpenGLView¥¯¥é¥¹¤Îrender¥á¥½¥Ã¥É¤òÄê´üŪ¤Ë¸Æ¤Ó½Ð¤·¤Æ¤¤¤ë¤Î¤Ç
¼¡²ó°Ê¹ß¤ÏOpenGLView¥¯¥é¥¹¤ò·Ñ¾µ¤·¡¢
render¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤ÆÉÁ²è½èÍýÉôʬ¤òÊѹ¹¤·¤Þ¤¹¡£


 // ­¡CAEAGLLayer¥¯¥é¥¹¤ò¥ì¥¤¥ä¡¼¤ËÀßÄê¡ÊOpenGL¥³¥ó¥Æ¥ó¥Ä¤òÉÁ²è¤¹¤ë¤¿¤á¤ÎÉÁ²è¥Ç¥£¥¹¥×¥ì¥¤¤È¤·¤Æ¤ÎÀßÄê¡Ë
 + (Class)layerClass {
     return [CAEAGLLayer class];
 }
 // ­¢ÉÁ²è¥ì¥¤¥ä¡¼¤òȾƩÌÀ²½¡Ê¥Ñ¥Õ¥¡¡¼¥Þ¥ó¥¹¤ÏȾƩÌÀ²½¤·¤¿¤Û¤¦¤¬¤è¤¤¡Ë
 - (void)setupLayer {
     _eaglLayer = (CAEAGLLayer*) self.layer;
     _eaglLayer.opaque = YES;
 }
 // ­£OpenGL¥³¥ó¥Æ¥­¥¹¥È¤ÎºîÀ®
 // ¥³¥ó¥Æ¥­¥¹¥È¤ÏÉÁ²è¤ËɬÍפʾðÊó¤òÁ´¤Æ´ÉÍý¤·¤Æ¤¤¤ë
 - (void)setupContext {   
     EAGLRenderingAPI api = kEAGLRenderingAPIOpenGLES2;
     _context = [[EAGLContext alloc] initWithAPI:api];
     if (!_context) {
         NSLog(@"Failed to initialize OpenGLES 2.0 context");
         exit(1);
     }
     
     if (![EAGLContext setCurrentContext:_context]) {
         NSLog(@"Failed to set current OpenGL context");
         exit(1);
     }
 }
 // ­¤¥«¥é¡¼¥Ð¥Ã¥Õ¥¡¤ÎºîÀ®
 - (void)setupRenderBuffer {
    // ¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤ÎÀ¸À®
    glGenRenderbuffers(1, &_colorRenderBuffer);
    // ¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤È¤·¤Æ¥Ð¥¤¥ó¥É
    glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);
    // ÉÁ²è¥ì¥¤¥ä¡¼¤Ë¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤Î¥á¥â¥ê³ÎÊÝ
    [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];    
 } 
 // ­¥Z¥Ð¥Ã¥Õ¥¡¤ÎºîÀ®
 - (void)setupDepthBuffer {
    // ¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤ÎÀ¸À®
    glGenRenderbuffers(1, &_depthRenderBuffer);
    // ¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤È¤·¤Æ¥Ð¥¤¥ó¥É
    glBindRenderbuffer(GL_RENDERBUFFER, _depthRenderBuffer);
    // ¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤ËZ¥Ð¥Ã¥Õ¥¡ÄɲÃ
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, self.frame.size.width, self.frame.size.height);
 }
 // ­¦¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤ÎºîÀ®
 - (void)setupFrameBuffer {
    GLuint framebuffer;
    // ¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤ÎºîÀ®
    glGenFramebuffers(1, &framebuffer);
    // ¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤È¤·¤Æ¥Ð¥¤¥ó¥É
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
    // ¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤Ë¿§Â°À­¤Î¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤ò´ØÏ¢¤Å¤±
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _colorRenderBuffer);
    // ¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤Ë¿¼ÅÙ°À­¤Î¥ì¥ó¥À¡¼¥Ð¥Ã¥Õ¥¡¤ò´ØÏ¢¤Å¤±
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depthRenderBuffer);
 }
 
 // ÉÁ²è½èÍý
 - (void)render:(CADisplayLink*)displayLink {
       
    // ¥¹¥¯¥ê¡¼¥ó¤Î¥¯¥ê¥¢
    glClearColor(0, 0, 0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    // Z¥Æ¥¹¥ÈÍ­¸ú
    glEnable(GL_DEPTH_TEST);
    
    // ¥«¥ê¥ó¥°Í­¸ú
    glEnable(GL_CULL_FACE);
    //glDisable(GL_CULL_FACE);
    glFrontFace(GL_CW);
    //glFrontFace(GL_CCW);
    
    // ¥À¥Ö¥ë¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°
    [_context presentRenderbuffer:GL_RENDERBUFFER];
 }
 
 // ­§Äê´üŪ¤ËÉÁ²è½èÍý¤ò¸Æ¤Ó½Ð¤·
 // render¥á¥½¥Ã¥É¤òÄê´üŪ¤Ë¸Æ¤Ó½Ð¤¹
 // ¤³¤Î¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Ærender¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ë
 - (void)setupDisplayLink {
    CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];
    [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];    
 }


¼¡¡§iPhone3D¹ÖºÂ2²ó


|¤Ë¤ã¤ó¤Ñ¤¹¡¼|0|
|Á¡°ÝÁÓ¼º¡ª|0|
|²æ¤é¤¬¥º¥ô¥£¥º¥À¡¼¤Î¸÷¤ò¡¢¤¢¤Þ¤Í¤¯À¤³¦¤Ë|0|


¥È¥Ã¥×   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS