| 207 | } |
| 208 | |
| 209 | void SimpleCamera::update() |
| 210 | { |
| 211 | b3Scalar yawRad = m_data->m_yaw * b3Scalar(0.01745329251994329547); // rads per deg |
| 212 | b3Scalar pitchRad = m_data->m_pitch * b3Scalar(0.01745329251994329547); // rads per deg |
| 213 | b3Scalar rollRad = 0.0; |
| 214 | b3Quaternion eyeRot; |
| 215 | |
| 216 | int forwardAxis(-1); |
| 217 | switch (m_data->m_cameraUpAxis) |
| 218 | { |
| 219 | case 1: |
| 220 | forwardAxis = 2; |
| 221 | m_data->m_cameraUp = b3MakeVector3(0, 1, 0); |
| 222 | //gLightPos = b3MakeVector3(-50.f,100,30); |
| 223 | eyeRot.setEulerZYX(rollRad, yawRad, -pitchRad); |
| 224 | break; |
| 225 | case 2: |
| 226 | forwardAxis = 1; |
| 227 | m_data->m_cameraUp = b3MakeVector3(0, 0, 1); |
| 228 | //gLightPos = b3MakeVector3(-50.f,30,100); |
| 229 | eyeRot.setEulerZYX(yawRad, rollRad, pitchRad); |
| 230 | break; |
| 231 | default: |
| 232 | { |
| 233 | //b3Assert(0); |
| 234 | return; |
| 235 | } |
| 236 | }; |
| 237 | |
| 238 | b3Vector3 eyePos = b3MakeVector3(0, 0, 0); |
| 239 | eyePos[forwardAxis] = -m_data->m_cameraDistance; |
| 240 | eyePos = b3Matrix3x3(eyeRot) * eyePos; |
| 241 | |
| 242 | m_data->m_cameraPosition = eyePos; |
| 243 | |
| 244 | m_data->m_cameraPosition += m_data->m_cameraTargetPosition; |
| 245 | |
| 246 | m_data->m_cameraForward = m_data->m_cameraTargetPosition - m_data->m_cameraPosition; |
| 247 | if (m_data->m_cameraForward.length2() < B3_EPSILON) |
| 248 | { |
| 249 | m_data->m_cameraForward.setValue(1.f, 0.f, 0.f); |
| 250 | } |
| 251 | else |
| 252 | { |
| 253 | m_data->m_cameraForward.normalize(); |
| 254 | } |
| 255 | } |
| 256 | |
| 257 | void SimpleCamera::getCameraProjectionMatrix(float projectionMatrix[16]) const |
| 258 | { |
no test coverage detected