2012-12-29 36 views
5

LibGDX çerçevesini kullanarak bir boyama uygulamasında çalışıyorum ve kullanıcıların kendi çizimleri olarak gördükleri katı bir dokuya çizdiği birleştirme için FrameBuffer sınıfını kullanıyorum. Bu konu gayet iyi çalışıyor, ancak kullanıcının çizebileceği alan her zaman aynı boyutta olmayacak ve tüm pencerenin dışındaki çözünürlüklerde düzgün bir şekilde görüntülenmesi konusunda sorun yaşıyorum.LibGDX FrameBuffer ölçekleme

Bunu çok kapsamlı bir şekilde test ettim ve olması gereken şey, FrameBuffer'ın, pencerenin kendisi ile aynı çözünürlükte doku oluşturmasıdır ve daha sonra, gerçek alanı sığdırmak için gerdirmek veya küçültmektir. Içinde, hangi pencere daha büyük veya daha küçük herhangi bir çizim için çok hoş olmayan bir etkidir.

Sürecimin her adımında, hiçbir zaman bu gerilmeyi kendim yapmadığımı ve her şeyin nasıl ve nerede olması gerektiği, doğru boyutlar ve konumlarla çizildiğini doğruladım. Ayrıca, cevabı bulmaya çalışmak için FrameBuffer sınıfına da baktım, ama garip bir şey bulamadı, ama yaptığım tüm testler göz önüne alındığında, bu sorunun olması için mümkün olan tek yer gibi görünüyor. bir şekilde yaratıldı.

Bu sorunu gidermek için oldukça fazla zaman harcayarak fikirlerden tamamen çıktım.

+0

Welcome: (! Bence)

çerçeve tampon gerçek cihaz pencere boyutu ne olursa olsun, doğru bir oran ve ölçek bir yapı elde etmek için bir yol şöyle gereken boyuta projeksiyon matris ayarlamaktır . Ayrık bir sorunuz varsa ve neyi denediğinizi, ne olduğunu gösterdiğinizde, mesajınıza daha iyi yanıt alacaksınız. – ethrbunny

+0

Daha spesifik bir soru yayınlayabildiğim ve daha fazla ayrıntı verebileceğimi gerçekten çok istiyorum. Problemin doğası, nerede odaklanmam gerektiğini ve tam bir kayıpta olduğumu bilmiyorum. İstekte yardımcı olabilecek herhangi bir şey göndermekten mutluluk duyuyorum, ancak şu anda buraya eklemek için gerçekten neyin yararlı olacağından bile emin değilim. – Synthetik

cevap

6

Temel sorunu bulmak için çok teşekkür ederim Sentetik. İşte bu durumu ortadan kaldırmanın uygun yolu. StackOverflow

SpriteBatch batch = new SpriteBatch(); 
Matrix4 matrix = new Matrix4(); 
matrix.setToOrtho2D(0, 0, 480,800); // here is the actual size you want 
batch.setProjectionMatrix(matrix); 
+0

Bunu denedim hala hala biraz uzanıyor. – Midnightas

3

Sorunumu çözdüğümü düşünüyorum ve sorunun ne olduğuna dair kısa bir genel bakış yapacağım.

Temel olarak, bu sorunun nedeni SpriteBatch sınıfı içinde yer almaktadır. Spesifik olarak, sınıfın eski bir versiyonunu kullanmadığımı varsayarsak, problem, projeksiyon matrisinin ayarlandığı satır 181'de yatmaktadır. satır:

 projectionMatrix.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

Bu aslında, pencere/ekranın ölçeğinde çizilmesi, çizilmiş ve daha sonra sonradan gerekiyor nereye sığacak şekilde uzatılmasını şeyi neden oluyor. Bunu işlemek için daha "uygun" bir yol olup olmadığından emin değilim, ancak SpriteBatch sınıfında bu yöntemi tekrar kendi boyutumla çağırmamı ve gerektiğinde bunu çağırmamı sağlayan başka bir yöntem oluşturdum. Her çekilişte veya bunun gibi bir şeyde gerekmediğini, sadece bir kez veya boyutların değiştiği herhangi bir zamanda gerekli olduğunu unutmayın.