1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include "../sponge.h"
#define SPONGE_EXAMPLE_IMPLEMENTATION
#define SPONGE_EXAMPLE_MOUSE_MOVE_DEFINED
#define SPONGE_EXAMPLE_DRAW_FRAME_3D_DEFINED
#include "example.h"
#define FOV (60.0f / PI * 2.0f)
static int32_t mouse_x;
static int32_t mouse_y;
void mouse_move(int32_t x, int32_t y) {
mouse_x = x;
mouse_y = y;
}
void draw_frame_3d(sponge_Texture c, float *depths) {
sponge_clear_3d(c, depths, sponge_color32_make(0xFF000000));
sponge_Vec3 positions[] = {
sponge_vec3_make(-0.5f, 0.5f, 0.0f),
sponge_vec3_make( 0.5f, 0.5f, 0.0f),
sponge_vec3_make(-0.5f, -0.5f, 0.0f),
sponge_vec3_make( 0.5f, -0.5f, 0.0f),
};
sponge_Color32 colors[] = {
sponge_color32_make(0xFF00FFFF),
sponge_color32_make(0xFFFFFFFF),
sponge_color32_make(0xFF0000FF),
sponge_color32_make(0xFFFF00FF),
};
int32_t triangles[] = {
0, 1, 2,
2, 1, 3,
};
sponge_Mat4 model = sponge_mat4_identity();
model = sponge_mat4_mul_mat4(model, sponge_mat4_rotate(
(float)(mouse_y - ((int32_t)c.height / 2)) / (float)c.height * PI,
(float)(mouse_x - ((int32_t)c.width / 2)) / (float)c.width * PI,
0.0f));
model = sponge_mat4_mul_mat4(model, sponge_mat4_translate(0.0f, 0.0f, -5.0f));
sponge_Mat4 view = sponge_mat4_identity();
sponge_Mat4 proj = sponge_mat4_projection(FOV, (float)c.width / (float)c.height, 1.0f, 10.0f);
sponge_draw_mesh_col(c, depths, model, view, proj, positions, colors, triangles, 6);
}
|