2010-07-19 10 views
6

2D 점프 & 실행 엔진을 작성하여 320x224 (320x240) 이미지가 생성되었습니다. 구식의 학교를 "pixely"로 유지하려면 사용자의 해상도에 따라 결과 이미지를 2, 3 또는 4로 확대하고 싶습니다.화면상의 픽셀 크기를 조정하는 방법은 무엇입니까?

각 스프라이트는 크기를 조정하지 않고 결과 이미지를 크기 조정하고 싶습니다! 사전 :

+0

문제는 무엇인가? 이미지를 상향 조정하는 방법은 무엇입니까? 또는 "pixelate"효과를 구현하는 방법은 무엇입니까? – Gobra

답변

1

에서

덕분에 난 당신이 "에 ... 이미지 결과"무슨 뜻인지 정확히 모르겠지만 당신이 당신의 끝을 의미하는 경우 결과가 다음 화면에 그를 그릴 수 있습니다 질감입니다 눈금을 설정하십시오 :

spriteBatch.Draw(texture, position, source, color, rotation, origin, scale, effects, depth); 

원하는 숫자 (2, 3 또는 4)로 바꾸십시오. 나는 비슷한 것을하지만 스프라이트 당 스케일과 결과 이미지가 아닙니다. 무슨 뜻인지 알고 싶으면 도와 드리겠습니다.

XNA의 기본값은 크기 조정 된 이미지의 앤티 앨리어스입니다. 당신은 픽셀 화 선함을 유지하려면 몇 가지 추가 매개 변수를 즉시 분류 모드에서 무승부 설정해야합니다 :

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None); 
GraphicsDevice.SamplerStates[0].MagFilter = TextureFilter.Point; 
GraphicsDevice.SamplerStates[0].MinFilter = TextureFilter.Point; 
GraphicsDevice.SamplerStates[0].MipFilter = TextureFilter.Point; 

그것은 포인트 또는 없음 TextureFilter 중 하나입니다. 나는 일하고있어 머리 꼭대기를 기억하려고 노력하고있다. 오늘은 나중에 한 가지 방법으로 확인해 보겠습니다.

+0

문서에 따르면 'TextureFilter.None'은 MipFilter를 사용하지 않도록 설정 한 것입니다 (MagFilter 만 사용). 이 효과에 대해서는'MipFilter = TextureFilter.None'을 설정하고 나머지는'Point'로 남겨두기를 원할 것입니다. –

+0

방금 ​​찾은 지점이고 원하는 지점입니다. – Bob

4

Bob's answer은 필터링 모드를 TextureFilter.Point으로 변경하여 멋지게 꾸몄습니다.

sb.Begin(/* first three parameters */, Matrix.CreateScale(4f)); 

줄 것이다 :

그러나 아마도 너무처럼 SpriteBatch.Begin에 매트릭스를 통과하기 위해 각 스프라이트를 (당신은 또한 각 스프라이트의 위치를 ​​확장해야 할 것 같은) 스케일링보다 더 좋은 방법은

모든 그리기 호출을 수정할 필요없이 원하는 크기 조정을 수행 할 수 있습니다.

그러나 게임에서 부동 소수점 오프셋을 사용하면 두 가지 방법을 사용하여 크기를 조정 한 후에 픽셀 경계에 정렬되지 않은 결과가 발생할 수 있습니다.

두 가지 해결책이 있습니다.

public static Vector2 Floor(Vector2 v) 
{ 
    return new Vector2((float)Math.Floor(v.X), (float)Math.Floor(v.Y)); 
} 

그리고 그 기능을 통해 사용자가 스프라이트를 그릴 때마다 위치를 통과 : 첫 번째는이 같은 기능을하는 것입니다. 스프라이트가 회전이나 오프셋을 사용하는 경우에는 작동하지 않을 수도 있습니다. 다시 한 번 모든 드로 콜을 수정할 것입니다.

"올바른"방법은 전체 장면을 포인트 방식으로 스케일 업하려는 경우 렌더링 대상에 원래 크기로 장면을 그립니다. 그리고 렌더 타겟을 화면에 그려서 확대합니다 (TextureFilter.Point).

보고 싶은 기능은 GraphicsDevice.SetRenderTarget입니다. This MSDN article은 읽을 가치가 있습니다. XNA 4.0을 사용 중이거나 이동 중이면 this might be worth reading.

이 간단한 XNA 샘플을 찾을 수 없었지만 Bloom Postprocess 샘플은 렌더 타겟을 사용하여 흐림 셰이더를 적용합니다. 단순히 셰이더를 완전히 무시하고 스케일 업을 수행 할 수 있습니다.

3

픽셀 효과를 사용할 수 있습니다. RenderTarget2D에 그린 다음 픽셀 쉐이더를 사용하여 결과를 화면에 그립니다. 거기 당신은 픽셀 쉐이더를 시도하자 Shazzam 쉐이더 편집기라는 도구입니다 그것은 픽셀 레이션이하는 일이 포함 http://shazzam-tool.com/

이 당신이 원하는 것을하지 않을 수 있습니다,하지만 그것은 고해상도 모드를 허용과 좋은 수 ... 상관없이 사용 어떤 해상도 같은 효과가없는 Before

After

관련 문제