WinForms 앱에서 18.66666 ... 초당 프레임 수 (140 BPM의 음악과 동기화 됨, 프레임 속도가 이상한 이유)로 애니메이션을 실행하고 있습니다. 애니메이션의 각 셀은 사전 계산되고 애니메이션은 고해상도 멀티미디어 타이머에 의해 구동됩니다. 애니메이션 자체는 매끄 럽지 만 화면이 새로 고침되어 중간에 고양이가 잡히는 결과 인 "찢어짐"이 상당량 발생합니다.애니메이션에서 찢어짐을 제거하는 방법은 무엇입니까?
내 프로그램에서 렌더링 한 셀 집합을 가져 와서 AVI 파일에 기록한 다음 Windows Media Player에서 AVI 파일을 재생할 때 전혀 찢어지지 않는 것을 볼 수 있습니다. DirectX (또는 다른 것)를 사용하고 화면의 새로 고침 활동과 렌더링을 동기화 할 수 있기 때문에 WMP가 파일을 부드럽게 재생한다고 가정합니다. 애니메이션이 오디오와 동기화되어 있기 때문에 프레임 속도는 변경되지 않습니다.
WMP가 찢어지지 않고 애니메이션을 렌더링 할 수있는 이유는 무엇입니까? 아니면 뭔가 빠져 있습니까? 내 프로그램이 현재 스캔 라인이 어디에 있는지를 알 수 있도록 DirectX (또는 다른 것)를 사용할 수있는 방법이 있습니까? 그렇다면 실제로 DirectX를 사용하지 않고도이 정보를 사용하여 찢어짐을 제거 할 수있는 방법이 있습니다. 셀을 표시하기 위해? 아니면이 문제를 해결하기 위해 렌더링을 위해 DirectX를 완전히 사용해야합니까?
업데이트 : 세부 정보를 잊어 버렸습니다. 내 응용 프로그램은 Graphics.DrawImage를 사용하여 각 셀을 PictureBox에 렌더링합니다. 이것은 BitBlt를 사용하는 것보다 상당히 느려서 BitBlt를 사용하여 적어도 일부는 찢어지는 것을 제거 할 수 있습니까?
업데이트 2 : 내가 보는 효과는 분명히 깜박 거리지 않습니다 (이는 찢어짐과 다릅니다). 내 패널은 이중 버퍼링되고 AllPaintingInWmPaint, UserPaint, OptimizedDoubleBuffer 등의 컨트롤 스타일을 설정하고 onPaintBackGround를 재정의하는 등의 작업을 수행합니다. 이 모든 것들이 깜박 거림을 없애기 위해 필요하지만, 찢어지는 문제는 여전히 남아 있습니다. 애니메이션이 매우 빠르게 움직이는 물체 나 빛에서 어두움으로 변화하는 물체를 매우 빠르게 가질 때 특히 두드러집니다. 물체가 느리게 움직이고 색이 빠르게 변하지 않는 경우, 연속적인 셀이 항상 서로 매우 유사하기 때문에 눈물이 나지 않는 효과가 눈에 띄지 않습니다.
별도의 스레드에서 렌더링을 실행하고 있습니까? –
@Ardman : 예, 렌더링은 별도의 스레드 (UI 스레드와 별도)에서 수행됩니다. – MusiGenesis