2010-08-19 9 views
1

내 XNA 게임에서 1920x1080 해상도로 전체 프로그램을 디자인 한 다음 실행 시스템 (XBox 또는 PC)에 맞게 배율 및 레터 박스 크기를 조정합니다.XNA 윈도우 스케일링 성능

이것은 한 가지 해결책에 대해서만 걱정할 수있는 훌륭한 해결책이었습니다.

그러나 게임이 점점 복잡해지면서 앞으로 이것이 나에게 물러 설 것인지 궁금합니다.

스케일 인자가있는 SpriteBatch.Begin()을 한 번만 실행하고 모든 그리기를 끝내고 End()를 호출하면 모든 작업을 수행 할 때마다 모든 작업을 수행해야하므로이 작업에 어떤 악영향을 미치게 될 것입니다. 공연? 나는 X 박스가 네이티브로 720p로 설정되었을 때 이미 XNA 게임을 위해이 작업을 수행하고 있음을 안다. (실제로 XBox에서 실행될 때, 적절한 스케일링 요소를 얻는다.) .... 너무 나쁘다고 상상할 수 없다. 심지어 PC 용.

답변

3

xbox는 비디오 출력의 특수 스케일러로 스케일을 조정합니다. 앱 성능에 전혀 영향을 미치지 않습니다.

SpriteBatch에 전달하는 축척 계수는 스프라이트의 꼭지점을 변환하기 만합니다. 저울을 통과하지 않아도 1의 계수로 끝나기 때문에 거기에 여분의 하중이 없습니다.

다른 화면 크기에서는 채우기 속도가 다름 (픽셀이 더 많거나 적음) 및 텍스처 조회가 달라져서 약간의 차이가 나타납니다.

그냥 1028x720 백 버퍼를 사용하는 것이 가장 안전합니다. xbox는 한 줄의 코드 나 퍼프 (perf) 문제 없이도 하드웨어를 해상도 나 비율로 확장 할 수 있습니다. 그것은 편지함을 적절하게 할 것이고 하드웨어 스케일러는 아주 좋은 품질입니다. 1080p 지원은 유일한 단점이라고 주장 할 수는 없습니다.

는 하드웨어 스케일러을 480i 해당를 축소 할 수없고 (누군가가 통지하는 경우 잘은해야한다)

Windows에서 쉬운 일이 아마 그리는 방법입니다 피어 리뷰에 실패 할 당신의 백 버퍼 노트로 1020x1080을 선택한 경우 모든 것을 RenderTarget에 전달한 다음, 한 번에 전체 헛소리를 끝까지 확장합니다. 이를 수행하는 데 필요한 몇 줄의 코드에 대해서는 SpaceWar 스타터 키트를 참조하십시오. (#if! XBOX 내부의 모든 것 때문에 360에서 작업하는 것을 낭비하지 않아도됩니다.)

+1

Xbox 1280x720의 백 버퍼를 명확히하기 위해 스프라이트가 1080에 그려진 것만으로 Begin() 호출에서 크기 조정 요소를 제공합니다. 그래서, 그래픽이 1080p를 위해 만들어진 동안, 게임은 단지 720에 그렇게 아직도 움직이고 있습니다, 만약 내가 올바르게 이해한다면, xbox는 480i로 정확하게 확장되어야합니다 ... correct? 요점은 가능한 경우 1080까지 올라갈 수있는 능력이었습니다. 1080에서 실행되지 않는 것을 감지하면 xbox에서 720으로 설정할 수도 있습니다. 맞습니까? –

+0

1080p가 있어야한다면 가장 좋은 방법은 항상 백 버퍼를 1920x1080p로 만들고 스케일링을 수행하지 않는 것입니다. 하드웨어 스케일러가 당신을 위해 그것을하게하십시오 - 아마도 개별 요소들을 스케일링하는 것보다 나아질 것입니다. 그런 다음 480을 예외 사례로 취급하십시오. 모든 것을 쉽게 커버 할 수있는 방법은 없습니다. 1080 –

+0

방금 ​​XBox에서 축소되지 않을 것이라고 말한 것을 제외하고는 1080p로 갔습니까? 당분간 XBox는 단지 720에서 실행될 것입니다. 단지 컴퓨터 나 둘 다에서 최대 1080까지 크기를 조정할 수 있기를 원하지만 그 방법으로 이미 그 해상도의 그래픽을 가지고 있습니다. –

0

이것은 비용이 들지 않습니다. 스케일링은 비디오 카드로 수행됩니다.

그러나 걱정할 필요가있는 경우 다른 해상도를 처리하는 또 다른 옵션은 렌더링 대상을 오프 스크린 버퍼로 변경하고 렌더링 한 다음 버퍼를 텍스처로 사용하여 화면에 사각형을 그립니다. 더 많은 픽셀이 렌더링되지만 각 꼭지점에 대해 변형을 수행 할 필요는 없습니다.