Ignore:
Timestamp:
Apr 16, 2013, 3:52:20 AM (6 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/OrientationIndicator.cpp

    r3605 r3630  
    1010#include <GL/glu.h>
    1111
     12#include <vrmath/Vector3f.h>
     13
    1214#include "OrientationIndicator.h"
    1315
     16using namespace vrmath;
    1417using namespace nv;
    1518
     
    1821    _visible(true),
    1922    _lineWidth(1.f),
    20     _quadric(gluNewQuadric())
     23    _quadric(gluNewQuadric()),
     24    _position(0,0,0),
     25    _scale(1,1,1)
    2126{
    2227}
     
    3742        return;
    3843
     44    glMatrixMode(GL_MODELVIEW);
     45    glPushMatrix();
     46    glTranslatef(_position.x, _position.y, _position.z);
     47    float scale = _scale.x;
     48    if (scale == 0 || _scale.y < scale) scale = _scale.y;
     49    if (scale == 0 || _scale.z < scale) scale = _scale.z;
     50    glScalef(scale, scale, scale);
     51
    3952    glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT);
    4053
     
    4861        glLineWidth(_lineWidth);
    4962        glDisable(GL_LIGHTING);
    50         glColor3f(1, 0, 0);
    51         glBegin(GL_LINES);
    52         glVertex3f(0, 0, 0);
    53         glVertex3f(0.5f, 0, 0);
    54         glEnd();
    55         glColor3f(0, 1, 0);
    56         glBegin(GL_LINES);
    57         glVertex3f(0, 0, 0);
    58         glVertex3f(0, 0.5f, 0);
    59         glEnd();
    60         glColor3f(0, 0, 1);
    61         glBegin(GL_LINES);
    62         glVertex3f(0, 0, 0);
    63         glVertex3f(0, 0, 0.5f);
    64         glEnd();
     63        if (_scale.x > 0) {
     64            glColor3f(1, 0, 0);
     65            glBegin(GL_LINES);
     66            glVertex3f(0, 0, 0);
     67            glVertex3f(0.5f, 0, 0);
     68            glEnd();
     69        }
     70        if (_scale.y > 0) {
     71            glColor3f(0, 1, 0);
     72            glBegin(GL_LINES);
     73            glVertex3f(0, 0, 0);
     74            glVertex3f(0, 0.5f, 0);
     75            glEnd();
     76        }
     77        if (_scale.z > 0) {
     78            glColor3f(0, 0, 1);
     79            glBegin(GL_LINES);
     80            glVertex3f(0, 0, 0);
     81            glVertex3f(0, 0, 0.5f);
     82            glEnd();
     83        }
    6584    }
    6685        break;
     
    7291        glEnable(GL_LIGHTING);
    7392        glEnable(GL_LIGHT0);
     93        glEnable(GL_NORMALIZE);
    7494
    7595        // X
    76         glColor3f(1, 0, 0);
    77         glPushMatrix();
    78         glRotatef(90, 0, 1, 0);
    79         gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
    80         glPopMatrix();
     96        if (_scale.x > 0) {
     97            glColor3f(1, 0, 0);
     98            glPushMatrix();
     99            glRotatef(90, 0, 1, 0);
     100            gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
     101            glPopMatrix();
    81102
    82         glPushMatrix();
    83         glTranslatef(0.3, 0., 0.);
    84         glRotatef(90, 0, 1, 0);
    85         gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
    86         glPopMatrix();
     103            glPushMatrix();
     104            glTranslatef(0.3, 0., 0.);
     105            glRotatef(90, 0, 1, 0);
     106            gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
     107            glPopMatrix();
     108        }
    87109
    88110        // Y
    89         glColor3f(0, 1, 0);
    90         glPushMatrix();
    91         glRotatef(-90, 1, 0, 0);
    92         gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
    93         glPopMatrix();
     111        if (_scale.y > 0) {
     112            glColor3f(0, 1, 0);
     113            glPushMatrix();
     114            glRotatef(-90, 1, 0, 0);
     115            gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
     116            glPopMatrix();
    94117
    95         glPushMatrix();
    96         glTranslatef(0., 0.3, 0.);
    97         glRotatef(-90, 1, 0, 0);
    98         gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
    99         glPopMatrix();
     118            glPushMatrix();
     119            glTranslatef(0., 0.3, 0.);
     120            glRotatef(-90, 1, 0, 0);
     121            gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
     122            glPopMatrix();
     123        }
    100124
    101125        // Z
    102         glColor3f(0, 0, 1);
    103         glPushMatrix();
    104         gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
    105         glPopMatrix();
     126        if (_scale.z > 0) {
     127            glColor3f(0, 0, 1);
     128            glPushMatrix();
     129            gluCylinder(qobj, 0.01, 0.01, 0.3, segments, 1);
     130            glPopMatrix();
    106131
    107         glPushMatrix();
    108         glTranslatef(0., 0., 0.3);
    109         gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
    110         glPopMatrix();
     132            glPushMatrix();
     133            glTranslatef(0., 0., 0.3);
     134            gluCylinder(qobj, 0.02, 0.0, 0.06, segments, 1);
     135            glPopMatrix();
     136        }
    111137    }
    112138        break;
     
    116142   
    117143    glPopAttrib();
     144    glPopMatrix();
    118145}
Note: See TracChangeset for help on using the changeset viewer.