OpenGL 테셀레이션에서 정점 당 계산


9

하드웨어 테셀레이션을 사용하여 위치 기반 천 시뮬레이션을 구현하려고합니다. 즉, 컨트롤 쿼드를 그래픽 카드에 업로드 한 다음 테셀레이션 및 지오메트리 음영을 사용하여 클로 쓰에 노드를 만들고 싶습니다.

이 아이디어는 논문을 따릅니다.

Huynh, David, "하드웨어 테셀레이션을 사용한 천체 시뮬레이션"(2011). 명제. 로체스터 공과 대학 http://scholarworks.rit.edu/theses/265/

테셀레이션을 사용하여 시뮬레이션 포인트를 만드는 방법을 알고 있습니다. 내가 모르는 것은 계산 된 정보를 프레임 버퍼에 저장하는 방법입니다.

지오메트리 및 테셀레이션 평가 셰이더에는 버텍스 당 계산에 필요한 정보가 있습니다. 그러나 프레임 버퍼에 직접 쓸 수 있습니까?

내가 아는 조각 쉐이더는 프레임 버퍼에 쓸 수 있지만 내 정보가 보간되어 더 이상 어떤 위치에 쓸지 알 수 없습니다.


피드백 버퍼 변환
래칫 괴물

아주 좋은 데요 천 시뮬레이션의 제약으로 인해 (스프링 힘을 계산하기 위해) 입자의 모든 이웃에 접근 할 수 있어야합니다. 이러한 버퍼로 이것을 할 수 있습니까? 지오메트리 쉐이더에서? GL_POINTS를 사용하고 싶습니다 피드백 버퍼를 각 정점을 여러 번 인쇄합니다. 처음 살펴본 후에는 스프링을 계산하기가 더 어려워 보입니다.
Dragonseel

답변:


3

"ratchet freak"의 의견을 바탕으로 Transform Feedback Buffers를 연구하고 문제를 해결했습니다.

이제 CPU에서 시뮬레이션 포인트를 생성하여 VertexBufferObject에 넣습니다. 포인트에 대한 두 번째 VBO를 생성합니다 (속도에 대해서는 다른 VBO와 함께). 천의 연결성은 ivec4에서 정점 속성으로 제공됩니다.

변환 피드백 버퍼와 두 개의 VBO를 사용하는 더블 버퍼링 트릭을 사용하면 항상 연결 정보를 사용하여 마지막 단계에서 읽고 다른 버퍼에 쓸 수 있습니다. 이것은 동시성 문제를 해결하기위한 것입니다.

계산은 GL_POINTS로 버텍스 쉐이더에서 수행됩니다. 추가 인덱스 버퍼를 사용하여 첫 번째 셰이더의 출력을 다른 일반 셰이더에 바인딩하여 삼각형을 생성하면 원하는 방식으로 천을 렌더링 할 수 있습니다.

이 아이디어는 "OpenGL Superbible"책 http://www.openglsuperbible.com/에서 작성된 변환 피드백 버퍼 예제를 따릅니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.