Ignore:
Timestamp:
Apr 16, 2013, 12:52:20 AM (11 years ago)
Author:
ldelgass
Message:

Nanovis refactoring to fix problems with scaling and multiple results.
Do rendering in world space to properly place and scale multiple data sets.
Also fix flows to reduce resets of animations. More work toward removing
Cg dependency. Fix panning to convert viewport coords to world coords.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/LIC.cpp

    r3612 r3630  
    2424using namespace vrmath;
    2525
    26 LIC::LIC(int size, int width, int height, int axis,
     26LIC::LIC(FlowSliceAxis axis,
    2727         float offset) :
    28     _width(width),
    29     _height(height),
    30     _size(size),
     28    _width(NPIX),
     29    _height(NPIX),
     30    _size(NMESH),
    3131    _scale(1.0f, 1.0f, 1.0f),
    3232    _origin(0, 0, 0),
     
    4141    _disListID(0),
    4242    _vectorFieldId(0),
    43     _activate(false)
    44 {
    45     _sliceVector = new float[_size*_size*4];
     43    _visible(false)
     44{
     45    _sliceVector = new float[_size * _size * 4];
    4646    memset(_sliceVector, 0, sizeof(float) * _size * _size * 4);
    4747
     
    104104
    105105    _renderVelShader = new Shader();
    106     _renderVelShader->loadFragmentProgram("render_vel.cg", "main");
     106    _renderVelShader->loadFragmentProgram("render_vel.cg");
    107107
    108108    makePatterns();
     
    178178}
    179179
    180 void LIC::makeMagnitudes()
     180void
     181LIC::makeMagnitudes()
    181182{
    182183    GLubyte mag[NMESH][NMESH][4];
     
    246247
    247248    switch (_axis) {
    248     case 0:
     249    case AXIS_X:
    249250        _renderVelShader->setFPParameter3f("projection_vector", 0., 1., 1.);
    250251        break;
    251     case 1:
     252    case AXIS_Y:
    252253        _renderVelShader->setFPParameter3f("projection_vector", 1., 0., 1.);
    253254        break;
    254255    default:
    255     case 2:
     256    case AXIS_Z:
    256257        _renderVelShader->setFPParameter3f("projection_vector", 1., 1., 0.);
    257258        break;
     
    261262    {
    262263        switch (_axis) {
    263         case 0:
     264        case AXIS_X:
    264265            glTexCoord3f(_offset, 0., 0.); glVertex2f(0.,    0.);
    265266            glTexCoord3f(_offset, 1., 0.); glVertex2f(_size, 0.);
     
    267268            glTexCoord3f(_offset, 0., 1.); glVertex2f(0.,    _size);
    268269            break;
    269         case 1:
     270        case AXIS_Y:
    270271            glTexCoord3f(0., _offset, 0.); glVertex2f(0.,    0.);
    271272            glTexCoord3f(1., _offset, 0.); glVertex2f(_size, 0.);
     
    273274            glTexCoord3f(0., _offset, 1.); glVertex2f(0.,    _size);
    274275            break;
    275         case 2:
     276        case AXIS_Z:
    276277            glTexCoord3f(0., 0., _offset); glVertex2f(0.,    0.);
    277278            glTexCoord3f(1., 0., _offset); glVertex2f(_size, 0.);
     
    428429LIC::render()
    429430{
    430     if (_vectorFieldId == 0) {
     431    if (_vectorFieldId == 0 || !_visible) {
    431432        return;
    432433    }
     
    451452    glBegin(GL_QUADS);
    452453    switch (_axis) {
    453     case 0:
     454    case AXIS_X:
    454455        glNormal3f(1, 0, 0);
    455456        glTexCoord2f(0, 0); glVertex3f(_offset, 0, 0);
     
    458459        glTexCoord2f(0, 1); glVertex3f(_offset, 0, 1);
    459460        break;
    460     case 1:
     461    case AXIS_Y:
    461462        glNormal3f(0, 1, 0);
    462463        glTexCoord2f(0, 0); glVertex3f(0, _offset, 0);
     
    465466        glTexCoord2f(0, 1); glVertex3f(0, _offset, 1);
    466467        break;
    467     case 2:
     468    case AXIS_Z:
    468469        glNormal3f(0, 0, 1);
    469470        glTexCoord2f(0, 0); glVertex3f(0, 0, _offset);
     
    483484
    484485void
    485 LIC::setVectorField(unsigned int texID, const Vector3f& origin,
    486                       float scaleX, float scaleY, float scaleZ, float max)
    487 {
    488     TRACE("LIC: vector field is assigned [%d]", texID);
    489     _vectorFieldId = texID;
    490     _origin = origin;
    491     _scale = Vector3f(scaleX, scaleY, scaleZ);
    492     _max = max;
     486LIC::setVectorField(Volume *volume)
     487{
     488    TRACE("LIC: vector field is assigned [%d]", volume->textureID());
     489
     490    _vectorFieldId = volume->textureID();
     491    Vector3f bmin, bmax;
     492    volume->getBounds(bmin, bmax);
     493    _origin = bmin;
     494    _scale.set(bmax.x-bmin.x, bmax.y-bmin.y, bmax.z-bmin.z);
     495    _max = volume->wAxis.max();
    493496
    494497    makePatterns();
     
    507510    //TRACE("(xi yi) = (%d %d), ", xi, yi);
    508511   switch (_axis) {
    509    case 0:
     512   case AXIS_X:
    510513       vx = _sliceVector[4 * (xi+yi*_size)+2];
    511514       vy = _sliceVector[4 * (xi+yi*_size)+1];
    512515       break;
    513    case 1:
     516   case AXIS_Y:
    514517       vx = _sliceVector[4 * (xi+yi*_size)];
    515518       vy = _sliceVector[4 * (xi+yi*_size)+2];
    516519       break;
    517    case 2:
     520   case AXIS_Z:
    518521   default:
    519522       vx = _sliceVector[4 * (xi+yi*_size)];
     
    537540
    538541void
    539 LIC::setOffset(float offset)
     542LIC::setSlicePosition(float offset)
    540543{
    541544    _offset = offset;
     
    543546}
    544547
    545 void LIC::setAxis(int axis)
     548void LIC::setSliceAxis(FlowSliceAxis axis)
    546549{
    547550    _axis = axis;
Note: See TracChangeset for help on using the changeset viewer.