2013-01-06 6 views
1

필자는 직교 투영을 위해 정사각형을 사용했습니다. 이제는 아주 기본적인 단순한 등각 투영 방식으로 그것을 투사하고 싶습니다. (나는 이것이 예쁘지 않을 수도 있음을 알고 있지만, 이것을 알아 내고 싶다)SFML 아이소 메트릭 타일 생성

내 사각형을 감안할 때 45도 회전시킨다. 이제 올바르게 이해한다면, 나는 2로 나눈 높이를 나눠야합니다. 이것은 SFML에서는 저에게 불가능했습니다. 스케일 함수가 있지만, y 축 방향으로 0.5 배로 스케일링하면, 내 큐브가 다이아몬드 모양 대신에 늘어납니다. 그것은 SFML이 자신의 상대 축 (예전에 회전 된)에 따라 스프라이트를 변형하는 것처럼 보입니다.

스프라이트의 높이에 액세스 할 수 없기 때문에 이것이 가능한지 궁금합니다.

SFML에서 사각형 스프라이트를 다이아몬드 모양으로 변환 할 수 있습니까?

답변

5

sf :: RenderTexture 사용은 옵션입니다 (other answer 참조). 또 다른 옵션은 sf::View을 사용하는 것입니다. 뷰의 높이를 두 배로하고 좌표를 조정하십시오.

+0

감사합니다. 이것은 매력처럼 작동합니다! – KWyckmans

1

지금하고있는 것처럼 스프라이트를 회전 시키십시오. sf::RenderTexture으로 렌더링하십시오. 멤버 함수 getTexture을 사용하여 새로운 스프라이트를 만들거나 오래된 스프라이트를 재사용하십시오. y 축을 따라 스프라이트의 크기를 조절합니다. 렌더링 윈도우에 그립니다.

RenderTexture을 올바른 크기로 설정하고 원래 스프라이트를 올바른 위치에 그려 넣으려면 일부 수학이 필요할 수도 있습니다.

original_sprite.setRotation(45); 
sf::RenderTexture rt; 
rt.create(FigureOutWidth(),FigureOutHeight()); 
original_sprite.setPosition(MoreMathHere()); 
rt.draw(original_sprite); 
sf::Sprite new_sprite(rt.getTexture()); 
new_sprite.setScale(1.0,0.5); 

아무 말도하지 않고 모든 프레임이 아니라 초기화에서 한 번 수행해야합니다.

+0

또 다른 가능성은 그리기 전에 'sf :: View' 크기를 변경하는 것입니다 (높이를 두 배로하여 스프라이트의 위치를 ​​적절히 조정하십시오). –

+0

@AndreiTita : 안녕하세요. 그게 효과적이고 훨씬 더 간단합니다. 네가 할 수 있다는 것을 나는 몰랐다. 왜 대답하지 않았 니? –

관련 문제