2012-12-27 3 views
2

OpenGL을 사용하여 화면 출력의 일반적인 디스플레이 대신 비디오 출력 파일을 만들려합니다. glutPostRedisplay() 또는 (SFML 버전,이 :) like window.Display()를 사용하지 않고 대신 glReadPixels()를 사용하는 것으로 생각하고 있습니다.OpenGL - 비디오 출력 파일 만들기

glReadPixels는 픽셀 내용을 메모리에있는 배열에 저장하지만 (예를 들어 이미 알고있는 것처럼), 그 내용을 프레임으로 변환하고 여러 프레임을 비디오 파일에 함께 엮을 수 있습니까? 비디오 파일은 어떤 형식으로되어있어서 재생할 수 있습니까?

이유를 설명해야합니다. 많은 물리 시뮬레이션이 한 프레임을 표시하는 데 충분한 정보를 계산하는 데 오랜 시간이 걸릴 수 있으므로 밤새 실행하고 다음날 아침 비디오 파일을 재생하는 것이 좋습니다 . 일어난 일을보기 위해 5 분마다 돌아오고 싶지 않을 것입니다.

+0

원시 프레임 (RGBA)에 저장 한 다음 나중에 처리 할 수 ​​있습니다 (예 : RGBA). gstreamer와 함께. (변환 파이프 라인을 응용 프로그램에 임베드 할 수도 있습니다). –

+0

gstreamer는 내 코드에 포함시켜 일부 원시 프레임을 전달할 수있는 무언가이며 오그 또는 MPEG 또는 기타 출력을 얻을 수 있습니까? – user3728501

+0

다소 차이가 있습니다. 완전한 프레임 워크이기 때문에 최소한 한 응용 프로그램에서는 다소 부풀려 보일 수 있습니다. 하지만 이미 알고 있다면. 유닉스 스타일의 파이프와 필터는 그렇게 많은 학습 곡선이 아닙니다. –

답변

4

glutPostRedisplay은 GLUT의 일부이며 OpenGL 고유의 것이 아닙니다.

일반적으로 PBuffer를 사용하거나 숨겨진 창과 프레임 버퍼 개체를 사용하여 오프 스크린 렌더링을 수행합니다.

이미지를 비디오로 변환하는 방법은 다양합니다. 예를 들어 FFmpeg을 입력 형식으로 image2pipe을 사용하고 원시 이미지 데이터를 ffmpeg 프로세스 표준 입력에 쓸 수 있습니다. 훨씬 간단한 방법은 각 프레임을 별도의 이미지 파일로 덤프하는 것입니다. libpng을 사용하는 것은 간단합니다. 그런 다음 개별 이미지를 비디오로 병합 할 수 있습니다.

그러나 물리 시뮬레이션을 수행 할 때 최종 렌더링을 파일로 덤프해서는 안됩니다. 대신 나중에 재생할 수 있도록 시뮬레이션 데이터를 저장해야하므로 모든 것을 다시 시뮬레이션 할 필요없이 렌더링 매개 변수를 조정할 수 있습니다. 그리고 렌더러를 조정해야합니다!

+0

데이터를 저장하는 것이 좋습니다. 감사합니다. – user3728501