# HG changeset patch # User John Tsiombikas # Date 1334445733 -10800 # Node ID 6ca076bf50847958daaa7697c5aa2ae8eb6fb105 # Parent e7c006b774ed01ebd874f1e1643d1cff0bd047ed sucks ass diff -r e7c006b774ed -r 6ca076bf5084 sdr/volray.p.glsl --- a/sdr/volray.p.glsl Sun Apr 15 00:11:38 2012 +0300 +++ b/sdr/volray.p.glsl Sun Apr 15 02:22:13 2012 +0300 @@ -125,6 +125,7 @@ return ray; } +#ifdef USE_AABB ISect intersect_aabb(Ray ray, AABBox aabb) { ISect res; @@ -172,7 +173,7 @@ res.hit = true; return res; } - +#else ISect intersect_sphere(Ray ray, float rad) { @@ -193,11 +194,12 @@ float t0 = (-b + sqrt_d) / (2.0 * a); float t1 = (-b - sqrt_d) / (2.0 * a); - res.t0 = min(t0, t1); - res.t1 = max(t0, t1); + res.t0 = max(min(t0, t1), 0.0); + res.t1 = max(max(t0, t1), 0.0); res.hit = true; /*res.pos = ray.origin + ray.dir * res.t0; res.normal = normalize(res.pos);*/ return res; } +#endif diff -r e7c006b774ed -r 6ca076bf5084 src/ui_xferview.cc --- a/src/ui_xferview.cc Sun Apr 15 00:11:38 2012 +0300 +++ b/src/ui_xferview.cc Sun Apr 15 02:22:13 2012 +0300 @@ -1,6 +1,9 @@ +#include #include "ui_xferview.h" #include "volray.h" +static int prev_x, prev_y; + XFerGLView::XFerGLView(QGLWidget *share_widget) : QGLWidget(QGLFormat(QGL::DoubleBuffer), 0, share_widget) { @@ -24,3 +27,25 @@ { volray_draw_xfer(); } + +void XFerGLView::mousePressEvent(QMouseEvent *ev) +{ + prev_x = ev->x(); + prev_y = ev->y(); +} + +void modxfer(int dx, int dy, int max_x, int max_y); + +void XFerGLView::mouseMoveEvent(QMouseEvent *ev) +{ + int x = ev->x(); + int y = ev->y(); + + int dx = x - prev_x; + int dy = y - prev_y; + + prev_x = x; + prev_y = y; + + modxfer(dx, dy, width(), height()); +} diff -r e7c006b774ed -r 6ca076bf5084 src/ui_xferview.h --- a/src/ui_xferview.h Sun Apr 15 00:11:38 2012 +0300 +++ b/src/ui_xferview.h Sun Apr 15 02:22:13 2012 +0300 @@ -11,6 +11,9 @@ void resizeGL(int xsz, int ysz); void paintGL(); + void mousePressEvent(QMouseEvent *ev); + void mouseMoveEvent(QMouseEvent *ev); + public: XFerGLView(QGLWidget *share_widget = 0); diff -r e7c006b774ed -r 6ca076bf5084 src/volray.cc --- a/src/volray.cc Sun Apr 15 00:11:38 2012 +0300 +++ b/src/volray.cc Sun Apr 15 02:22:13 2012 +0300 @@ -259,20 +259,6 @@ glEnd(); glDisable(GL_TEXTURE_1D); - - glLineWidth(2.0); - glBegin(GL_LINE_LOOP); - /*if(uimode == UIMODE_XFER) { - glColor3f(1, 0, 0); - } else {*/ - glColor3f(0, 0, 1); - //} - glVertex2f(0, 0); - glVertex2f(1, 0); - glVertex2f(1, 1); - glVertex2f(0, 1); - glEnd(); - glPopMatrix(); } @@ -342,6 +328,21 @@ prev_y = y; } +void modxfer(int dx, int dy, int max_x, int max_y) +{ + if(!dx && !dy) + return; + + xfer_mean += dx / (float)max_x; + xfer_sdev += 0.5 * dy / (float)max_y; + + xfer_mean = xfer_mean < 0.0 ? 0.0 : (xfer_mean > 1.0 ? 1.0 : xfer_mean); + xfer_sdev = xfer_sdev < 0.0 ? 0.0 : (xfer_sdev > 1.0 ? 1.0 : xfer_sdev); + + xfertex_needs_recalc = true; + post_redisplay(); +} + void volray_motion(int x, int y) { int dx = x - prev_x; @@ -351,16 +352,6 @@ /*switch(uimode) { case UIMODE_XFER: - if(dx || dy) { - xfer_mean += dx / (float)win_xsz; - xfer_sdev += 0.5 * dy / (float)win_ysz; - - xfer_mean = xfer_mean < 0.0 ? 0.0 : (xfer_mean > 1.0 ? 1.0 : xfer_mean); - xfer_sdev = xfer_sdev < 0.0 ? 0.0 : (xfer_sdev > 1.0 ? 1.0 : xfer_sdev); - - xfertex_needs_recalc = true; - post_redisplay(); - } break; case UIMODE_CURSOR: