Tôi có một cảnh với một số kiểu máy có vị trí và phép quay riêng lẻ. Đưa ra các tiêu chuẩn, các shader áp dụng ánh sáng hai chiều đơn giản cho mỗi pixel.Xoay các chỉ số trong Shader
Đó là hình bóng đỉnh của tôi.
#version 150
in vec3 position;
in vec3 normal;
in vec2 texcoord;
out vec3 f_normal;
out vec2 f_texcoord;
uniform mat4 model;
uniform mat4 view;
uniform mat4 proj;
void main()
{
mat4 mvp = proj * view * model;
f_normal = normal;
f_texcoord = texcoord;
gl_Position = mvp * vec4(position, 1.0);
}
Và đây là trình đổ bóng phân đoạn.
#version 150
in vec3 f_normal;
in vec2 f_texcoord;
uniform sampler2D tex;
vec3 sun = vec3(0.5, 1.0, 1.5);
void main()
{
vec3 light = max(0.0, dot(normalize(f_normal), normalize(sun)));
gl_FragColor = texture(tex, f_texcoord) * vec4(light, 1.0);
}
Đối với các đối tượng không quay hoạt động tốt. Nhưng đối với các mô hình luân phiên, ánh sáng cũng được luân chuyển, điều này không phải là trường hợp.
Lý do cho điều đó là các chuẩn không được xoay. Tôi đã thử f_normal = model * normal;
nhưng điều này áp dụng cả luân chuyển và chuyển đổi cho các chuẩn mực.
Vậy làm cách nào tôi có thể xoay các chỉ tiêu trong trình đổ bóng đỉnh trước khi tôi gửi chúng đến trình đổ bóng phân đoạn để chiếu sáng? Cách tiếp cận chung là gì?
Cảm ơn. Bạn có lời khuyên tôi để gửi một ma trận bình thường riêng biệt (bao gồm cả việc quay mô hình nhưng không chia tỷ lệ cũng không chuyển đổi) để đổ bóng không? Tôi thấy rằng thực hành một nơi nào đó và tự hỏi nếu đó là tốt hơn so với tái chiết xuất luân phiên từ ma trận mô hình trong bóng đổ. – danijar
Xin lỗi về điều đó, thời gian của tôi đã hết khi chỉnh sửa nhận xét trước ... Tôi nghĩ rằng việc chia tỷ lệ là cần thiết, vì nó có thể thay đổi khoảng cách của bề mặt thành nguồn sáng. Và kể từ khi bạn cần quy mô, bạn cần phải sửa cho quy mô bằng cách sử dụng chuyển vị nghịch đảo của ma trận 3 x 3 trên. Tôi gửi ma trận bình thường của tôi để đổ bóng như một đồng phục mặc dù, do đó nó chỉ được tính một lần thay vì một lần cho mỗi đỉnh.Bạn có thể cần một thư viện toán học để làm điều này mặc dù, vì nền tảng của bạn có thể không cung cấp các chức năng để thực hiện các phép tính ma trận này. – bwroga
Điều đó có ý nghĩa. Bằng cách này tôi sử dụng GLM. – danijar