2011-04-18 7 views
3

웨이브 프론트 모델 파일 (.OBJ 및 .MTL)을로드하고 렌더링을 위해 VBO에 정점/인덱스를 저장했습니다. 이제는 모델이로드 될 때 한 번만 VBO를 채 웁니다. 내 질문은 ...이 정점 데이터를 다시 사용하여 모델의 여러 인스턴스를 다시 그리는 가장 좋은 방법은 무엇입니까? 지금은 모델의 각 인스턴스에 대한 변환 행렬 (회전, 크기 조절 및 변환)을 저장하고 해당 변환 행렬을 사용하여 각 인스턴스에 대해 draw() 함수를 호출합니다.모델을 한 번로드하고 OpenGL에서 다시 사용하는 방법

이렇게하는 것은 완전히 잘못된 방법입니까? 동일한 결과를 달성하기위한 더 나은/대안적인 방법은 무엇입니까? 객체 자체에 대한 (즉, 모델의 어떤 부분에 관계없이의 이동하지 않는다고하는 세계 방향이다)와 고정입니다

분명히, 이것은 매우 기본적인 모델 작동합니다. 이것은 내가 실제로이 일을하는 훨씬 더 좋은 방법이 있다고 믿게합니다. 당신은 단지 그것을 할 수있는 합리적인 방법입니다 변환 행렬을 변경, 모델의 위치를 ​​변경하려면

답변

4

... 내 얘기 일이 이해 바랍니다. 나중에는 OpenGL 버전에서는 하나의 호출 모델을 다른 변형으로 여러 번 렌더링하기 위해 복제 된 도면을 사용하고, 어쩌면 그런 식으로 약간의 추가 성능을 얻을 수 있지만, 단지마다 주위의 변환 행렬을 변경하는 루프는 좋은 시작입니다 수 있습니다 포인트.

실제로 모델에 애니메이션을 적용하는 경우에는 꼭지점 좌표 자체를 변경해야하기 때문에 다릅니다. 키 프레임 기반 애니메이션의 경우 각 키 프레임을 별도의 버퍼에로드하고 정점 셰이더가 유니폼으로 제공 한 시간 값을 사용하여 보간 작업을 수행 할 수 있습니다. 그러나 이런 종류의 일은 전체 모델을 변형시키는 것에서 독립적입니다.

+0

답변과 설명에 감사드립니다. 나는 애니메이션을 잠시 할 필요가 없기 때문에 필요할 때까지 그냥 떠날 것이라고 생각한다 : p –

관련 문제