summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/cube.c136
-rw-r--r--examples/kothd.pngbin0 -> 108696 bytes
2 files changed, 136 insertions, 0 deletions
diff --git a/examples/cube.c b/examples/cube.c
new file mode 100644
index 0000000..240c387
--- /dev/null
+++ b/examples/cube.c
@@ -0,0 +1,136 @@
+#include <assert.h>
+
+#include "../sponge.h"
+#define SPONGE_EXAMPLE_IMPLEMENTATION
+#define SPONGE_EXAMPLE_INIT_DEFINED
+#define SPONGE_EXAMPLE_MOUSE_MOVE_DEFINED
+#define SPONGE_EXAMPLE_DRAW_FRAME_3D_DEFINED
+#include "../example.h"
+
+#include "../stb_image.h"
+
+#define FOV (60.0f / PI * 2.0f)
+#define DISTANCE (10.0f)
+
+static sponge_Texture texture;
+static int32_t mouse_x;
+static int32_t mouse_y;
+
+void init() {
+ unsigned char *data = stbi_load("examples/kothd.png", &texture.width, &texture.height, NULL, 4);
+ if (!data) {
+ printf("%s\n", stbi_failure_reason());
+ assert(0);
+ }
+
+ texture.stride_pixels = texture.width;
+ texture.pixels = (sponge_Color32 *)data; // NOTE(kard): be careful if changing following loop
+
+ // converting from stbi's RGBA
+ for (size_t i = 0; i < texture.width * texture.height; i++) {
+ sponge_Color32 result;
+ result.r = data[i * 4 + 0];
+ result.g = data[i * 4 + 1];
+ result.b = data[i * 4 + 2];
+ result.a = data[i * 4 + 3];
+ texture.pixels[i] = result;
+ }
+}
+
+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));
+
+ // NOTE(kard): these directions are not intuitive at all, but it works
+ sponge_Vec3 positions[] = {
+ // front
+ sponge_vec3_make( 0.5f, 0.5f, -0.5f),
+ sponge_vec3_make(-0.5f, 0.5f, -0.5f),
+ sponge_vec3_make( 0.5f, -0.5f, -0.5f),
+ sponge_vec3_make(-0.5f, -0.5f, -0.5f),
+ // right
+ sponge_vec3_make(-0.5f, 0.5f, -0.5f),
+ sponge_vec3_make(-0.5f, 0.5f, 0.5f),
+ sponge_vec3_make(-0.5f, -0.5f, -0.5f),
+ sponge_vec3_make(-0.5f, -0.5f, 0.5f),
+ // left
+ sponge_vec3_make( 0.5f, 0.5f, 0.5f),
+ sponge_vec3_make( 0.5f, 0.5f, -0.5f),
+ sponge_vec3_make( 0.5f, -0.5f, 0.5f),
+ sponge_vec3_make( 0.5f, -0.5f, -0.5f),
+ // top
+ sponge_vec3_make( 0.5f, 0.5f, 0.5f),
+ sponge_vec3_make(-0.5f, 0.5f, 0.5f),
+ sponge_vec3_make( 0.5f, 0.5f, -0.5f),
+ sponge_vec3_make(-0.5f, 0.5f, -0.5f),
+ // bottom
+ sponge_vec3_make(-0.5f, -0.5f, 0.5f),
+ sponge_vec3_make( 0.5f, -0.5f, 0.5f),
+ sponge_vec3_make(-0.5f, -0.5f, -0.5f),
+ sponge_vec3_make( 0.5f, -0.5f, -0.5f),
+ // there is no back
+ };
+ // NOTE(kard): do not ask any questions
+ sponge_Vec2 uvs[] = {
+ // front
+ sponge_vec2_make(0.33f, 0.33f),
+ sponge_vec2_make(0.66f, 0.33f),
+ sponge_vec2_make(0.33f, 0.66f),
+ sponge_vec2_make(0.66f, 0.66f),
+ // right
+ sponge_vec2_make(0.66f, 0.33f),
+ sponge_vec2_make(1.00f, 0.00f),
+ sponge_vec2_make(0.66f, 0.66f),
+ sponge_vec2_make(1.00f, 1.00f),
+ // left
+ sponge_vec2_make(0.00f, 0.00f),
+ sponge_vec2_make(0.33f, 0.33f),
+ sponge_vec2_make(0.00f, 1.00f),
+ sponge_vec2_make(0.33f, 0.66f),
+ // top
+ sponge_vec2_make(0.00f, 0.00f),
+ sponge_vec2_make(1.00f, 0.00f),
+ sponge_vec2_make(0.33f, 0.33f),
+ sponge_vec2_make(0.66f, 0.33f),
+ // bottom
+ sponge_vec2_make(0.00f, 1.00f),
+ sponge_vec2_make(1.00f, 1.00f),
+ sponge_vec2_make(0.33f, 0.66f),
+ sponge_vec2_make(0.66f, 0.66f),
+ };
+
+ int32_t triangles[] = {
+ // front
+ 0, 1, 2,
+ 2, 1, 3,
+ // right
+ 4, 5, 6,
+ 6, 5, 7,
+ // left
+ 8, 9, 10,
+ 10, 9, 11,
+ // top
+ 12, 13, 14,
+ 14, 13, 15,
+ // bottom
+ 16, 17, 18,
+ 18, 17, 19,
+ };
+
+
+ sponge_Mat4 model = sponge_mat4_identity();
+
+ float rot_y = (float)mouse_x / (float)c.width * PI * 2.0f;
+ float rot_x = ((float)mouse_y / (float)c.height * PI) - (PI * 0.5f);
+ sponge_Mat4 view = sponge_mat4_identity();
+ view = sponge_mat4_mul_mat4(view, sponge_mat4_rotate(rot_x, rot_y, 0.0f));
+ view = sponge_mat4_mul_mat4(view, sponge_mat4_translate(0.0f, 0.0f, -5.0f));
+
+ sponge_Mat4 proj = sponge_mat4_projection(FOV, (float)c.width / (float)c.height, 1.0f, 100.0f);
+
+ sponge_draw_mesh_uv(c, depths, model, view, proj, positions, uvs, triangles, 30, texture);
+}
diff --git a/examples/kothd.png b/examples/kothd.png
new file mode 100644
index 0000000..698ca46
--- /dev/null
+++ b/examples/kothd.png
Binary files differ