문제

가공 2.0을 사용하여 쉐이더를 실험하고 있습니다. 포인트 쉐이더를 조금 더 잘 이해할 수있는 간단한 발췌로 Sprite 클래스에서 시스템을 구현했습니다.

  1. Fragment Shader에서 SpliteSheet을 균일 한 샘플러 2D로 설정합니다. 2048x 2048 (128 픽셀 정사각형 12 x 12 프레임)
  2. 포인트를 만듭니다.
  3. POINT의 버텍스 셰이더에서 UV 좌표를 설정합니다.
  4. Spritesheet
  5. 에서 '프레임'을 선택하기 위해 균일 한 변수로 전달 된 정수로 버텍스 셰이더에서 UV 좌표를 오프셋합니다.
  6. INTEGER (루프로 모듈러스 사용)를 업데이트하고 응용 프로그램의 5 프레임마다 UV 오프셋을 증가시킵니다.
  7. 이것은 Vertex 쉐이더 내에서 기본 애니메이션 시퀀스를 수행 할 수 있음을 의미합니다. 이것이 바람직한 지 모르겠지만 프레임을 변경하려는 시간에 새로 쉐이더에서 새 균일 한 샘플러 2D를 설정하는 것보다 더 잘 수행 할 수 있습니다.

    내 질문은 -이 쉐이더를 여러 인스턴스에서 어떻게 사용할 수 있습니까? 서로 다른 값 (즉, 애니메이션의 다른 프레임을 재생) 동시에 화면에 스프라이트 중 두 개를 원한다면 각각의 포인트 쉐이더가 있고 따라서 메모리에서 균일 한 Sampler2d의 자체 복사본을 갖는 방법은 어떻게 달성됩니까?

    도움이 될 수 있기를 바랍니다.

도움이 되었습니까?

해결책

예,이 접근법은 모든 프레임을 새 텍스처를 설정하는 데 훨씬 더 좋습니다.

여러 개의 스프라이트를 그리려면 동일한 프로그램을 사용하고 다른 유니폼을 사용하여 하나씩 객체를 그립니다.

1 : GluseProgram (yourprogram);

2 : 첫 번째 객체에 대한 텍스처 및 UV 설정

3 : .. 제 1 개체 4 : .. 새 텍스처 (또는 동일한 텍스처가 스프라이트가 있음을 유지하십시오) .. 제 2 객체의 UV의

5 : .. 두 번째 개체를

로 만든다.

편집 : 프로그램이 설정 한 유니폼에 의해 바인딩되지 않으면 항상 변경하고 다시 콜 드로잉을 다시 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top