2009-05-21 4 views
2

GLPaint의 예를 들었습니다 ... "PaintingView"에 배경을 넣으려고합니다. 따라서 배경을 그릴 수 있고 마지막으로 이미지를 파일로 저장할 수 있습니다 ..... 저는 길을 잃었습니다.iPhone : 64x64보다 큰 텍스처?

나는 PNG (512 × 512)을로드하고 프로그램의 맨 처음에 "그것으로 페인트"에 노력하지만, 대신 512 × 512의 64 × 64로 그린 것입니다 ...로드하기 전에

나는 노력 해요 그리기보기의 하위보기로 ...하지만 glReadPixels가 예상대로 작동하지 않습니다 (하위보기가 아닌 PaintingView 만 고려). 또한 PaintingView에는 initWithImage와 같은 메서드가 없습니다 ... 이미지 (및 수정 사항)에서 glReadPixels 작업이 필요하지만 실제로로드 할 때 질감이 64x64 크기 인 이유를 알 수 없습니다 ..

답변

0

먼저, glReadPixels()은 현재 OpenGL 컨텍스트와 연결된 프레임 버퍼를보아야합니다. 그러면 왜 픽셀을 얻지 못하는지 알 수 있습니다.

둘째, 특정 픽셀 크기에서 렌더링되는 텍스처가 무엇을 의미합니까? 텍스처가 쿼드로 렌더링 된 다음 해당 쿼드의 크기가 코드 단위로 제어되어야한다고 가정합니다.

또한 텍스처로드가 OpenGL error을 생성하지 않는지 확인하십시오. 텍스처 크기에 대한 iPhone의 제한 사항이 무엇인지 잘 모르겠습니다. 512x512가 범위를 벗어났습니다. 물론 glGetIntegerv()을 호출하고 GL_MAX_TEXTURE_SIZE 상수를 사용하여 직접 조사 할 수 있습니다.

2

GLPaint 예제 프로젝트는 브러시를 움직일 때 GL_POINT_SPRITE를 사용하여 브러쉬 텍스처의 복사본을 그립니다. iPhone에서는 glPointSize가 64x64 픽셀로 제한됩니다. 이것은 하드웨어 제한 사항이며 시뮬레이터에서는 더 크게 만들 수 있다고 생각합니다.

배경 이미지를 그릴 때 GL_POINT_SPRITE 메서드를 사용하는 것처럼 들리지만, 실제로 원하는 것은 아닙니다. 대신 화면을 채우는 평평하고 질감이있는 상자를 그려보십시오.

는 여기에 2D 상자 정점과 texcoords을 설정 OpenGL을 코드의 비트의 다음을 그립니다

const GLfloat verticies[] = { 
     0.0f, 0.0f, 
     1.0f, 0.0f, 
     0.0f, 1.0f, 
     1.0f, 1.0f, 
    }; 

    const GLfloat texcoords[] = { 
     0, 0, 
     1, 0, 
     0, 1, 
     1, 1, 
    }; 

    glVertexPointer(2, GL_FLOAT, 0, verticies); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glTexCoordPointer(2, GL_FLOAT, 0, texcoords); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnable(GL_TEXTURE_2D); 

    glBindTexture(GL_TEXTURE_2D, texture); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

희망하는 데 도움이! 카메라 투영법 설정 방법에 따라 정점을 다르게 지정해야합니다. 내 경우, 아래 코드를 사용하여 GL_MODELVIEW를 설정합니다. GLPaint 예제가 어떻게 작동하는지 잘 모르겠습니다.

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glOrtho(0, 1.0, 0, 1.0, -1, 1); 
관련 문제