2016-03-27 10 views
-1

İnternette, Libgdx'in artık küp haritalarını desteklediğini okudum ve oyunuma nasıl ekleneceğini anlamaya çalışıyorum. StackOverflow'a bir örnek aradım ama sadece bir tane buldum ve eskimiş görünüyor. OpenGL shader'larla çok fazla tecrübem yok, bu yüzden Libgdx bana oyundaki bir kalkana yansıma efekti eklemek için OpenGL shader'lar üzerinde büyük bir kitap okumaya gerek kalmadan bir cubemap sağlayabilir. Herhangi bir yardım takdir edilecektir. Bir 2d dokuda olduğu gibi genel olarak bir cubemap geneldir.Libgdx CubemapAttribute: Libgdx'in CubemapAttribute'u yansıma oluşturmak için nasıl kullanabilirim?

cevap

1

İstediğiniz her şey için kullanılabilir. Ayrıca farklı amaçlar için birden fazla küp eşlemesine sahip olabilirsiniz. Benzer şekilde CubemapAttribute, ortamınıza veya malzemenize bir cubemap eklemek için kullanılabilir. Tıpkı bir 2d doku eklemek için TextureAttribute gibi kullanılabilir. aşağıdaki gibi

Bir cubemap oluşturabilirsiniz:

Cubemap cubemap = new Cubemap(
    Gdx.files.internal("image_px.png"), 
    Gdx.files.internal("image_nx.png"), 
    Gdx.files.internal("image_py.png"), 
    Gdx.files.internal("image_ny.png"), 
    Gdx.files.internal("image_pz.png"), 
    Gdx.files.internal("image_nz.png"), false); 

Here Eğer bir cubemap oluşturmak için kullanabileceğiniz bazı örnek görüntüleri bulabilirsiniz. İsmi uygun şekilde ayarladığınızdan emin olun.

Bir cubemap OpenGL kaynaklarını barındırır ve gerektiğinde atılması gerekir. senin dispose yönteme bu satırı ekleyin unutmayın:

cubemap.dispose(); 

cubemap için tipik bir kullanım yansımalarını taklit için kullanılan bir "çevre haritası" sağlamaktır. Eğer o zaman u_environmentCubemap üniformasına bu cubemap bağlayacak DefaultShader uygulanmasını kullanırsanız

environment.set(new CubemapAttribute(CubemapAttribute.EnvironmentMap, cubemap)); 

, böylece gölgelendiricideki kullanabilirsiniz: aşağıdaki gibi ortamınıza böyle harita ekleyebilirsiniz.

Varsayılan gölgelendirici programının (glsl dosyaları) yansımaları desteklemediğini unutmayın, bunun için farklı bir gölgelendirici kullanmanız gerekecek. İsterseniz this shader'u kullanabilirsiniz. Modelinizin malzemesinin yansıtıcı olması gerektiğini unutmayın (see this example material).

modelBatch = new ModelBatch(new DefaultShaderProvider(
    Gdx.files.internal("vertex.glsl"), 
    Gdx.files.internal("fragment.glsl"))); 

kendi gölgelendiricideki cubemap kullanmak istiyorsanız o zaman temelde like this (Bu soruya kapsamı dışındadır, çünkü sadece basit bir örnek, ben gerçek gölgelendirici yazılı girmeyeceğim edeceğiz) kullanabilirsiniz :

gl_FragColor = vec4(textureCube(u_environmentCubemap, reflectDir).rgb, 1.0); 
+0

Wow! Harika cevap, teşekkürler Xoppa – amedina

+0

Yardımlarınız için gerçekten minnettarım, Xoppa. Bu gölgelendiricileri test ettim ve 215 numaralı satırdaki fragment.glsl dosyasında bir hata buldum. Şimdi: vec4 specular = vec4 (0.0); 'vec3 specular = vec3 (0.0); Düzeltdim ve işe yarıyor ve kötü bir şey yapıp yapmadığımı bilmiyorum ama eğer Cubemap özniteliğini ayarlarsam, ortam ışığını ayarlayamıyorum, değil mi? Yapabilirsem nasıl yapabilirim? Yardım ettiğin için teşekkür ederim. – amedina

+0

Teşekkürler, birkaç cihazda test etmek için biraz zaman bulabildiğim zaman, gazı kontrol edip değişiklikinize göre değiştireceğim. Gölgeyi tüm olası ışık ve malzeme kombinasyonlarıyla kontrol etmedim (ki bu neredeyse imkansızdır), bu yüzden bazı kombinasyonların sorunları olabilir. Ortam ışığı pratik olarak sadece gl_FragColor'a bir değer katıyor, böylece gerekirse kendi gölgeleyicinizin tabanı olarak kullanabilirsiniz. Bunu uygulamak da bu sorunun kapsamı dışındadır. – Xoppa