저는 LibGDX 프레임 워크의 SpriteBatch 클래스를 사용하고 있습니다. 내 목표는 셰이더를 통해 스프라이트의 표현을 수정하는 것입니다. LibGDX SpriteBatch Multitexture 가능?
batch = new SpriteBatch(2, shaderProgram);
가 나는의 SpriteBatch 클래스에서 기본 쉐이더를 복사하여 쉐이더에 텍스처를 제공 할 수있는 작업 방법이 있나요
+ "uniform sampler2D u_Texture2;\n"//
2D 다른 균일 한 샘플러를 추가했다. 이렇게하면 allways가 ClearColor Screen으로 끝납니다.
batch.begin();
texture2.bind(1);
shaderProgram.setUniformi("u_Texture2", 1);
batch.draw(spriteTexture,positions[0].x,positions[0].y);
batch.draw(spriteTexture,positions[1].x,positions[1].y);
batch.end();
각 텍스처만으로 작동합니다. 메쉬 클래스를 사용하여 수동으로 그리기가 예상대로 작동합니다. SpriteBatch의 편리함을 사용하려면 어떻게해야합니까?
THX for
안녕하세요. 마지막으로 답변을 얻었습니다. 감사합니다. 당신 말이 맞아요. 그것은 클래스가 텍스처를 바인딩하는 방식의 원인입니다. 나는 이미 SpriteBatch 클래스를 만들었다 고 말할 필요가있다. SpriteBatch는 더 큰 크기의 Framebuffer 텍스처를 렌더링 할 때 몇 가지 문제점을 보여줍니다. 그리고 전 항상 TEXTURE0를 바인딩합니다. 그게 내 방식대로하기로 결정한 이유 지. 덜 convinient하지만 더 유연한 방법. 이제는 꼭지점 생성 만 처리하는 스프라이트 배치가 있습니다. 모든 arround는 자체 셰이더로 사용자 정의 할 수 있습니다. – fky
SpriteBatch는 꼭지점을 생성하는 것 이상을 수행합니다.주의하지 않으면 성능 문제가 발생할 수 있습니다. SpriteBatch 자체에는 '유용성'문제가 있지만 디자인 결정입니다. 이것은 가장 일반적인 드로잉 작업을 단순화하기위한 것이며, 어떻게 든 그것이 유연성을 아프게합니다. 어쨌든, 나는 지금까지 (대부분의 시간을 사용/그것을 사용하기 전에 적절한 OpenGL 플래그를 비활성화/대부분의 문제를 해결할 수있었습니다). 어쩌면 오늘 밤 너와 같이 멀티 텍스쳐를 구현하려고 노력할 것이다;) –
늦게 지내기를 부탁 드리며 지원해 주셔서 감사합니다. 편집 한 것처럼 작동합니다. 그러나 나는 그것을 좋아하지 않는다. 이것은 나에게 위험한 것처럼 보입니다. 나는 더 작은 크기의 더 빠르고 더 나은 디버깅 가능한 내 전문 버전을 선호한다. SpriteBatch는 모두를 행복하게하려고 노력하고 있습니다. 제 생각에는 성능 최적화 클래스가 아닙니다. 그러나 SpriteBatch가 TEXTURE0뿐만 아니라 LAST BOUND 텍스처를 사용하고 있음을 분명히 한 것에 대해 감사드립니다. – fky