OpenSceneGraph를 사용하여 다중 패스 렌더링 방법을 구현하려고합니다. 그러나 나는 내 문제가 이론적이거나 OSG에 대한 지식이 부족하기 때문에 확신 할 수 없다. 지금까지 직교 투영을 사용하여 텍스처에 렌더링하여 다중 패스 음영을 성공적으로 구현했지만 투시 투영을 할 수없는 것처럼 보입니다.render-to-texture를 사용한 다중 패스 음영
멀티 패스 음영을 구현하는 방법을 잘 모르겠다. 물론 멀티 패스 쉐이더를 사용하여 전체 장면을 텍스처로 미리 렌더링 한 다음 최종 렌더에서 텍스처를 사용해야합니다. 그러나 장면의 각 객체에 대해 별도의 텍스처를 만드는 것이 아니라 미리 렌더링 된 전체 장면의 스크린 샷을 효과적으로 캡처하는 방법에 대해 설명하고자합니다. 그런 다음 그 텍스처만으로 렌더링 된 효과를 개별 지오메트리에 적용합니다.
이것은 내가 버텍스 쉐이더의 각 지오메트리에 대한 버텍스 좌표의 추가 변환을 수행해야한다고 가정합니다. 즉 컴퓨팅 후입니다 :
gl_Position = ModelViewProjectionMatrix * Vertex;
나는 한 단계 더 가서 정점의 화면 질감이 장면의 전체 스크린 샷으로 구성되어 주어진, 다시 (정확하게 정점을지도하기 위해 좌표 계산해야).
내가 맞다면 직각 뷰가 아닌 최종 렌더에서 사용 된 뷰와 동일한 투시도에서 미리 렌더링 할 수 있어야합니다. 이것은 내가 곤경에 처한 곳입니다. 나는 직각 뷰를 원하는대로 할 수는 있지만 투시 뷰는 할 수 없습니다.
내 접근 방식에서 맞습니까? 내가 상상할 수있는 유일한 다른 접근법은 모든 것을 화면 채움 쿼드 (사실상 화면 좌표로 변환하는 것과 같은)로 렌더링하는 것이지만 사전 렌더링 단계에서 투시 투영을 사용할 필요성을 완화하지는 않습니다 .
생각하십니까? 모래밭??
편집 : 성공적인 시도에서 조각 쉐이더 만 사용했음을 지적해야합니다. 투시 투영법은 효과가 있었지만, 물론 화면 중심으로 정렬 된 쿼드는 중심이 아닌 오프셋이 사용되었습니다. 패스 스루 버텍스 쉐이더를 추가했는데 모든 것이 비어 있습니다.