Ignore:
Timestamp:
Mar 13, 2013, 9:57:03 AM (12 years ago)
Author:
ldelgass
Message:

Fix camera reset for nanovis. Includes refactoring of vector/matrix classes
in nanovis to consolidate into vrmath library. Also add preliminary canonical
view control to clients for testing.

File:
1 edited

Legend:

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

    r3452 r3492  
    2323#include <tcl.h>
    2424
     25#include <vrmath/Vector3f.h>
     26#include <vrmath/Matrix4x4d.h>
     27
    2528#include "nanovis.h"
    2629#include "VolumeRenderer.h"
     30#include "Plane.h"
    2731#include "ConvexPolygon.h"
    2832#include "NvStdVertexShader.h"
    2933#include "Trace.h"
     34
     35using namespace vrmath;
    3036
    3137VolumeRenderer::VolumeRenderer()
     
    142148
    143149        //volume start location
    144         Vector3 volPos = volPtr->location();
    145         Vector3 volScaling = volPtr->getPhysicalScaling();
     150        Vector3f volPos = volPtr->location();
     151        Vector3f volScaling = volPtr->getPhysicalScaling();
    146152
    147153        TRACE("VOL POS: %g %g %g",
     
    154160        double z0 = 0;
    155161
    156         Mat4x4 model_view_no_trans, model_view_trans;
    157         Mat4x4 model_view_no_trans_inverse, model_view_trans_inverse;
     162        Matrix4x4d model_view_no_trans, model_view_trans;
     163        Matrix4x4d model_view_no_trans_inverse, model_view_trans_inverse;
    158164
    159165        //initialize volume plane with world coordinates
    160         Plane volume_planes[6];
     166        nv::Plane volume_planes[6];
    161167        volume_planes[0].setCoeffs( 1,  0,  0, -x0);
    162168        volume_planes[1].setCoeffs(-1,  0,  0,  x0+1);
     
    172178        glEnable(GL_DEPTH_TEST);
    173179
    174         GLfloat mv_no_trans[16];
    175         glGetFloatv(GL_MODELVIEW_MATRIX, mv_no_trans);
    176 
    177         model_view_no_trans = Mat4x4(mv_no_trans);
     180        GLdouble mv_no_trans[16];
     181        glGetDoublev(GL_MODELVIEW_MATRIX, mv_no_trans);
     182
     183        model_view_no_trans = Matrix4x4d(mv_no_trans);
    178184        model_view_no_trans_inverse = model_view_no_trans.inverse();
    179185
     
    185191        glScalef(volScaling.x, volScaling.y, volScaling.z);
    186192
    187         GLfloat mv_trans[16];
    188         glGetFloatv(GL_MODELVIEW_MATRIX, mv_trans);
    189 
    190         model_view_trans = Mat4x4(mv_trans);
     193        GLdouble mv_trans[16];
     194        glGetDoublev(GL_MODELVIEW_MATRIX, mv_trans);
     195
     196        model_view_trans = Matrix4x4d(mv_trans);
    191197        model_view_trans_inverse = model_view_trans.inverse();
     198
     199        model_view_trans.print();
    192200
    193201        //draw volume bounding box with translation (the correct location in
     
    234242              zNear, zFar, eyeMinX, eyeMaxX, eyeMinY, eyeMaxY, z_step, n_actual_slices);
    235243
    236         Vector4 vert1, vert2, vert3, vert4;
     244        Vector4f vert1, vert2, vert3, vert4;
    237245
    238246        // Render cutplanes first with depth test enabled.  They will mark the
     
    250258            switch (axis) {
    251259            case 1:
    252                 vert1 = Vector4(offset, 0, 0, 1);
    253                 vert2 = Vector4(offset, 1, 0, 1);
    254                 vert3 = Vector4(offset, 1, 1, 1);
    255                 vert4 = Vector4(offset, 0, 1, 1);
     260                vert1 = Vector4f(offset, 0, 0, 1);
     261                vert2 = Vector4f(offset, 1, 0, 1);
     262                vert3 = Vector4f(offset, 1, 1, 1);
     263                vert4 = Vector4f(offset, 0, 1, 1);
    256264                break;
    257265            case 2:
    258                 vert1 = Vector4(0, offset, 0, 1);
    259                 vert2 = Vector4(1, offset, 0, 1);
    260                 vert3 = Vector4(1, offset, 1, 1);
    261                 vert4 = Vector4(0, offset, 1, 1);
     266                vert1 = Vector4f(0, offset, 0, 1);
     267                vert2 = Vector4f(1, offset, 0, 1);
     268                vert3 = Vector4f(1, offset, 1, 1);
     269                vert4 = Vector4f(0, offset, 1, 1);
    262270                break;
    263271            case 3:
    264272            default:
    265                 vert1 = Vector4(0, 0, offset, 1);
    266                 vert2 = Vector4(1, 0, offset, 1);
    267                 vert3 = Vector4(1, 1, offset, 1);
    268                 vert4 = Vector4(0, 1, offset, 1);
     273                vert1 = Vector4f(0, 0, offset, 1);
     274                vert2 = Vector4f(1, 0, offset, 1);
     275                vert3 = Vector4f(1, 1, offset, 1);
     276                vert4 = Vector4f(0, 1, offset, 1);
    269277                break;
    270278            }
    271279
    272             Vector4 texcoord1 = vert1;
    273             Vector4 texcoord2 = vert2;
    274             Vector4 texcoord3 = vert3;
    275             Vector4 texcoord4 = vert4;
     280            Vector4f texcoord1 = vert1;
     281            Vector4f texcoord2 = vert2;
     282            Vector4f texcoord3 = vert3;
     283            Vector4f texcoord4 = vert4;
    276284
    277285            _cutplaneShader->bind();
     
    310318        // Initialize view-aligned quads with eye space bounds of
    311319        // volume
    312         vert1 = Vector4(eyeMinX, eyeMinY, -0.5, 1);
    313         vert2 = Vector4(eyeMaxX, eyeMinY, -0.5, 1);
    314         vert3 = Vector4(eyeMaxX, eyeMaxY, -0.5, 1);
    315         vert4 = Vector4(eyeMinX, eyeMaxY, -0.5, 1);
     320        vert1 = Vector4f(eyeMinX, eyeMinY, -0.5, 1);
     321        vert2 = Vector4f(eyeMaxX, eyeMinY, -0.5, 1);
     322        vert3 = Vector4f(eyeMaxX, eyeMaxY, -0.5, 1);
     323        vert4 = Vector4f(eyeMinX, eyeMaxY, -0.5, 1);
    316324
    317325        size_t counter = 0;
     
    389397        volPtr = volumes[volume_index];
    390398
    391         Vector3 volScaling = volPtr->getPhysicalScaling();
     399        Vector3f volScaling = volPtr->getPhysicalScaling();
    392400
    393401        glPushMatrix();
     
    510518}
    511519
    512 void VolumeRenderer::getEyeSpaceBounds(const Mat4x4& mv,
     520void VolumeRenderer::getEyeSpaceBounds(const Matrix4x4d& mv,
    513521                                       double& xMin, double& xMax,
    514522                                       double& yMin, double& yMax,
     
    542550
    543551    for (int i = 0; i < 8; i++) {
    544         Vector4 eyeVert = mv.transform(Vector4(vertex[i][0],
    545                                                vertex[i][1],
    546                                                vertex[i][2],
    547                                                vertex[i][3]));
     552        Vector4f eyeVert = mv.transform(Vector4f(vertex[i][0],
     553                                                 vertex[i][1],
     554                                                 vertex[i][2],
     555                                                 vertex[i][3]));
    548556        if (eyeVert.x < xMin) xMin = eyeVert.x;
    549557        if (eyeVert.x > xMax) xMax = eyeVert.x;
Note: See TracChangeset for help on using the changeset viewer.