Tôi đang cố gắng hiểu bóng đổ bằng cách sử dụng libgdx, đến từ một nền XNA/HLSL. Tôi đang cố gắng để có được một cặp shader vert/frag để tái tạo đầu ra tôi nhận được mà không có một shader, nhưng nó không hiển thị bất cứ điều gì.shader shader- shaders cơ bản, nhưng màn hình trống
Shader tạo:
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;
}
Hiển thị:
batch.begin();
for (GameObject gObj : gameObjects)
gObj.Draw(batch);
batch.end();
Mọi đề xuất ở đây? Tôi cũng mới sử dụng OpenGL-ES, vì vậy tôi có thể thiếu một điều gì đó hiển nhiên. Tôi nhìn xung quanh một chút trước khi đăng và tài liệu cho SpriteBatch.setShader(ShaderProgram)
như sau:
Đặt trình đổ bóng được sử dụng trong môi trường GLES 2.0. Thuộc tính Vertex thuộc tính được gọi là "a_position", thuộc tính tọa độ kết cấu là được gọi là "a_texCoords0", thuộc tính màu được gọi là "a_color". Xem ShaderProgram.POSITION_ATTRIBUTE, ShaderProgram.COLOR_ATTRIBUTE và ShaderProgram.TEXCOORD_ATTRIBUTE được "0" được thêm vào cho biết việc sử dụng đơn vị kết cấu đầu tiên. Ma trận chiếu được tải lên thông qua bộ đồng phục mat4 gọi là "u_proj", ma trận biến đổi là được tải lên thông qua bộ đồng phục gọi là "u_trans", biến đổi kết hợp và matrx chiếu được tải lên thông qua bộ đồng phục mat4 gọi là "u_projTrans". Trình lấy mẫu kết cấu được chuyển qua một bộ đồng phục gọi là "u_texture". Gọi phương thức này với đối số null để sử dụng trình tạo mặc định .
Hmm, spec GLSL chứa: 'Nói chung, của ngôn ngữ sử dụng bộ ký tự này phân biệt chữ hoa chữ thường.'. Điều này có nghĩa là Định danh có phân biệt chữ hoa chữ thường không? Phần Mã định danh không chứa một từ nào về nó. (đổ bóng đỉnh chứa 'a_Position', chú thích' a_position') –
Đúng, có vẻ như bạn đã đúng. Tôi đã kiểm tra cách 'SpriteBatch' tạo ra shader của nó, và nó chủ yếu là một vấn đề mũ. Tôi cũng đã tìm ra các trình đổ bóng mặc định là gì- Tôi sẽ đăng những người dưới đây. – NumberOverZero