Bir XNA/HLSL arka planından gelen libgdx'i kullanarak gölgelendiricileri anlamaya çalışıyorum. Bir gölgelendirici olmadan elde ettiğim çıktıyı çoğaltmak için bir vert/frag shader çifti almaya çalışıyorum, ancak hiçbir şey göstermiyor.libgdx gölgelendiriciler - temel gölgelendirici, ancak ekran boş
Shader oluşturma:
void SetupShader()
{
ShaderProgram.pedantic = false;
shader = new ShaderProgram(
Gdx.files.internal("assets/default.vert").readString(),
Gdx.files.internal("assets/default.frag").readString());
if(!shader.isCompiled()) {
Gdx.app.log("Problem loading shader:", shader.getLog());
}
batch.setShader(shader);
}
default.vert:
attribute vec4 a_Position;
attribute vec4 a_Normal;
attribute vec2 a_TexCoord;
attribute vec4 a_Color;
uniform mat4 u_projTrans;
varying vec2 v_texCoords;
varying vec4 v_color;
void main() {
v_color = a_Color;
v_texCoords = a_TexCoord;
gl_Position = u_projTrans * a_Position;
}
default.frag:
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoords;
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}
Rendering: burada
batch.begin();
for (GameObject gObj : gameObjects)
gObj.Draw(batch);
batch.end();
herhangi bir öneriniz? Ben de OpenGL-ES için yeniyim, bu yüzden bariz bir şey eksik olabilir. Göndermeden önce biraz etrafına baktım ve SpriteBatch.setShader(ShaderProgram)
dokümanı şu şekilde oldu:
Bir GLES 2.0 ortamında kullanılacak gölgelendiriciyi ayarlar. Vertex konumu özniteliği "a_position" olarak adlandırılır, doku koordinatları özniteliği "a_texCoords0" olarak adlandırılan , renk özniteliği "a_color" olarak adlandırılır. Bkz. ShaderProgram.POSITION_ATTRIBUTE, ShaderProgram.COLOR_ATTRIBUTE ve ShaderProgram.TEXCOORD_ATTRIBUTE, 'a eklenen 0COTO_DATTRIBUTE, ilk doku biriminin kullanımını belirtir. Projeksiyon matrisi, "u_proj" adı verilen bir mat4 forması aracılığıyla yüklenen , dönüşüm matrisi "u_trans" adlı bir üniforma yoluyla yüklenen , birleştirilmiş dönüşüm ve projeksiyon matrisi, "u_projTrans" adı verilen bir mat4 üniforması yoluyla yüklenir. Doku örnekleyici "u_texture" adında bir üniforma ile geçirilir. Varsayılan gölgelendiriciyi kullanmak için bu yöntemi null argümanı ile çağırın.
Hmm, GLSL Spec içerir: 'Genel olarak, dilin kullanımı Bu karakter kümesi büyük/küçük harfe duyarlıdır. Bu, Tanımlayıcıların büyük/küçük harfe duyarlı olduğu anlamına mı geliyor? Tanımlayıcılar bölümünde bu konuda bir kelime bulunmuyor. (vertex shader, 'a_Position',' a_position 'yorumunu içerir) –
Evet, haklı gibi görünüyorsun. SpriteBatch'in gölgelendiricisini nasıl oluşturduğunu kontrol ettim ve öncelikli olarak bir kapak sorunuydu. Ayrıca varsayılan gölgelendiricilerin ne olduğunu anladım - Aşağıdakileri yayınlayacağım. – NumberOverZero