2013-03-13 2 views
7

this link의 코드를 사용하여 사람의 얼굴 텍스처를 매핑했습니다. 이 코드는 GLKIT을 사용하여 이미지를 렌더링합니다. 코드는 시뮬레이터에서 정상적으로 작동하지만 장치에서 작동하면 동일한 코드가 작동하지 않습니다. 아래는 장치에서 작동하고 내 ipad에서는 작동하지 않는 이미지의 스크린 샷입니다.GLKit의 텍스처 매핑이 장치에서만 작동하지 않습니다

Output in Device

:

Output in simulator

장치에서 동일한 코드는 다음과 같은 출력을 제공합니다 : 시뮬레이터의

- (void)loadTexture:(UIImage *)textureImage 
{ 
    glGenTextures(1, &_texture); 
    glBindTexture(GL_TEXTURE_2D, _texture); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

    CGImageRef cgImage = textureImage.CGImage; 
    float imageWidth = CGImageGetWidth(cgImage); 
    float imageHeight = CGImageGetHeight(cgImage); 
    CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(cgImage)); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageWidth, imageHeight, 0, GL_RGBA, 
    GL_UNSIGNED_BYTE, CFDataGetBytePtr(data)); 
} 

이미지 :

코드 나는 텍스처를로드하는 데 사용 거기 뭐 있니 나는 실종 됐어?

+0

어떤 사람이 내 질문에 대답시겠습니까! – 2vision2

+1

검사 : http://stackoverflow.com/a/7952288/2128327를 –

답변

2

나는 마침내 함몰 및 GLKTextureLoader로 전환 아담 언급, 그것은 꽤 튼튼한입니다 여기

당신을 위해 작동 할 수 있습니다 구현의 :..

- (void)loadTexture:(NSString *)fileName 
{ 
    NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithBool:YES], 
          GLKTextureLoaderOriginBottomLeft, 
          nil]; 

    NSError* error; 
    NSString* path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; 
    GLKTextureInfo* texture = [GLKTextureLoader textureWithContentsOfFile:path options:options error:&error]; 
    if(texture == nil) 
    { 
     NSLog(@"Error loading file: %@", [error localizedDescription]); 
    } 

    glBindTexture(GL_TEXTURE_2D, texture.name); 
} 

나는 그것을 변경할 수 있습니다 곧 GitHub의에 mtl2opengl 프로젝트 ...

+0

답장을 보내 주셔서 감사합니다. Ricardo. 곧. 고마워. – 2vision2

3
  1. 로드하는 데 Apple의 내장형 한 줄 방법을 사용하십시오 .- 깨진 구현을 작성하지 마십시오!

    https://developer.apple.com/library/mac/#documentation/GLkit/Reference/GLKTextureLoader_ClassRef/Reference/Reference.html#//apple_ref/occ/clm/GLKTextureLoader/textureWithContentsOfFile:options:error

    :


  1. 또는 당신이 직접 수행해야하는 경우, 두 개의 의심스러운 부분이 있습니다

    2.1. 이 줄을 제거하십시오 :

    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    2.2. 이 행은 범위를 벗어난 숫자를 사용합니다. 이는 큰 것이 아닙니다.

    glGenTextures (1, & _texture);

    NSData* imageData = ... // fill this yourself 
    CGSize* imageSize = ... // fill this yourself 
    
    GLuint integerForOpenGLToFill; 
    glGenTextures(1, &integerForOpenGLToFill); 
    
    glBindTexture(GL_TEXTURE_2D, integerForOpenGLToFill); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    
    unsigned char* pixelData = (unsigned char*) malloc([imageData length] * sizeof(unsigned char)); 
    [imageData getBytes:pixelData]; 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageSize.width, imageSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelData); 
    
    :
    1. 어떤 이유로 당신이 애플의 코드를 (당신이 메모리 이미지에서 원시 데이터를로드 할 예) 사용할 수없는 경우

    , 여기에 작업 코드를 복사/붙여 넣기입니다
+0

당신이 당신의 수정 @ 아담에 대해 확실 내가 쓴 원래 텍스처로드 코드 다른 응용 프로그램에서 귀하의 제안으로 대체했지만 그 결과는 더욱 심각합니다. OpenGL 전문가가 아니기 때문에 구현이 여전히 잘못되었을 수 있지만이 코드는 작동하지 않습니다. 그래도 범위를 벗어난 번호로 전화를 걸면 좋습니다. –

+0

두 가지 방법 (다른 응용 프로그램, iPhone Simulator w/retina display)을 사용하여 내 결과를 [screenshot] (http://i.imgur.com/pSVWEGr.png)합니다. –

+0

@RicardoRendonCepeda 어느 비트가 좋습니까? 내 기본 제안은 작동하기 때문에 Apple의 코드를 사용하는 것입니다. 항상! – Adam

2

스크린 샷 살펴보기 ... 문제가 iPhone에서 iPad로 가고있는 것이 아닌지 궁금합니다.

즉 망막에서 비 망막까지?

이미지 로딩처럼 보입니다 은 망막 눈금을 무시하고 일 수 있으므로 텍스처 맵이 iPad에서 "2 배 너무 큽니다".

Apple의 방법 (다른 답변)을 사용하면 자동으로 문제를 해결해야하지만 그렇지 않은 경우 : 현재 크기 ([email protected])와 하프 크기 (포토샵/preview.app/등) ("이미지라는 이름으로 크기를 조정하십시오.PNG ")는

+0

답장을 보내 주셔서 감사합니다. 문제는 시뮬레이터와 장치 사이에 있습니다. 나는 그것이 작동하고 장치에서 나던 : ( – 2vision2

+0

) RETINA 시뮬레이터 대 NON RETINA 시뮬레이터를 사용하면 어떻게됩니까? (하드웨어 메뉴를 사용하여 전환하십시오) – Adam

관련 문제