diff options
author | chai <chaifix@163.com> | 2020-07-19 17:10:15 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-07-19 17:10:15 +0800 |
commit | 20ab601ffbb5a42c1cca21c44211c58bb129076f (patch) | |
tree | 7bfe918eae323dea936c0d6ffe779558dd84682f /src/gizmo/visualize.c | |
parent | 5b89a0fab0a46764c92979797681bf170125a7da (diff) |
+misc
Diffstat (limited to 'src/gizmo/visualize.c')
-rw-r--r-- | src/gizmo/visualize.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/gizmo/visualize.c b/src/gizmo/visualize.c new file mode 100644 index 0000000..485e6c6 --- /dev/null +++ b/src/gizmo/visualize.c @@ -0,0 +1,76 @@ +#include "visualize.h" +#include "../shaders/common/core.h" + +// varying +#define _color reg_v4_00 +static void vert( Vertex* in, Vec4* clipcoord) { + static Vec4 p; p.xyz = in->position; p.w = 1; + object2clip(&p, clipcoord); + color_tocolor32(in->color, _color); +} +static bool frag( Color32* color) { + *color = *_color; + return 1; +} +static Program line_shader = { + vert, frag, + VARYING_V4_00 +}; + +void draw_tbn(Mesh* mesh, uint mask, int length) { + Color COLOR_RED = 0xffff0000; + Color COLOR_GREEN = 0xff00ff00; + Color COLOR_BLUE = 0xff0000ff; + Vertex* vert_list = NULL; + int vert_index = 0; + int* lines = NULL; + for (int i = 0; i < mesh->vert_count; ++i) { + Vertex* vert = &mesh->vertices[i]; + Vec3 normal = vert->normal; + Vec4 tangent = vert->tangent; + //Vec4 tangent = vec4(1,0,0,1); + if (mask & VISUAL_NORMAL) + { + Vertex v0 = { vert_index++, vert->position, vec3zero, vec4zero, vec2zero, COLOR_BLUE }; + Vertex v1 = { vert_index++, vec3_plus(vert->position, vec3_scale(normal, length)), vec3zero, vec4zero, vec2zero, COLOR_BLUE }; + darray_push(vert_list, v0); + darray_push(vert_list, v1); + darray_push(lines, vert_index - 2); + darray_push(lines, vert_index - 1); + } + if (mask & VISUAL_TANGNET) + { + Vertex v0 = { vert_index++, vert->position, vec3zero, vec4zero, vec2zero, COLOR_RED }; + Vertex v1 = { vert_index++, vec3_plus(vert->position, vec3_scale(tangent.xyz, length)), vec3zero, vec4zero, vec2zero, COLOR_RED }; + darray_push(vert_list, v0); + darray_push(vert_list, v1); + darray_push(lines, vert_index - 2); + darray_push(lines, vert_index - 1); + } + if (mask & VISUAL_BITANGENT) + { + Vec3 bitangent = vec3_cross(normal, tangent.xyz); + Vertex v0 = { vert_index++, vert->position, vec3zero, vec4zero, vec2zero, COLOR_GREEN }; + Vertex v1 = { vert_index++, vec3_plus(vert->position, vec3_scale(bitangent, length)), vec3zero, vec4zero, vec2zero, COLOR_GREEN }; + darray_push(vert_list, v0); + darray_push(vert_list, v1); + darray_push(lines, vert_index - 2); + darray_push(lines, vert_index - 1); + } + } + ssr_bindvertices(vert_list, darray_size(vert_list)); + ssr_bindindices(lines, darray_size(lines)* 0.5f); + ssr_matrixmode(MATRIX_MODEL); + ssr_loadidentity(); + ssr_useprogram(&line_shader); + //ssr_disable(ENABLE_DEPTHTEST); + ssr_draw(PRIMITIVE_LINE); + ssr_unuseprogram(); + ssr_enable(ENABLE_WRITEDEPTH); + darray_free(vert_list); + darray_free(lines); +} + +void draw_wire(Mesh* mesh) { + +}
\ No newline at end of file |