Пример #1
0
ColorWheel::ColorWheel(unsigned n)
  : rgbs_(n)
{
  for(unsigned i=0; i<n; ++i)
    heatmap(((float)i)/n, 0, 1, &rgbs_[i].r, &rgbs_[i].g, &rgbs_[i].b);
  std::random_shuffle(rgbs_.begin(), rgbs_.end());
}
Пример #2
0
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=
// Class WaterfallPlot
//
// @class   WaterfallPlot
// @author  David Witten
// @date    $(Date)
// @file    $(CurrentFileName).$(CurrentFileExt)
// @brief
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=
PlotWaterfall::PlotWaterfall(wxFrame* parent, bool graticule, int colour): PlotPanel(parent)
{

    for(int i = 0; i < 255; i++)
    {
        m_heatmap_lut[i] = heatmap((float)i, 0.0, 255.0);
    }
    m_graticule     = graticule;
    m_colour        = colour;
    m_Bufsz         = GetMaxClientSize();
    m_newdata       = false;
    m_firstPass     = true;
    m_line_color    = 0;
    SetLabelSize(10.0);

    m_pBmp = NULL;
    m_max_mag = MAX_MAG_DB;
    m_min_mag = MIN_MAG_DB;
}
Пример #3
0
int HostRender::run(RaytracingContext& context,
                    PixelFunc const& render_pixel,
                    int kill_timeout_seconds,
                    std::function<void()> const& render_overlay)
{
    auto render_pixel_wrapper = [&](int x, int y, RaytracingContext const &ctx, ThreadLocalData *tld)
                                -> glm::vec3
    {
        RenderData data(context, tld);

        switch(context.params.render_mode) {

        case RaytracingParameters::RECURSIVE:
            if (context.params.stereo)
            {
                data.camera_mode = Camera::StereoLeft;
                auto const left = render_pixel(x, y, ctx, data);
                data.camera_mode = Camera::StereoRight;
                auto const right = render_pixel(x, y, ctx, data);
                return combine_stereo(left, right);
            }
            else
            {
                return render_pixel(x, y, ctx, data);
            }

        case RaytracingParameters::DESATURATE:
            if (context.params.stereo)
            {
                data.camera_mode = Camera::StereoLeft;
                auto const left = render_pixel(x, y, ctx, data);
                data.camera_mode = Camera::StereoRight;
                auto const right = render_pixel(x, y, ctx, data);
                return combine_stereo(desaturate(left), desaturate(right));
            }
            else
            {
                return desaturate(render_pixel(x, y, ctx, data));
            }

        case RaytracingParameters::NUM_RAYS:
            render_pixel(x, y, ctx, data);
            return heatmap(float(data.num_cast_rays - 1) / 64.0f);
        case RaytracingParameters::NORMAL:
            render_pixel(x, y, ctx, data);
            return glm::normalize(data.isect.normal) * 0.5f + glm::vec3(0.5f);
        case RaytracingParameters::TIME: {
            Timer timer;
            timer.start();
            if(context.params.render_mode == RaytracingParameters::TIME) {
                auto const color = render_pixel(x, y, ctx, data);
                (void) color;
            }
            timer.stop();
            return heatmap(static_cast<float>(timer.getElapsedTimeInMilliSec()) * context.params.scale_render_time);
        }
        default: /* should never happen */
            return glm::vec3(1, 0, 1);
        }
    };

    if (context.params.interactive)
    {
        return run_interactive(context, render_pixel_wrapper, render_overlay);
    }
    else
    {
        return run_noninteractive(context, render_pixel_wrapper,
                                  kill_timeout_seconds);
    }
}
Пример #4
0
int HostRender::run(RaytracingContext& context, 
			   PixelFunc const& render_pixel, 
			   int kill_timeout_seconds,
			   std::function<void()> const& render_overlay)
{
	auto render_pixel_wrapper = [&](int x, int y, RaytracingContext const &ctx, ThreadLocalData *tld)
		-> glm::vec3
	{
		RenderData data(context, tld);

		switch(context.params.render_mode) {

		case RaytracingParameters::RECURSIVE:
			if (context.params.stereo)
			{
				data.camera_mode = Camera::StereoLeft;
				auto const left = render_pixel(x, y, ctx, data);
				data.camera_mode = Camera::StereoRight;
				auto const right = render_pixel(x, y, ctx, data);
				return combine_stereo(left, right);
			}
			else
			{
				return render_pixel(x, y, ctx, data);
			}

		case RaytracingParameters::DESATURATE:
			if (context.params.stereo)
			{
				data.camera_mode = Camera::StereoLeft;
				auto const left = render_pixel(x, y, ctx, data);
				data.camera_mode = Camera::StereoRight;
				auto const right = render_pixel(x, y, ctx, data);
				return combine_stereo(desaturate(left), desaturate(right));
			}
			else
			{
				return desaturate(render_pixel(x, y, ctx, data));
			}

		case RaytracingParameters::NUM_RAYS:
			render_pixel(x, y, ctx, data);
			return heatmap(float(data.num_cast_rays - 1) / 64.0f);
		case RaytracingParameters::NORMAL:
			render_pixel(x, y, ctx, data);
			if (context.params.normal_mapping)
				return glm::normalize(data.isect.shading_normal) * 0.5f + glm::vec3(0.5f);
			else
				return glm::normalize(data.isect.normal) * 0.5f + glm::vec3(0.5f);
		case RaytracingParameters::BVH_TIME:
		case RaytracingParameters::TIME: {
			Timer timer;
			timer.start();
			if(context.params.render_mode == RaytracingParameters::TIME) {
				auto const color = render_pixel(x, y, ctx, data);
				(void) color;
			}
			else {
				Ray ray = createPrimaryRay(data, float(x) + 0.5f, float(y) + 0.5f);
				for(auto& o: context.scene->objects) {
					BVH *bvh = dynamic_cast<BVH *>(o.get());
					if(bvh) {
						bvh->intersect(ray, nullptr);
					}
				}
			}
			timer.stop();
			return heatmap(static_cast<float>(timer.getElapsedTimeInMilliSec()) * context.params.scale_render_time);
		}
		case RaytracingParameters::DUDV: {
			auto const color = render_pixel(x, y, ctx, data);
			(void) color;
			if(!data.isect.isValid())
				return glm::vec3(0.0);
			return heatmap(std::log(1.0f + 5.0f * glm::length(data.isect.dudv)));
		}
		case RaytracingParameters::AABB_INTERSECT_COUNT: {
        	Ray ray = createPrimaryRay(data, float(x) + 0.5f, float(y) + 0.5f);
			glm::vec3 accum(0.0f);
			for(auto& o: context.scene->objects) {
				auto *bvh = dynamic_cast<BVH *>(o.get());
				if(bvh) {
					accum += bvh->intersect_count(ray, 0, 0) * 0.02f;
				}
			}
			return accum;
		}
		default: /* should never happen */
			return glm::vec3(1, 0, 1);
		}
	};

	if (context.params.interactive)
	{
		return run_interactive(context, render_pixel_wrapper, render_overlay);
	}
	else
	{
		return run_noninteractive(context, render_pixel_wrapper, 
			kill_timeout_seconds);
	}
}