summaryrefslogtreecommitdiff
path: root/src/example
diff options
context:
space:
mode:
Diffstat (limited to 'src/example')
-rw-r--r--src/example/01_dot.c36
-rw-r--r--src/example/02_cube.c73
-rw-r--r--src/example/03_texture.c60
-rw-r--r--src/example/04_bloom.c0
-rw-r--r--src/example/05_fog.c0
5 files changed, 169 insertions, 0 deletions
diff --git a/src/example/01_dot.c b/src/example/01_dot.c
new file mode 100644
index 0000000..0a88084
--- /dev/null
+++ b/src/example/01_dot.c
@@ -0,0 +1,36 @@
+#include "example.h"
+#include "../core/rasterizer.h"
+
+Vec3 pos = { 0, 0, 2 }, target = { 0,0,-1 }, up = { 0, 1, 0 };
+
+float dot[] = { 0, 0, -2 };
+
+void onloaddot(void* data) {
+
+}
+
+void oneventdot(void* data) {
+ SDL_Event* e = (SDL_Event*)data;
+}
+
+void onupdatedot(void*data) {
+ uint dt = *(uint*)data;
+ ssr_matrixmode(MATRIX_VIEW);
+ ssr_lookat(&pos, &target, &up);
+ ssr_matrixmode(MATRIX_PROJECTION);
+}
+
+float j = 0;
+
+void ondrawdot(void*data) {
+ ssr_clearcolor(0xffffffff);
+
+ //for (int i = -50; i < 200; ++i) {
+ // ssr_putpoint(i * sin(j += 0.1f), 300 * cos(j), ssr_color(0xff, 0, 0xff, 0));
+ //}
+
+ ssrR_putline(-100, 0, 100, 200, 0xffff0000);
+
+// printf("%u\n", (UINT_MAX * (double)0.5F));
+
+}
diff --git a/src/example/02_cube.c b/src/example/02_cube.c
new file mode 100644
index 0000000..caedd64
--- /dev/null
+++ b/src/example/02_cube.c
@@ -0,0 +1,73 @@
+#include "example.h"
+
+/*Õý·½Ìå*/
+Vec3 verts[] = {
+ // front face
+ {1, 1, 1}, {-1, 1, 1}, {-1, -1, 1}, {1, -1, 1},
+ // back face
+ {1, 1, -1}, {-1, 1, -1}, {-1, -1, -1}, {1, -1, -1},
+};
+
+Color colors[] = {
+ 0xffff0000, 0xff00ff00, 0xffff00ff, 0xff00ffff,
+ 0xff0000ff, 0xff000000, 0xffffff00, 0xffffffff,
+};
+
+int cube[] = {
+ 0, 2, 1, 0, 3, 2,
+ 1, 2, 5, 2, 6, 5,
+ 4, 5, 6, 4, 6, 7,
+ 0, 4, 7, 0, 7, 3,
+ 0, 1, 4, 1, 5, 4,
+ 2, 3, 6, 3, 7, 6
+};
+Mat4 m;
+void onloadcube(void* data) {
+}
+
+void oneventcube(void* data) {
+ SDL_Event* e = (SDL_Event*)data;
+}
+
+float _t = 0;
+
+void onupdatecube(void*data) {
+ uint dt = *(uint*)data;
+ ssr_matrixmode(MATRIX_MODEL);
+ ssr_loadidentity();
+ ssr_translate(0, 0, -3);
+ ssr_rotate(360 * sin(_t += 0.001f), 1, 1, 1);
+ ssr_matrixmode(MATRIX_PROJECTION);
+ ssr_loadidentity();
+ ssr_perspective(100 + 20 * sin(_t * 10), 1.25f, -0.1f, -100);
+ ssr_matrixmode(MATRIX_VIEW);
+ ssr_loadidentity();
+ Vec3 pos = { 0,0,0 }, target = { 0,0,-1 }, up = { 0,1,0 };
+ ssr_lookat(&pos, &target, &up);
+ ssr_getmvp(&m);
+}
+
+void ondrawcube(void*data) {
+ ssr_clearcolor(0);
+ Vec2 proj[8];
+
+ for (int i = 0; i < 8; ++i) {
+ Vec4 v = { verts[i].x, verts[i].y ,verts[i].z ,1 }, temp;
+ mat4_applytovec4(&m, &v, &temp);
+ temp.x /= temp.w;
+ temp.y /= temp.w;
+ temp.z /= temp.w;
+ //vec4_print(&temp);
+ proj[i].x = temp.x;
+ proj[i].y = temp.y;
+ }
+ for (int j = 1; j < sizeof(cube) / sizeof(int); ++j) {
+ int fromx = proj[cube[j]].x * 250.f + 250, fromy = 200 - proj[cube[j]].y * 200.f;
+ int tox = proj[cube[j - 1]].x * 250.f + 250, toy = 200 - proj[cube[j - 1]].y * 200.f;
+ ssrR_putline(fromx, fromy , tox, toy, 0xffff0000);
+ }
+
+ Vec2 v1 = { 0, 0 }, v2 = { 3, 1 }, v3 = {1, 5};
+ float area = ssrR_area(&v1, &v2, &v3);
+ printf("%f\n", area);
+}
diff --git a/src/example/03_texture.c b/src/example/03_texture.c
new file mode 100644
index 0000000..fb5f0f2
--- /dev/null
+++ b/src/example/03_texture.c
@@ -0,0 +1,60 @@
+#include "example.h"
+
+static int cube[] = {
+ 0, 1, 2, 0, 2, 3,
+ 1, 5, 2, 2, 5, 6,
+ 4, 6, 5, 4, 7, 6,
+ 0, 3, 7, 0, 7, 4,
+ 0, 4, 1, 1, 4, 5,
+ 2, 6, 3, 3, 6, 7
+};
+
+static Vert verts[] = {
+ {0, {1, 1, 1}, zerovec3, zerovec3, zerovec2, 0xffff0000},
+ {1, {-1, 1, 1}, zerovec3, zerovec3, zerovec2,0xff00ff00},
+ {2, {-1, -1, 1}, zerovec3, zerovec3, zerovec2, 0xff0000ff},
+ {3, {1, -1, 1}, zerovec3, zerovec3, zerovec2, 0xffff00ff},
+ {4, {1, 1, -1}, zerovec3, zerovec3, zerovec2, 0xffaa28aa},
+ {5, {-1, 1, -1}, zerovec3, zerovec3, zerovec2,0xffFFC58E},
+ {6, {-1, -1, -1}, zerovec3, zerovec3, zerovec2, 0xffA100FF},
+ {7, {1, -1, -1}, zerovec3, zerovec3, zerovec2, 0xffFAFF00},
+};
+
+extern Program ssr_built_in_shader_unlit;
+
+void onloadtexture(void* data) {
+ ssr_matrixmode(MATRIX_PROJECTION);
+ ssr_loadidentity();
+ ssr_perspective(90, 1.25f, 0.1f, 10);
+ //ssr_ortho(-5, 5, -4, 4, 0.1, 10);
+ ssr_matrixmode(MATRIX_VIEW);
+ ssr_loadidentity();
+ Vec3 p = { 0, 0, 0 }, target = { 0, 0, -1 };
+ ssr_lookat(&p, &target, &vec3up);
+
+ ssr_bindvertices(verts, 8, cube, 12);
+ ssr_useprogram(&ssr_built_in_shader_unlit);
+ ssr_enable(ENABLEMASK_BACKFACECULL);
+ ssr_enable(ENABLEMASK_DEPTHTEST);
+}
+
+void oneventtexture(void* data) {
+ SDL_Event* e = (SDL_Event*)data;
+}
+
+static float _t = 0;
+
+void onupdatetexture(void*data) {
+ uint dt = *(uint*)data;
+ ssr_matrixmode(MATRIX_MODEL);
+ ssr_loadidentity();
+ ssr_translate(0, 0, -2);
+ ssr_rotate(_t -= dt / 50.f, 1, 1, 1);
+}
+
+void ondrawtexture(void*data) {
+ ssr_clearcolor(0x00);
+ ssr_cleardepth();
+
+ ssr_draw(PRIMITIVE_TRIANGLE);
+}
diff --git a/src/example/04_bloom.c b/src/example/04_bloom.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/example/04_bloom.c
diff --git a/src/example/05_fog.c b/src/example/05_fog.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/example/05_fog.c