36 lines
839 B
Plaintext
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
|
|
);
|
|
}
|