2010-02-18 2 views
3

위치와 다양한 속성이 정점 버퍼 개체에 저장되는 파티클 시스템이 있습니다. 값은 CUDA 커널에 의해 지속적으로 업데이트됩니다. 현재 GL_POINTS를 평면 원으로 사용하고 있습니다. 제가 관심을 갖는 것은이 입자를 3D 애니메이션 조류 모델과 같이 더 복잡하게 만드는 것입니다. 나는 최선의 접근 방법이 무엇인지 알아 내려고 노력 중이다. 대화를 위해서 새 모델의 애니메이션이 3 개의 프레임으로 구성되어 있다고 가정 해 봅시다 (날개의 위치와 날개의 위치)OpenGL에서 평범하지 않은 입자를 렌더링하는 방법

모델을 디스플레이 목록에로드하고 모든 입자를 반복적으로 볼 수 있습니다. 회전 등을 행한 다음 표시 목록을 호출합니다. 이것은 이상적인 접근 방식처럼 보이지 않습니다. 왜냐하면 GPU에서 모든 입자 데이터를 호스트로 가져 와서 행렬 작업을 수행해야만합니다 (단, CUDA 커널에서 드로잉 기능을 호출 할 수 없다면)? ?)

셰이더에 대해 잘 모르겠다. 이런 식으로 처리 할 수 ​​있습니까?

이 시점에서 나는 어떤 길을 추구할지에 대한 조언을 주로 찾고 있지만 주제를 다룬 기사 나 자습서는 알고 있습니다.


Windows 7 64 비트에서 OpenGL과 함께 C++로 작업하고 있습니다. 나는 GLUT를 사용하지 않고있다.

답변

4

아마 EXT_draw_instanced를 사용하고 싶을 것이다. 나는 실제로 Instancing을 사용하지 못했지만, 가장 현대적인 GPUS (GF6 이상)는 GPU에 모델과 포인트 목록을 제공하고 모든 점에서 모델을 그릴 수있게 해줍니다.

는 좀 더 많은 정보를 구글과 내가 함께 ....

음이 공식 스펙입니다 와서 무엇을보고, 그들이에 대한 자습서를 것 같습니다 것입니다.

http://www.opengl.org/registry/specs/ARB/draw_instanced.txt

+0

동의. 이것은 바로 인스 턴싱이 설계된 것입니다. – Toji

0

당신은 그런 일을 할 창의력을해야합니다. CUDA를 사용하여 2 3 요소 플로트 텍스처로 위치와 회전을 계산 한 다음 각 꼭지점과 함께 "인덱스"를 실행하고 기하 도형 인스턴스 당 1 씩 증가 시키면 텍스처를로드 한 다음 버텍스 쉐이더 텍스처를 사용하는 셰이더를 작성할 수 있습니다 두 텍스처에서 관련 픽셀을 선택하고 변환 행렬을 빌드하는 조회. 그런 다음 여러분이 만든 변형 행렬에 의해 메쉬의 버텍스를 변형합니다.