X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=flow.cpp;h=47cebba7918c84471583629367192795b7aff19b;hb=6b75f48005c9e4ded84ef43a25ac1f1ae5c88971;hp=8e823e71f8dc0575debf134a6bb086c13221af3b;hpb=a75370343264a46e8addeff4973c7267e8ff2146;p=nageru diff --git a/flow.cpp b/flow.cpp index 8e823e7..47cebba 100644 --- a/flow.cpp +++ b/flow.cpp @@ -16,6 +16,8 @@ #include #include +#include "flow2rgb.h" + #include #include @@ -520,40 +522,14 @@ int main(void) float dv = dense_flow[(yy * level_width + x) * 3 + 1]; float w = dense_flow[(yy * level_width + x) * 3 + 2]; - du /= w; - dv /= w; - - float angle = atan2(dv * level_width, du * level_height); - float magnitude = min(hypot(du * level_width, dv * level_height) / 20.0, 1.0); - - // HSV to RGB (from Wikipedia). Saturation is 1. - float c = magnitude; - float h = (angle + M_PI) * 6.0 / (2.0 * M_PI); - float X = c * (1.0 - fabs(fmod(h, 2.0) - 1.0)); - float r = 0.0f, g = 0.0f, b = 0.0f; - if (h < 1.0f) { - r = c; g = X; - } else if (h < 2.0f) { - r = X; g = c; - } else if (h < 3.0f) { - g = c; b = X; - } else if (h < 4.0f) { - g = X; b = c; - } else if (h < 5.0f) { - r = X; b = c; - } else if (h < 6.0f) { - r = c; b = X; - } else { - // h is NaN, so black is fine. - } - float m = magnitude - c; - r += m; g += m; b += m; - r = max(min(r, 1.0f), 0.0f); - g = max(min(g, 1.0f), 0.0f); - b = max(min(b, 1.0f), 0.0f); - putc(lrintf(r * 255.0f), fp); - putc(lrintf(g * 255.0f), fp); - putc(lrintf(b * 255.0f), fp); + du = (du / w) * level_width; + dv = (dv / w) * level_height; + + uint8_t r, g, b; + flow2rgb(du, dv, &r, &g, &b); + putc(r, fp); + putc(g, fp); + putc(b, fp); } } fclose(fp);