2010-01-19 9 views
1

스프라이트를 사다리꼴로 변환하려고 할 때, 내 이미지가 세부 사항을 잃어 버릴 것이라는 것을 알고 있지만 실제로 보간을 신경 쓰지 않습니다. 내가 정말하고 싶은 것은이 같은 사다리꼴로 내 직사각형 스프라이트를 변환입니다 :스프라이트를 사다리꼴로 왜곡하는 방법?


/ \ 
/  \ 
/__________\ 

사람이 CGAffineTransforms 또는적인 Cocos2D로 이런 짓을 했나요? 누군가 올바른 방향으로 나를 가리켜 주실 수 있습니까?. 고맙습니다.

-Oscar

답변

2

제안하시는 변형은 affine이 아닙니다. Affine transformations은 실행 취소 가능해야합니다. 그래서 그들은 일반적으로 할 수 있습니다

  • 규모
  • 회전
  • 전단 (수 있도록 한쪽으로 기울어, 사각형 같은 -> 평행 사변형)

번역하지만 그들은 "압박"할 수 없습니다. 사다리꼴의 왼쪽과 오른쪽이 확장되면 특정 지점에서 교차합니다. 더 이상 평행하지 않습니다. 따라서 변환을 "실행 취소"할 수는 없습니다. 변환 할 항목이 있으면 변환 할 위치를 결정할 수 없기 때문입니다. 즉, 변환이 병렬 처리를 유지하지 않으면 공간을 좁히고 실행 취소 할 수 없으며 아핀이 아닙니다.

Core Animation의 변형에 대해서는 잘 모릅니다. 따라서 mathy stuff를 사용하면 대안을 찾을 수 있기를 바랍니다.

그러나 나는 당신의 OpenGL에서 그것을 할 수있는 방법을 알고,하지만 당신이 응용 프로그램을 그리는 방법에 시작해야하는 것 :

  1. 난 당신이 정확하게 원하는 결과를 구상하고있어 경우, 직사각형을 3D로 만들려하고, 아핀 변환을 사용하여 조금 멀리 회전하고, (아핀이 아닌) 투영 변환을 사용하여 사각형 이미지를 2D 이미지로 전개하십시오.

  2. 3D 효과를 찾고 싶지 않지만 모서리를 꼬집고 싶다면 GL_RECT을 사다리꼴 점으로 지정하고 스프라이트를 텍스처로 매핑 할 수 있습니다.

가장 쉬운 것은, 사진 편집기에서 이미지를 미리 짜 투명성과 .PNG로 저장하고, 그 이미지와 사각형을 그릴 수 있습니다.

+0

안녕하세요. 귀하의 의견에 진심으로 감사드립니다. 두 가지 옵션 모두 훌륭하지만, Sprite가 처음에는 일반적인 직사각형 모양이되고, 사다리꼴로 동적으로 변환되기를 바랍니다. 이것이 가능한지 나는 모른다. –

+0

내가 설명한 OpenGL 메서드를 사용하여 가능합니다. 나는 그것을 사진 편집기에 저장하는 것에 관한 것이 표에 없다고 생각한다. –

+0

완벽한, 고마워. –

1

CATransform3D를 UIView의 레이어에 적용해야합니다. 올바른 것을 찾으려면 AGGeometryKit을 사용하는 것이 더 쉽습니다.

#import <AGGeometryKit/AGGeometryKit.h> 

UIView *view = ...; // create a view 

view.layer.anchorPoint = CGPointZero; 
AGKQuad quad = view.layer.quadrilateral; 
quad.tl.x += 20; // shift top left x-value with 20 pixels 
quad.tr.x -= 20; // shift top right x-value with 20 pixels 
view.layer.quadrilateral = quad; // the quad is converted to CATransform3D and applied 
관련 문제