Sfoglia il codice sorgente

Removed unnecessary Camera functionality

Thomas Buck 10 anni fa
parent
commit
dbeb29c8ac
6 ha cambiato i file con 77 aggiunte e 264 eliminazioni
  1. 21
    99
      include/Camera.h
  2. 0
    3
      include/OpenRaider.h
  3. 51
    153
      src/Camera.cpp
  4. 0
    1
      src/Game.cpp
  5. 2
    5
      src/OpenRaider.cpp
  6. 3
    3
      src/Render.cpp

+ 21
- 99
include/Camera.h Vedi File

@@ -3,6 +3,7 @@
3 3
  * \brief OpenGL camera class
4 4
  *
5 5
  * \author Mongoose
6
+ * \author xythobuz
6 7
  */
7 8
 #ifndef _CAMERA_H_
8 9
 #define _CAMERA_H_
@@ -15,48 +16,14 @@
15 16
  * \brief Commands for interactive camera control
16 17
  */
17 18
 enum camera_command {
18
-  CAMERA_MOVE_FORWARD = 1,
19
-  CAMERA_MOVE_BACKWARD,
20
-  CAMERA_MOVE_UP,
21
-  CAMERA_MOVE_DOWN,
22
-  CAMERA_ROTATE_RIGHT,
23
-  CAMERA_ROTATE_LEFT,
24
-  CAMERA_SPEED_UP,
25
-  CAMERA_SPEED_DOWN,
26
-  CAMERA_ROTATE_UP,
27
-  CAMERA_ROTATE_DOWN,
28
-  CAMERA_MOVE_LEFT,
29
-  CAMERA_MOVE_RIGHT
30
-};
31
-
32
-/*!
33
- * \brief Flags a camera can have
34
- */
35
-enum CameraFlags {
36
-    Camera_FlyMode = (1 << 0) //!< Camera is flying free?
19
+    CAMERA_ROTATE_RIGHT,
20
+    CAMERA_ROTATE_LEFT,
21
+    CAMERA_ROTATE_UP,
22
+    CAMERA_ROTATE_DOWN
37 23
 };
38 24
 
39 25
 /*!
40 26
  * \brief OpenGL camera class
41
- *
42
- * 2002.12.16:
43
- * Mongoose - Removed perspective setting and OpenGL dependency
44
- *            API changes to reflect new direction of this object:
45
- *              Removing outdated algorithms and code
46
- *              And refactoring the class in general
47
- *
48
- * 2001.06.06:
49
- * Mongoose - Moving GLU code into here to setup break up
50
- *            into Camera base class, DynamicCamera,
51
- *            and GLUCamera child classes
52
- *
53
- * 2001.06.04:
54
- * Mongoose - Quaternion based compile option
55
- *
56
- * 2001.05.18:
57
- * Mongoose - Created, based on my old GL camera code
58
- *            that has been used in GooseEgg since alpha
59
- *            and algorithms from Yuri Zhivago's trview
60 27
  */
61 28
 class Camera {
62 29
 public:
@@ -72,74 +39,32 @@ public:
72 39
     void getPosition(vec3_t pos);
73 40
 
74 41
     /*!
75
-     * \brief Returns the up vector
76
-     * \param up where the up vector will be stored
77
-     */
78
-    void getUp(vec3_t up);
79
-
80
-    /*!
81 42
      * \brief Get the target currently looked at
82 43
      * \param target where the target will be stored
83 44
      */
84 45
     void getTarget(vec3_t target);
85 46
 
86 47
     /*!
87
-     * \brief Get current yaw in degrees
88
-     * \returns yaw in degrees
89
-     */
90
-    float getYaw();
91
-
92
-    /*!
93 48
      * \brief Get angle/yaw of camera
94 49
      * \returns theta angle/yaw of camera
95 50
      */
96 51
     vec_t getRadianYaw();
97 52
 
98 53
     /*!
99
-     * \brief Get current angle/pitch
100
-     * \returns current pitch in degrees
101
-     */
102
-    float getPitch();
103
-
104
-    /*!
105 54
      * \brief Get angle/pitch of camera
106 55
      * \returns phi angle/pitch of camera
107 56
      */
108 57
     vec_t getRadianPitch();
109 58
 
110 59
     /*!
111
-     * \brief Rotate the camera
112
-     * \param angle angle in radians
113
-     * \param x X coordinate of axis
114
-     * \param y Y coordinate of axis
115
-     * \param z Z coordinate of axis
116
-     */
117
-    void rotate(float angle, float x, float y, float z);
118
-
119
-    /*!
120
-     * \brief Set Camera position
121
-     * \param x new X coordinate
122
-     * \param y new Y coordinate
123
-     * \param z new Z coordinate
124
-     */
125
-    void translate(float x, float y, float z);
126
-
127
-    /*!
128
-     * \brief Set the Camera to its initial state
60
+     * \brief Set current position
61
+     * \param pos new position
129 62
      */
130
-    void reset();
63
+    void setPosition(vec3_t pos);
131 64
 
132
-    /*!
133
-     * \brief Sends interactive command to camera
134
-     * \param cmd valid camera command
135
-     */
136
-    void command(enum camera_command cmd);
65
+    void setSensitivityX(vec_t sens);
137 66
 
138
-    /*!
139
-     * \brief Sets speed
140
-     * \param s new speed, is 256 or greater in general
141
-     */
142
-    void setSpeed(float s);
67
+    void setSensitivityY(vec_t sens);
143 68
 
144 69
     /*!
145 70
      * \brief Updates view target
@@ -147,34 +72,31 @@ public:
147 72
     void update();
148 73
 
149 74
     /*!
150
-     * \brief Set current position
151
-     * \param pos new position
152
-     */
153
-    void setPosition(vec3_t pos);
154
-
155
-    /*!
156
-     * \brief Sets the up vector
157
-     * \param up new up vector
75
+     * \brief Rotate the camera
76
+     * \param angle angle in radians
77
+     * \param x X coordinate of axis
78
+     * \param y Y coordinate of axis
79
+     * \param z Z coordinate of axis
158 80
      */
159
-    void setUp(vec3_t up);
81
+    void rotate(vec_t angle, vec_t x, vec_t y, vec_t z);
160 82
 
161 83
     /*!
162
-     * \brief Sets target (look at pos)
163
-     * \param target new target
84
+     * \brief Sends interactive command to camera
85
+     * \param cmd valid camera command
164 86
      */
165
-    void setTarget(vec3_t target);
87
+    void command(enum camera_command cmd);
166 88
 
167 89
 private:
168 90
     Quaternion mQ;                //!< Quaternion for rotation
169
-    unsigned int mFlags;          //!< For testing with flags
170 91
     vec_t mPos[4];                //!< Location in 3 space (aka eye)
171 92
     vec_t mTarget[4];             //!< Postition we're looking at
172 93
     vec_t mUp[4];                 //!< Up vector
173 94
     vec_t mSide[4];               //!< Side vector
174 95
     vec_t mViewDistance;          //!< Distance from target
175
-    vec_t mTranslateDelta;        //!< Step size to move
176 96
     vec_t mTheta;                 //!< View angle Y
177 97
     vec_t mTheta2;                //!< View angle Z
98
+    vec_t mRotationDeltaX;
99
+    vec_t mRotationDeltaY;
178 100
 };
179 101
 
180 102
 #endif

+ 0
- 3
include/OpenRaider.h Vedi File

@@ -60,9 +60,6 @@ public:
60 60
     bool mMapListFilled;
61 61
     std::vector<char *> mMapList;
62 62
 
63
-    float mCameraRotationDeltaX;
64
-    float mCameraRotationDeltaY;
65
-
66 63
     char *mBaseDir;
67 64
     char *mPakDir;
68 65
     char *mAudioDir;

+ 51
- 153
src/Camera.cpp Vedi File

@@ -3,6 +3,7 @@
3 3
  * \brief OpenGL camera class
4 4
  *
5 5
  * \author Mongoose
6
+ * \author xythobuz
6 7
  */
7 8
 
8 9
 #include <stdio.h>
@@ -12,11 +13,29 @@
12 13
 #include "Camera.h"
13 14
 
14 15
 Camera::Camera() {
15
-    mFlags = 0;
16 16
     mViewDistance = 14.0f;
17
-    mTranslateDelta = 512.0f; // 256.0f
18
-    mFlags &= Camera_FlyMode;
19
-    reset();
17
+    mRotationDeltaX = 1.0f;
18
+    mRotationDeltaY = 1.0f;
19
+    mTheta = 0.0f;
20
+    mTheta2 = 0.0f;
21
+
22
+    mPos[0] = 0.0f;
23
+    mPos[1] = 0.0f;
24
+    mPos[2] = 0.0f;
25
+
26
+    mTarget[0] = 0.0f;
27
+    mTarget[1] = 0.0f;
28
+    mTarget[2] = mViewDistance;
29
+
30
+    mSide[0] = 1.0f;
31
+    mSide[1] = 0.0f;
32
+    mSide[2] = 0.0f;
33
+
34
+    mUp[0] = 0.0f;
35
+    mUp[1] = -1.0f; // 1.0f
36
+    mUp[2] = 0.0f;
37
+
38
+    mQ.setIdentity();
20 39
 }
21 40
 
22 41
 void Camera::getPosition(vec3_t pos) {
@@ -25,22 +44,12 @@ void Camera::getPosition(vec3_t pos) {
25 44
     pos[2] = mPos[2];
26 45
 }
27 46
 
28
-void Camera::getUp(vec3_t up) {
29
-    up[0] = mUp[0];
30
-    up[1] = mUp[1];
31
-    up[2] = mUp[2];
32
-}
33
-
34 47
 void Camera::getTarget(vec3_t target) {
35 48
     target[0] = mTarget[0];
36 49
     target[1] = mTarget[1];
37 50
     target[2] = mTarget[2];
38 51
 }
39 52
 
40
-float Camera::getYaw() {
41
-    return OR_RAD_TO_DEG(mTheta);
42
-}
43
-
44 53
 vec_t Camera::getRadianYaw() {
45 54
     return mTheta;
46 55
 }
@@ -49,13 +58,32 @@ vec_t Camera::getRadianPitch() {
49 58
     return mTheta2;
50 59
 }
51 60
 
61
+void Camera::setPosition(vec3_t pos) {
62
+    mPos[0] = pos[0];
63
+    mPos[1] = pos[1];
64
+    mPos[2] = pos[2];
65
+}
66
+
67
+void Camera::setSensitivityX(vec_t sens) {
68
+    mRotationDeltaX = sens;
69
+}
70
+
71
+void Camera::setSensitivityY(vec_t sens) {
72
+    mRotationDeltaY = sens;
73
+}
74
+
75
+void Camera::update() {
76
+    mTarget[2] = (mViewDistance * cosf(mTheta)) + mPos[2];
77
+    mTarget[0] = (mViewDistance * sinf(mTheta)) + mPos[0];
78
+    mTarget[1] = (mViewDistance * sinf(mTheta2)) + mPos[1]; // + height_offset;
79
+}
80
+
52 81
 void Camera::rotate(float angle, float x, float y, float z) {
53 82
     Quaternion t, n;
54 83
     Matrix matrix;
55 84
     vec_t side[4] = { 1.0f, 0.0f,  0.0f, 1.0f };
56 85
     vec_t up[4] =   { 0.0f, 1.0f,  0.0f, 1.0f };
57 86
     vec_t look[4] = { 0.0f, 0.0f, -1.0f, 1.0f };
58
-    unsigned int i;
59 87
     matrix_t m;
60 88
 
61 89
     t.set(angle, x, y, z);
@@ -68,7 +96,7 @@ void Camera::rotate(float angle, float x, float y, float z) {
68 96
     matrix.multiply4v(look, mTarget);
69 97
     matrix.multiply4v(up, mUp);
70 98
 
71
-    for (i = 0; i < 3; ++i) {
99
+    for (int i = 0; i < 3; ++i) {
72 100
         mSide[i] += mPos[i];
73 101
         mTarget[i] += mPos[i];
74 102
         mUp[i] += mPos[i];
@@ -77,161 +105,31 @@ void Camera::rotate(float angle, float x, float y, float z) {
77 105
     mQ = n;
78 106
 }
79 107
 
80
-void Camera::translate(float x, float y, float z) {
81
-    int i;
82
-    vec_t result[4];
83
-    vec_t v[4];
84
-    matrix_t m;
85
-    Matrix matrix;
86
-
87
-    v[0] = x;
88
-    v[1] = y;
89
-    v[2] = -z;
90
-    v[3] = 1;
91
-
92
-    m[0] = mSide[0] - mPos[0];
93
-    m[1] = mUp[0] - mPos[0];
94
-    m[2] = mTarget[0] - mPos[0];
95
-    m[3] = 0;
96
-    m[4] = mSide[1] - mPos[1];
97
-    m[5] = mUp[1] - mPos[1];
98
-    m[6] = mTarget[1] - mPos[1];
99
-    m[7] = 0;
100
-    m[8] = mSide[2] - mPos[2];
101
-    m[9] = mUp[2] - mPos[2];
102
-    m[10] = mTarget[2] - mPos[2];
103
-    m[11] = 0;
104
-    m[12] = 0;
105
-    m[13] = 0;
106
-    m[14] = 0;
107
-    m[15] = 1;
108
-
109
-    matrix.setMatrix(m);
110
-    matrix.multiply4v(v, result);
111
-
112
-    for (i = 0; i < 3; ++i) {
113
-        mSide[i] += result[i];
114
-        mUp[i] += result[i];
115
-        mTarget[i] += result[i];
116
-        mPos[i] += result[i];
117
-    }
118
-
119
-    mPos[0] = x;
120
-    mPos[1] = y;
121
-    mPos[2] = z;
122
-}
123
-
124
-void Camera::reset() {
125
-    mTheta = 0.0f;
126
-    mTheta2 = 0.0f;
127
-
128
-    mPos[0] = 0.0f;
129
-    mPos[1] = 0.0f;
130
-    mPos[2] = 0.0f;
131
-
132
-    mTarget[0] = 0.0f;
133
-    mTarget[1] = 0.0f;
134
-    mTarget[2] = mViewDistance;
135
-
136
-    mSide[0] = 1.0f;
137
-    mSide[1] = 0.0f;
138
-    mSide[2] = 0.0f;
139
-
140
-    mUp[0] = 0.0f;
141
-    mUp[1] = -1.0f; // 1.0f
142
-    mUp[2] = 0.0f;
143
-
144
-    mQ.setIdentity();
145
-    translate(0.0f, 0.0f, 0.0f);
146
-}
147
-
148 108
 void Camera::command(enum camera_command cmd) {
149 109
     switch (cmd) {
150
-        case CAMERA_MOVE_FORWARD:
151
-            if (mFlags & Camera_FlyMode)
152
-                mPos[2] += (mTranslateDelta * cosf(mTheta));
153
-
154
-            mPos[0] += (mTranslateDelta * sinf(mTheta));
155
-            mPos[1] += (mTranslateDelta * sinf(mTheta2));
156
-            break;
157
-        case CAMERA_MOVE_BACKWARD:
158
-            if (mFlags & Camera_FlyMode)
159
-                mPos[2] -= (mTranslateDelta * cosf(mTheta));
160
-
161
-            mPos[0] -= (mTranslateDelta * sinf(mTheta));
162
-            mPos[1] -= (mTranslateDelta * sinf(mTheta2));
163
-            break;
164
-        case CAMERA_MOVE_LEFT:
165
-            mPos[0] -= (mTranslateDelta * sinf(mTheta - 90.0f));
166
-            mPos[2] -= (mTranslateDelta * cosf(mTheta - 90.0f));
167
-            break;
168
-        case CAMERA_MOVE_RIGHT:
169
-            mPos[0] -= (mTranslateDelta * sinf(mTheta + 90.0f));
170
-            mPos[2] -= (mTranslateDelta * cosf(mTheta + 90.0f));
171
-            break;
172 110
         case CAMERA_ROTATE_UP:
173 111
             if (mTheta2 < (M_PI / 2)) {
174
-                mTheta2 += getOpenRaider().mCameraRotationDeltaY;
112
+                mTheta2 += mRotationDeltaY;
175 113
                 rotate(mTheta2, 1.0f, 0.0f, 0.0f);
176 114
             }
177 115
             break;
116
+
178 117
         case CAMERA_ROTATE_DOWN:
179 118
             if (mTheta2 > -(M_PI / 2)) {
180
-                mTheta2 -= getOpenRaider().mCameraRotationDeltaY;
119
+                mTheta2 -= mRotationDeltaY;
181 120
                 rotate(mTheta2, 1.0f, 0.0f, 0.0f);
182 121
             }
183 122
             break;
123
+
184 124
         case CAMERA_ROTATE_RIGHT:
185
-            mTheta += getOpenRaider().mCameraRotationDeltaX;
125
+            mTheta += mRotationDeltaX;
186 126
             rotate(mTheta, 0.0f, 1.0f, 0.0f);
187 127
             break;
128
+
188 129
         case CAMERA_ROTATE_LEFT:
189
-            mTheta -= getOpenRaider().mCameraRotationDeltaX;
130
+            mTheta -= mRotationDeltaX;
190 131
             rotate(mTheta, 0.0f, 1.0f, 0.0f);
191 132
             break;
192
-        case CAMERA_MOVE_UP:
193
-            mPos[1] -= mTranslateDelta / 2.0f;
194
-            mTarget[1] -= mTranslateDelta / 2.0f;
195
-            break;
196
-        case CAMERA_MOVE_DOWN:
197
-            mPos[1] += mTranslateDelta / 2.0f;
198
-            mTarget[1] += mTranslateDelta / 2.0f;
199
-            break;
200
-        case CAMERA_SPEED_UP:
201
-            ++mTranslateDelta;
202
-            break;
203
-        case CAMERA_SPEED_DOWN:
204
-            if (--mTranslateDelta < 0.0f)
205
-                mTranslateDelta = 1.0f;
206
-            break;
207 133
     }
208 134
 }
209 135
 
210
-void Camera::setSpeed(float s) {
211
-    mTranslateDelta = s;
212
-}
213
-
214
-void Camera::update() {
215
-    mTarget[2] = (mViewDistance * cosf(mTheta)) + mPos[2];
216
-    mTarget[0] = (mViewDistance * sinf(mTheta)) + mPos[0];
217
-    mTarget[1] = (mViewDistance * sinf(mTheta2)) + mPos[1]; // + height_offset;
218
-}
219
-
220
-void Camera::setPosition(vec3_t pos) {
221
-    mPos[0] = pos[0];
222
-    mPos[1] = pos[1];
223
-    mPos[2] = pos[2];
224
-}
225
-
226
-void Camera::setUp(vec3_t up) {
227
-    mUp[0] = up[0];
228
-    mUp[1] = up[1];
229
-    mUp[2] = up[2];
230
-}
231
-
232
-void Camera::setTarget(vec3_t target) {
233
-    mTarget[0] = target[0];
234
-    mTarget[1] = target[1];
235
-    mTarget[2] = target[2];
236
-}
237
-

+ 0
- 1
src/Game.cpp Vedi File

@@ -560,7 +560,6 @@ void Game::processMoveable(int index, int i, int *ent,
560 560
     if (moveable[index].object_id == 0)
561 561
     {
562 562
         lara = true;
563
-        getCamera().translate(pos[0], pos[1] - 470, pos[2]);
564 563
         thing->type = 0x02;
565 564
         mLara = thing; // Mongoose 2002.03.22, Cheap hack for now
566 565
         mLara->master = 0x0;

+ 2
- 5
src/OpenRaider.cpp Vedi File

@@ -35,9 +35,6 @@ OpenRaider::OpenRaider() {
35 35
 
36 36
     for (int i = 0; i < ActionEventCount; i++)
37 37
         keyBindings[i] = unknown;
38
-
39
-    mCameraRotationDeltaX = OR_DEG_TO_RAD(1.0f);
40
-    mCameraRotationDeltaY = OR_DEG_TO_RAD(1.0f);
41 38
 }
42 39
 
43 40
 OpenRaider::~OpenRaider() {
@@ -835,14 +832,14 @@ int OpenRaider::set(const char *var, const char *value) {
835 832
             getConsole().print("set-mouse_x-Error: Invalid value (%s)", value);
836 833
             return -6;
837 834
         }
838
-        mCameraRotationDeltaX = OR_DEG_TO_RAD(sense);
835
+        getCamera().setSensitivityX(OR_DEG_TO_RAD(sense));
839 836
     } else if (strcmp(var, "mouse_y") == 0) {
840 837
         float sense = 1.0f;
841 838
         if (sscanf(value, "%f", &sense) != 1) {
842 839
             getConsole().print("set-mouse_y-Error: Invalid value (%s)", value);
843 840
             return -7;
844 841
         }
845
-        mCameraRotationDeltaY = OR_DEG_TO_RAD(sense);
842
+        getCamera().setSensitivityY(OR_DEG_TO_RAD(sense));
846 843
     } else if (strcmp(var, "fps") == 0) {
847 844
         bool fps = false;
848 845
         if (readBool(value, &fps) != 0) {

+ 3
- 3
src/Render.cpp Vedi File

@@ -1025,11 +1025,11 @@ void Render::drawObjects()
1025 1025
 #ifdef USING_FPS_CAMERA
1026 1026
         getCamera().getPosition(curPos);
1027 1027
         glTranslated(curPos[0], curPos[1], curPos[2]);
1028
-        glRotated(getCamera().getYaw(), 0, 1, 0);
1028
+        glRotated(OR_RAD_TO_DEG(getCamera().getRadianYaw()), 0, 1, 0);
1029 1029
         glTranslated(0, 500, 1200);
1030 1030
 #else
1031 1031
         glTranslated(getGame().mLara->pos[0], getGame().mLara->pos[1], getGame().mLara->pos[2]);
1032
-        glRotated(getCamera().getYaw(), 0, 1, 0);
1032
+        glRotated(OR_RAD_TO_DEG(getCamera().getRadianYaw()), 0, 1, 0);
1033 1033
 #endif
1034 1034
 
1035 1035
         drawModel(static_cast<SkeletalModel *>(getGame().mLara->tmpHook));
@@ -1554,7 +1554,7 @@ void Render::drawSprite(sprite_t *sprite)
1554 1554
     glTranslated(sprite->pos[0], sprite->pos[1], sprite->pos[2]);
1555 1555
 
1556 1556
     // Sprites must always face camera, because they have no depth  =)
1557
-    glRotated(getCamera().getYaw(), 0, 1, 0);
1557
+    glRotated(OR_RAD_TO_DEG(getCamera().getRadianYaw()), 0, 1, 0);
1558 1558
 
1559 1559
     switch (mMode)
1560 1560
     {

Loading…
Annulla
Salva