source: branches/nanovis2/packages/vizservers/nanovis/Vector4.h @ 3007

Last change on this file since 3007 was 3007, checked in by ldelgass, 12 years ago

Cleanups, add (strict) equality operators to vector classes, add matrix uniform
setters for NvShader? (that don't use GL state), remove old camera define/code,
add method to set clipping range of camera based on bounds (not used yet),
remove camera aim command (use orient instead), add camera position command,
add cleanup to destroy objects in NanoVis::removeAllData(), don't precede image
command to client with newline.

  • Property svn:eol-style set to native
File size: 2.0 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * ----------------------------------------------------------------------
4 * Vector4.h: Vector4 class
5 *
6 * ======================================================================
7 *  AUTHOR:  Wei Qiao <qiaow@purdue.edu>
8 *           Purdue Rendering and Perceptualization Lab (PURPL)
9 *
10 *  Copyright (c) 2004-2006  Purdue Research Foundation
11 *
12 *  See the file "license.terms" for information on usage and
13 *  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14 * ======================================================================
15 */
16#ifndef VECTOR4_H
17#define VECTOR4_H
18
19#include <vector>
20
21#include "Trace.h"
22
23class Vector4 
24{
25public:
26    float x, y, z, w;
27
28    Vector4()
29    {}
30
31    Vector4(float x_val, float y_val, float z_val, float w_val)
32    {
33        set(x_val, y_val, z_val, w_val);
34    }
35
36    void set(float x_val, float y_val, float z_val, float w_val)
37    {
38        x = x_val, y = y_val, z = z_val, w = w_val;
39    }
40
41    void perspectiveDivide()
42    {
43        /* Divide vector by w */
44        x /= w, y /= w, z /= w, w = 1.;
45    }
46
47    void print() const
48    {
49        TRACE("Vector4: (%.3f, %.3f, %.3f, %.3f)\n", x, y, z, w);
50    }
51
52    bool operator==(const Vector4& op2) const
53    {
54        return (x == op2.x && y == op2.y && z == op2.z && w == op2.w);
55    }
56
57    Vector4 operator +(const Vector4& op2) const
58    {
59        return Vector4(x + op2.x, y + op2.y, z + op2.z, w + op2.w);
60    }
61
62    Vector4 operator -(const Vector4& op2) const
63    {
64        return Vector4(x - op2.x, y - op2.y, z - op2.z, w - op2.w);
65    }
66
67    float operator *(const Vector4& op2) const
68    {
69        return (x * op2.x) + (y * op2.y) + (z * op2.z) + (w * op2.w);
70    }
71
72    Vector4 operator *(float op2) const
73    {
74        return Vector4(x * op2, y * op2, z * op2, w * op2);
75    }
76
77    Vector4 operator /(float op2) const
78    {
79        return Vector4(x / op2, y / op2, z / op2, w / op2);
80    }
81};
82
83typedef std::vector<Vector4> Vector4Array;
84
85#endif
Note: See TracBrowser for help on using the repository browser.