diff options
Diffstat (limited to 'src/example')
-rw-r--r-- | src/example/01_dot.c | 36 | ||||
-rw-r--r-- | src/example/02_cube.c | 73 | ||||
-rw-r--r-- | src/example/03_texture.c | 60 | ||||
-rw-r--r-- | src/example/04_bloom.c | 0 | ||||
-rw-r--r-- | src/example/05_fog.c | 0 |
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 |