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

screenshot1.PNG

º£²ó¤Î¥×¥í¥°¥é¥à°ì¼°¤Ï¤³¤Á¤é
¡¦fileOpenGLES2Initialize.zip

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

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

źÉÕ¥Õ¥¡¥¤¥ë: fileframework.png 408·ï [¾ÜºÙ] filescreenshot1.PNG 425·ï [¾ÜºÙ] fileOpenGLES2Initialize.zip 341·ï [¾ÜºÙ]

¥È¥Ã¥×   ÊÔ½¸ Åà·ë º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS
Last-modified: 2014-02-23 (Æü) 23:33:45