다른 상태에서 여러 개의 PointPrite를 만드는 방법은 무엇입니까?
-
20-12-2019 - |
문제
가공 2.0을 사용하여 쉐이더를 실험하고 있습니다. 포인트 쉐이더를 조금 더 잘 이해할 수있는 간단한 발췌로 Sprite 클래스에서 시스템을 구현했습니다.
- Fragment Shader에서 SpliteSheet을 균일 한 샘플러 2D로 설정합니다. 2048x 2048 (128 픽셀 정사각형 12 x 12 프레임)
- 포인트를 만듭니다.
- POINT의 버텍스 셰이더에서 UV 좌표를 설정합니다.
- Spritesheet 에서 '프레임'을 선택하기 위해 균일 한 변수로 전달 된 정수로 버텍스 셰이더에서 UV 좌표를 오프셋합니다.
- INTEGER (루프로 모듈러스 사용)를 업데이트하고 응용 프로그램의 5 프레임마다 UV 오프셋을 증가시킵니다.
이것은 Vertex 쉐이더 내에서 기본 애니메이션 시퀀스를 수행 할 수 있음을 의미합니다. 이것이 바람직한 지 모르겠지만 프레임을 변경하려는 시간에 새로 쉐이더에서 새 균일 한 샘플러 2D를 설정하는 것보다 더 잘 수행 할 수 있습니다.
내 질문은 -이 쉐이더를 여러 인스턴스에서 어떻게 사용할 수 있습니까? 서로 다른 값 (즉, 애니메이션의 다른 프레임을 재생) 동시에 화면에 스프라이트 중 두 개를 원한다면 각각의 포인트 쉐이더가 있고 따라서 메모리에서 균일 한 Sampler2d의 자체 복사본을 갖는 방법은 어떻게 달성됩니까?
도움이 될 수 있기를 바랍니다.
해결책
예,이 접근법은 모든 프레임을 새 텍스처를 설정하는 데 훨씬 더 좋습니다.
여러 개의 스프라이트를 그리려면 동일한 프로그램을 사용하고 다른 유니폼을 사용하여 하나씩 객체를 그립니다.
1 : GluseProgram (yourprogram);
2 : 첫 번째 객체에 대한 텍스처 및 UV 설정
3 : .. 제 1 개체 4 : .. 새 텍스처 (또는 동일한 텍스처가 스프라이트가 있음을 유지하십시오) .. 제 2 객체의 UV의
5 : .. 두 번째 개체를
로 만든다.편집 : 프로그램이 설정 한 유니폼에 의해 바인딩되지 않으면 항상 변경하고 다시 콜 드로잉을 다시 할 수 있습니다.