#include "fb/chfb.hpp" #include #include #include "math/vector.hpp" #include "math/quat.hpp" #include "o3d/camera.hpp" using namespace engine::fb; using engine::math::Vector4; CharacterFrameBuffer::CharacterFrameBuffer(unsigned int w, unsigned int h) { resize(w, h); } void CharacterFrameBuffer::resize(unsigned int w, unsigned int h) { this->w = w; this->h = h; chars_vector.resize(w * h); clear(); } void CharacterFrameBuffer::clear() { std::fill(chars_vector.begin(), chars_vector.end(), ' '); } // taken from https://stackoverflow.com/a/74186686 char brightness_chars[] = " `.-':_,^=;><+!rc*/z?sLTv)J7(|Fi{C}fI31tlu[neoZ5Yxjya]2ESwqkP6h9d4VpOGbUAKXHm8RD#$Bg0MNWQ%&@"; void CharacterFrameBuffer::draw_point(int x, int y, const Vector4& point) { float light = .2126f * point.x + .7152f * point.y + .0722f * point.z; std::uint32_t c = (int) (light * static_cast(sizeof(brightness_chars) - 1)); chars_vector[x + y * w] = brightness_chars[c]; }