Ignore:
Timestamp:
Dec 22, 2014, 7:18:59 AM (5 years ago)
Author:
ldelgass
Message:

Merge serveral changes from trunk. Does not include threading, world space
changes, etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • nanovis/branches/1.1/VelocityArrowsSlice.cpp

    r4889 r4904  
    44 *
    55 */
    6 #include "nvconf.h"
    76
    87#include <math.h>
     
    3837VelocityArrowsSlice::VelocityArrowsSlice() :
    3938    _vectorFieldGraphicsID(0),
    40     _vfXscale(0),
    41     _vfYscale(0),
    42     _vfZscale(0),
    4339    _slicePos(0.5f),
    44     _axis(2),
     40    _axis(AXIS_Z),
    4541    _fbo(0),
    4642    _tex(0),
     
    5753    _maxVelocityScale(1, 1, 1),
    5854    _arrowColor(1, 1, 0),
    59     _enabled(false),
     55    _visible(false),
    6056    _dirty(true),
    6157    _vertexBufferGraphicsID(0),
     
    6359    _renderMode(LINES)
    6460{
    65     axis(2);
    66 
    67     _queryVelocityFP.loadFragmentProgram("queryvelocity.cg", "main");
    68 
    69     _particleShader.loadVertexProgram("velocityslicevp.cg", "vpmain");
    70     _particleShader.loadFragmentProgram("velocityslicefp.cg", "fpmain");
     61    setSliceAxis(_axis);
     62
     63    _queryVelocityFP.loadFragmentProgram("queryvelocity.cg");
     64
     65    _particleShader.loadVertexProgram("velocityslicevp.cg");
     66    _particleShader.loadFragmentProgram("velocityslicefp.cg");
    7167
    7268    createRenderTarget();
     
    175171}
    176172
    177 void VelocityArrowsSlice::axis(int axis)
     173void VelocityArrowsSlice::setSliceAxis(FlowSliceAxis axis)
    178174{
    179175    _axis = axis;
    180176    switch (_axis) {
    181     case 0:
     177    case AXIS_X:
    182178        _projectionVector.x = 0;
    183179        _projectionVector.y = 1;
    184180        _projectionVector.z = 1;
    185181        break;
    186     case 1 :
     182    case AXIS_Y:
    187183        _projectionVector.x = 1;
    188184        _projectionVector.y = 0;
    189185        _projectionVector.z = 1;
    190186        break;
    191     case 2:
     187    case AXIS_Z:
    192188        _projectionVector.x = 1;
    193189        _projectionVector.y = 1;
     
    200196void VelocityArrowsSlice::queryVelocity()
    201197{
    202     if (!_enabled) return;
    203 
    204198    glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT);
    205199    int fboOrig;
     
    223217    glBegin(GL_QUADS);
    224218    switch (_axis) {
    225     case 0:
     219    case AXIS_X:
    226220        glTexCoord3f(_slicePos, 0, 0); glVertex2i(0,                  0);
    227221        glTexCoord3f(_slicePos, 1, 0); glVertex2i(_renderTargetWidth, 0);
     
    229223        glTexCoord3f(_slicePos, 0, 1); glVertex2i(0,                  _renderTargetHeight);
    230224        break;
    231     case 1:
     225    case AXIS_Y:
    232226        glTexCoord3f(0, _slicePos, 0); glVertex2i(0,                  0);
    233227        glTexCoord3f(1, _slicePos, 0); glVertex2i(_renderTargetWidth, 0);
     
    235229        glTexCoord3f(0, _slicePos, 1); glVertex2i(0,                  _renderTargetHeight);
    236230        break;
    237     case 2:
     231    case AXIS_Z:
    238232    default:
    239233        glTexCoord3f(0, 0, _slicePos); glVertex2i(0,                  0);
     
    260254}
    261255
    262 static void drawLineArrow(int axis)
     256static void drawLineArrow(FlowSliceAxis axis)
    263257{
    264258    glBegin(GL_LINES);
    265259    switch (axis) {
    266     case 0: // ZY plane
     260    case AXIS_X: // ZY plane
    267261        glVertex3f(0.0, 0.0, 0.0);
    268262        glVertex3f(0.0, 0.0, 1.0);
     
    274268        glVertex3f(0.0, -0.25, 0.75);
    275269        break;
    276     case 1: // XZ plane
     270    case AXIS_Y: // XZ plane
    277271        glVertex3f(0.0, 0.0, 0.0);
    278272        glVertex3f(1.0, 0.0, 0.0);
     
    284278        glVertex3f(0.75, 0.0, -0.25);
    285279        break;
    286     case 2: // XY plane
     280    case AXIS_Z: // XY plane
    287281    default:
    288282        glVertex3f(0.0, 0.0, 0.0);
     
    301295void VelocityArrowsSlice::render()
    302296{
    303     if (!_enabled)
     297    if (!_visible)
    304298        return;
    305299
     
    310304    }
    311305
    312     TRACE("_vf: %g %g %g", _vfXscale,_vfYscale, _vfZscale);
     306    TRACE("_scale: %g %g %g", _scale.x, _scale.y, _scale.z);
    313307    TRACE("_maxVelocityScale: %g %g %g",
    314308          _maxVelocityScale.x, _maxVelocityScale.y, _maxVelocityScale.z);
     
    319313    glPushMatrix();
    320314
    321     glScalef(_vfXscale,_vfYscale, _vfZscale);
     315    glScalef(_scale.x, _scale.y, _scale.z);
    322316    glTranslatef(-0.5f, -0.5f, -0.5f);
    323317
     
    336330        int index = 0, icount, jcount;
    337331        switch (_axis) {
    338         case 0:
     332        case AXIS_X:
    339333            icount = _tickCountZ;
    340334            jcount = _tickCountY;
    341335            refVec.set(0, 0, 1);
    342336            break;
    343         case 1:
     337        case AXIS_Y:
    344338            icount = _tickCountZ;
    345339            jcount = _tickCountX;
    346340            refVec.set(1, 0, 0);
    347341            break;
    348         case 2:
     342        case AXIS_Z:
    349343        default:
    350344            icount = _tickCountY;
     
    366360                    continue;
    367361                }
    368                 if (length > 1.0e-6) {
     362                if (length > 0.0) {
    369363                    Vector3f vnorm = vel.normalize();
    370364                    Vector3f rotationAxis = refVec.cross(vnorm);
     
    409403        _arrowsTex->activate();
    410404        glEnable(GL_TEXTURE_2D);
    411         glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
     405        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    412406
    413407        GLfloat atten[] = {1, 0, 0};
     
    416410        glPointParameterfARB(GL_POINT_SIZE_MIN_ARB, 1.0f);
    417411        glPointParameterfARB(GL_POINT_SIZE_MAX_ARB, _maxPointSize);
    418         glTexEnvf(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
     412        glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
    419413
    420414        _particleShader.bind();
     
    422416        _particleShader.setFPTextureParameter("arrows", _arrowsTex->id());
    423417        _particleShader.setVPParameter1f("tanHalfFOV",
    424                                          tan(NanoVis::getCamera()->fov() * 0.5) * NanoVis::winHeight * 0.5);
     418                                         tan(NanoVis::getCamera()->getFov() * 0.5) * NanoVis::winHeight * 0.5);
    425419        _particleShader.setGLStateMatrixVPParameter("modelview",
    426420                                                    Shader::MODELVIEW_MATRIX,
     
    448442
    449443        glActiveTexture(GL_TEXTURE0);
    450         glTexEnvf(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_FALSE);
     444        glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_FALSE);
    451445        _arrowsTex->deactivate();
    452446    }
     
    461455{
    462456    _vectorFieldGraphicsID = vfGraphicsID;
    463     _vfXscale = xScale;
    464     _vfYscale = yScale;
    465     _vfZscale = zScale;
     457    _scale.set(xScale, yScale, zScale);
    466458
    467459    _dirty = true;
     
    470462void VelocityArrowsSlice::computeSamplingTicks()
    471463{
    472     if (_vfXscale < _vfYscale) {
    473         if (_vfXscale < _vfZscale || _vfZscale == 0.0) {
    474             // vfXscale
     464    if (_scale.x < _scale.y) {
     465        if (_scale.x < _scale.z || _scale.z == 0.0) {
     466            // _scale.x
    475467            _tickCountX = _tickCountForMinSizeAxis;
    476468
    477             float step = _vfXscale / (_tickCountX + 1);
    478 
    479             _tickCountY = (int)(_vfYscale/step);
    480             _tickCountZ = (int)(_vfZscale/step);
     469            float step = _scale.x / (_tickCountX + 1);
     470            _tickCountY = (int)(_scale.y/step);
     471            _tickCountZ = (int)(_scale.z/step);
    481472        } else {
    482             // vfZscale
     473            // _scale.z
    483474            _tickCountZ = _tickCountForMinSizeAxis;
    484475
    485             float step = _vfZscale / (_tickCountZ + 1);
    486             _tickCountX = (int)(_vfXscale/step);
    487             _tickCountY = (int)(_vfYscale/step);
     476            float step = _scale.z / (_tickCountZ + 1);
     477            _tickCountX = (int)(_scale.x/step);
     478            _tickCountY = (int)(_scale.y/step);
    488479        }
    489480    } else {
    490         if (_vfYscale < _vfZscale || _vfZscale == 0.0) {
    491             // _vfYscale
     481        if (_scale.y < _scale.z || _scale.z == 0.0) {
     482            // _scale.y
    492483            _tickCountY = _tickCountForMinSizeAxis;
    493484
    494             float step = _vfYscale / (_tickCountY + 1);
    495             _tickCountX = (int)(_vfXscale/step);
    496             _tickCountZ = (int)(_vfZscale/step);
     485            float step = _scale.y / (_tickCountY + 1);
     486            _tickCountX = (int)(_scale.x/step);
     487            _tickCountZ = (int)(_scale.z/step);
    497488        } else {
    498             // vfZscale
     489            // _scale.z
    499490            _tickCountZ = _tickCountForMinSizeAxis;
    500491
    501             float step = _vfZscale / (_tickCountZ + 1);
    502             _tickCountX = (int)(_vfXscale/step);
    503             _tickCountY = (int)(_vfYscale/step);
     492            float step = _scale.z / (_tickCountZ + 1);
     493            _tickCountX = (int)(_scale.x/step);
     494            _tickCountY = (int)(_scale.y/step);
    504495        }
    505496    }
    506497
    507498    switch (_axis) {
    508     case 0:
     499    case AXIS_X:
    509500        _tickCountX = 1;
    510501        _renderTargetWidth = _tickCountY;
    511502        _renderTargetHeight = _tickCountZ;
    512503        break;
    513     case 1:
     504    case AXIS_Y:
    514505        _tickCountY = 1;
    515506        _renderTargetWidth = _tickCountX;
     
    517508        break;
    518509    default:
    519     case 2:
     510    case AXIS_Z:
    520511        _tickCountZ = 1;
    521512        _renderTargetWidth = _tickCountX;
     
    546537    }
    547538
    548     if (_axis == 2) {
     539    if (_axis == AXIS_Z) {
    549540        for (int y = 1; y <= _tickCountY; ++y) {
    550541            for (int x = 1; x <= _tickCountX; ++x) {
     
    560551            }
    561552        }
    562     } else if (_axis == 1) {
     553    } else if (_axis == AXIS_Y) {
    563554        for (int z = 1; z <= _tickCountZ; ++z) {
    564555            for (int x = 1; x <= _tickCountX; ++x) {
     
    574565            }
    575566        }
    576     } else if (_axis == 0) {
     567    } else if (_axis == AXIS_X) {
    577568        for (int z = 1; z <= _tickCountZ; ++z) {
    578569            for (int y = 1; y <= _tickCountY; ++y) {
Note: See TracChangeset for help on using the changeset viewer.