2010-01-29 3 views
7

는,이 말한다 :FPS 어떻게 계산합니까? 내 OpenGL은 책에서

"무엇 종종 시스템에서 발생하는 프레임이 1/60 초에 그릴 너무 복잡, 각각의 프레임이 두 번 이상 표시되는 것입니다. 예를 들어 의 경우 프레임을 그리는 데 1/45 초가 걸리면 30fps가되고 그래픽은 프레임 당 1/30 1/45 = 1/90 초 또는 의 3 분의 1 동안 유휴 상태가됩니다. 시각."

"프레임을 그리는 데 1/45 초가 걸리면 30fps가됩니다."왜 30fps 밖에되지 않습니까? 45fps로 맞습니까?

+0

죄송합니다. 아직 이해가되지 않습니다. 자세한 설명을 알려주세요. 나는 정말로 왜 30 fps 밖에 얻을 수 없는지, 그리고 이것이 2/60 초 동안 새로 고침을하는 이유를 이해하지 못한다! (링크 애논이 말했다), 다시 한번 감사드립니다 !! – drigoSkalWalker

답변

12

그래픽 카드는 일반적으로 한 프레임 앞당겨 버퍼링합니다.

프레임을 그리는 데 1/45 초가 걸리는 경우 1/60 초 표시에서 이전 프레임이 다시 표시됩니다. 1/45 마크에서 다음 프레임은 끝났지 만 카드에는 다음 버퍼의 렌더링을 시작하기위한 여유 버퍼가 없으므로 프레임을 보내고 작업을 시작할 수있는 1/30까지 유휴 상태로 있어야합니다. 다음에.

VSync가 활성화 된 상태입니다. 비활성화하면 30FPS 프레임 속도와 유휴 상태의 카드가 1/3 시간이 아닌 즉시 다시 그리기가 시작되고 대신 화면이 끊어집니다.

+1

+1 : V- 동기화 참조 용 –

+0

왜 1/30까지 기다려야합니까? 덕분에 adavance. – drigoSkalWalker

+0

다음 프레임이 전송 될 때 (2/60 초) 때문입니다. VSync를 비활성화하면 대기를 피할 수 있지만 카드가 보내는 이미지는 한 프레임의 일부가되고 다른 프레임의 일부가됩니다. –

5

정확합니다. 45fps를 얻을 수는 있지만 시스템은 60Hz (초 당 60 다시 그리기) 모니터에서 부드러운 프레임 속도를 얻기 위해 30fps로 느려지고 있습니다.

당신은 60Hz의 모니터에 뭔가를 매 1/60 초를 그릴 필요 , 그리고 "반 프레임", 당신은 이전 프레임을 그려야 그릴 수 없기 때문에. 따라서 초당 60 회의 시간당 실제 프레임을 그리면 이전 프레임을 2 프레임마다 그립니다. 그러면 45fps를 관리 할 수 ​​있음에도 불구하고 30fps가됩니다.

+0

60 초가 아닌 60 회/초 –

+0

@Jeffrey, 아, 오타가 수정되었습니다. –

0

그래, 다른 사람들이 말했듯이 이것은 다음 프레임을 생성하기 시작하기 전에 그래픽이 v-sync를 기다리고 있기 때문입니다.

말하기 ...

주의 : 모니터는 60Hz에서 새로 고침하지 마세요. 60fps 대 30fps는 70Hz 디스플레이에서 70fps와 35fps가됩니다.

다음 프레임을 시작하기 전에 카드가 v-sync를 기다리지 않고도 그래도 찢어지지 않도록하려면 트리플 버퍼링을 사용하십시오. GPU는 3 번째가 표시되는 동안 2 개의 버퍼로 핑퐁 렌더링을합니다. v-sync 이벤트는 "현재 완료된"백 버퍼로 스왑을 트리거하는 것입니다. 다른 프레임보다 프레임에 더 자주 머무는 프레임으로 끝나기 때문에 이것은 여전히 ​​훌륭하지 않습니다. 1/45 렌더링을 사용하면 프레임이 1/30 초 동안 머무를 것이고 1/60은 1/60으로 머무름으로써 약간의 갑작스러운 느낌을 줄 것입니다. .

마지막으로 오프 스크린 렌더링 (비 표시 버퍼로 렌더링)의 출현과 함께 드라이버가 다음 프레임에서 시작하기 전에 v-sync를 기다리지 않는 것이 이론적으로 가능합니다. 프레임이 디스플레이 표면에 닿지 않게됩니다. 나는 내가 운전자가 그 똑똑한 것을 이제까지 보았다라고 생각하지 않는다.

관련 문제