2009-11-13 6 views
0

아이폰에서 이미지 스트레치 효과를 만들려고합니다. 버텍스 배열을 만들고 배경 이미지의 임의 반경 내에서 각 인덱스의 텍스처 데이터를 이동합니다. 그런 다음 디스플레이에 다음 호출을 :OpenGL을 사용하면 어떻게 배경 이미지와 더 작은 왜곡 된 텍스처를 결합합니까?

int n = gridSize_.x * gridSize_.y; 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glTexCoordPointer(2, GL_FLOAT, 0, texCoordinates); 
glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices); 

//if(num_myindices > 0) 
// glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT, myindices); 
glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 

내 문제는 32 × 32 또는 64 × 64와 같은 상대적으로 작은 격자 크기와 모양이 매우 고르지 늘어 영역의 가장자리입니다. 더 크면 더 부드럽지만 훨씬 느려집니다.

그래서 배경 이미지의 복사본을 추가하고 영향을받은 인덱스에만 정점 배열을 제한했습니다. 나는 더 작은 격자 크기를 사용하지만 더 작은 영역을 위해.

//glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices); 
if(num_myindices > 0) 
glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT,myindices); 

영향을받는 영역이 표시되지만 배경 이미지가 깜박 내 뻗어 영역은 검은 색 배경에 떠 사라지게 : 이제 위의 그림 코드는 것 같습니다. 분명히 내 배경이 먼저 렌더링 된 다음 위의 코드가 내 버텍스 배열의 데이터를 덮어 쓰고 렌더링합니다.

이미지의 그림을 효율적으로 결합하는 방법에 대한 조언이있는 사람이 있습니까?

배경에 대한 두 번째 간단한 버텍스 배열을 만들고 my if 문 바로 앞에있는 glDrawArray를 호출하여 모든 드로잉이 단일 메서드에서 수행되도록 할 계획입니다. 이게 올바른 방향일까요? 더 좋은 방법이 있습니까? 모든 이미지 데이터를 어떻게 하나의 간단한 정점 배열에 결합해야합니까?

+0

일부 스크린 샷을 추가 할 수 있습니까? 나는 다음과 같은 문제를 겪고있다. – prideout

+0

그걸 설정해야합니다 ... – walt

답변

0

한 세트의 프리미티브에 배경을 그립니다.

카메라에 더 가까운 두 번째 프리미티브 집합 ("직각 투영법"을 사용하는 경우 한 차원의 값을 변경하는 경우)에 "강화"를 그립니다.

배경 플래시가 사라지고 사라지는 이유를 말할 수 없습니다. 여러 가지 이유가있을 수 있습니다. OpenGL 상태를 올바르게 삭제하는 것을 잊었거나 깊이 충돌이 있거나 다른 많은 버그가 있습니다.

그러나 서로 다른 "평면"에있는 서로 다른 형상 세트에서 이미지를 겹쳐서 드로잉하는 경우 원하는 효과를 얻으실 수 있습니다.

관련 문제