Mikemon/assets/shader/common.slang
2025-03-11 09:16:17 +01:00

36 lines
839 B
Plaintext

#define NEAR_PLANE (0.01f)
[[vk::binding(0, 1)]]
cbuffer constants {
float aspect_ratio;
float fovy_degrees;
float camera_x;
float camera_y;
float camera_distance;
float camera_tilt;
uint map_width;
};
float4x4 projection(float fovy, float aspect, float near) {
float g = 1.0 / tan(fovy * 0.5);
return {
g / aspect, 0, 0, 0,
0, g, 0, 0,
0, 0, 0, near,
0, 0, 1, 0,
};
}
float4x4 view(float3 player_pos, float tilt, float camera_distance) {
float s, c;
sincos(-tilt, s, c);
return float4x4(
1, 0, 0, -player_pos.x,
0, c, s, c * -player_pos.y,
0, -s, c, s * player_pos.y + camera_distance,
0, 0, 0, 1
);
}