2014-12-06 2 views
0

사용자가 애니메이션 3D 지오메트리를 스크럽 할 수있는 "타임 라인"이있는 QT OpenGL 응용 프로그램을 구현합니다. 즉, 타임 라인을 제거하면 VBO 데이터의 재 바인딩을 유발하는 이벤트가 트리거됩니다. 제대로 그려진 것입니다.OpenGL VAO 버퍼의 빠른 수정

타임 라인의 두 시간 지점 (두 시간 지점 사이의 모든 델타 합계) 사이에서 변경된 메모리 섹션 만 다시 바인딩 할 수 있지만 상당히 비싸 보입니다. 순전히 시간 지점 변경 이벤트에서 모든 VBO 데이터를 다시 바인드하고 메모리의 각 프레임에 대한 모든 VBO 데이터를 추적하는 것으로 충분합니까?

+1

참고 : https://www.opengl.org/wiki/Buffer_Object_Streaming –

답변

0

(난 당신이 뼈 또는 무언가를 사용하는 대신 개별적으로 정점을 애니메이션 있다는 것을 여기에 있으리라 믿고있어. 뼈와 상황은 유사하다.)

을 문제는, 각각에 대한 VBO의 전체 복사본을 가지고 프레임은 엄청난 양의 메모리입니다.

이상적으로는 시간이있는 키 프레임 목록, 벡터 + 오프셋의 목록으로 키 프레임으로 애니메이션 된 정점 및 보간 데이터가 있습니다. 버텍스 쉐이더에 보내지는 것은 "이전"VBO이고, "VBO"는 알파입니다. 그런 다음 정점 셰이더가 보간을 수행합니다.

그런 식으로 말하자면 문질러 쓸 때 VBO 전후의 부분 (즉, 통과 한 각 키프 레임이있는 경우)과 알파가 glUniform1f 인 경우에만 glBufferSubData을 입력하면됩니다. 과도한 glBufferSubData 호출을 피하기 위해 추론을 할 수 있습니다. 예를 들어, 5 통화 이상을 수행 할 때 전체 버퍼를 다시 보냅니다.

+0

모든 프레임에 키 프레임이 있다면 어떻게 될까요? 애니메이션 데이터로 정확하게 작업하지는 않습니다. 시간 경과 FMRI 시퀀스와 같습니다. – ejang

관련 문제