|
|
@@ -439,14 +439,57 @@ void UpdateCamera(Camera *camera)
|
|
|
if (CAMERA.angle.y > CAMERA_FIRST_PERSON_MIN_CLAMP*DEG2RAD) CAMERA.angle.y = CAMERA_FIRST_PERSON_MIN_CLAMP*DEG2RAD;
|
|
|
else if (CAMERA.angle.y < CAMERA_FIRST_PERSON_MAX_CLAMP*DEG2RAD) CAMERA.angle.y = CAMERA_FIRST_PERSON_MAX_CLAMP*DEG2RAD;
|
|
|
|
|
|
- // Recalculate camera target considering translation and rotation
|
|
|
- Matrix translation = MatrixTranslate(0, 0, (CAMERA.targetDistance/CAMERA_FREE_PANNING_DIVIDER));
|
|
|
- Matrix rotation = MatrixRotateXYZ((Vector3){ PI*2 - CAMERA.angle.y, PI*2 - CAMERA.angle.x, 0 });
|
|
|
- Matrix transform = MatrixMultiply(translation, rotation);
|
|
|
-
|
|
|
- camera->target.x = camera->position.x - transform.m12;
|
|
|
- camera->target.y = camera->position.y - transform.m13;
|
|
|
- camera->target.z = camera->position.z - transform.m14;
|
|
|
+ // Calculate translation matrix
|
|
|
+ Matrix matTranslation = { 1.0f, 0.0f, 0.0f, 0.0f,
|
|
|
+ 0.0f, 1.0f, 0.0f, 0.0f,
|
|
|
+ 0.0f, 0.0f, 1.0f, (CAMERA.targetDistance/CAMERA_FREE_PANNING_DIVIDER),
|
|
|
+ 0.0f, 0.0f, 0.0f, 1.0f };
|
|
|
+
|
|
|
+ // Calculate rotation matrix
|
|
|
+ Matrix matRotation = { 1.0f, 0.0f, 0.0f, 0.0f,
|
|
|
+ 0.0f, 1.0f, 0.0f, 0.0f,
|
|
|
+ 0.0f, 0.0f, 1.0f, 0.0f,
|
|
|
+ 0.0f, 0.0f, 0.0f, 1.0f };
|
|
|
+
|
|
|
+ float cosz = cosf(0.0f);
|
|
|
+ float sinz = sinf(0.0f);
|
|
|
+ float cosy = cosf(-(PI*2 - CAMERA.angle.x));
|
|
|
+ float siny = sinf(-(PI*2 - CAMERA.angle.x));
|
|
|
+ float cosx = cosf(-(PI*2 - CAMERA.angle.y));
|
|
|
+ float sinx = sinf(-(PI*2 - CAMERA.angle.y));
|
|
|
+
|
|
|
+ matRotation.m0 = cosz*cosy;
|
|
|
+ matRotation.m4 = (cosz*siny*sinx) - (sinz*cosx);
|
|
|
+ matRotation.m8 = (cosz*siny*cosx) + (sinz*sinx);
|
|
|
+ matRotation.m1 = sinz*cosy;
|
|
|
+ matRotation.m5 = (sinz*siny*sinx) + (cosz*cosx);
|
|
|
+ matRotation.m9 = (sinz*siny*cosx) - (cosz*sinx);
|
|
|
+ matRotation.m2 = -siny;
|
|
|
+ matRotation.m6 = cosy*sinx;
|
|
|
+ matRotation.m10= cosy*cosx;
|
|
|
+
|
|
|
+ // Multiply translation and rotation matrices
|
|
|
+ Matrix matTransform = { 0 };
|
|
|
+ matTransform.m0 = matTranslation.m0*matRotation.m0 + matTranslation.m1*matRotation.m4 + matTranslation.m2*matRotation.m8 + matTranslation.m3*matRotation.m12;
|
|
|
+ matTransform.m1 = matTranslation.m0*matRotation.m1 + matTranslation.m1*matRotation.m5 + matTranslation.m2*matRotation.m9 + matTranslation.m3*matRotation.m13;
|
|
|
+ matTransform.m2 = matTranslation.m0*matRotation.m2 + matTranslation.m1*matRotation.m6 + matTranslation.m2*matRotation.m10 + matTranslation.m3*matRotation.m14;
|
|
|
+ matTransform.m3 = matTranslation.m0*matRotation.m3 + matTranslation.m1*matRotation.m7 + matTranslation.m2*matRotation.m11 + matTranslation.m3*matRotation.m15;
|
|
|
+ matTransform.m4 = matTranslation.m4*matRotation.m0 + matTranslation.m5*matRotation.m4 + matTranslation.m6*matRotation.m8 + matTranslation.m7*matRotation.m12;
|
|
|
+ matTransform.m5 = matTranslation.m4*matRotation.m1 + matTranslation.m5*matRotation.m5 + matTranslation.m6*matRotation.m9 + matTranslation.m7*matRotation.m13;
|
|
|
+ matTransform.m6 = matTranslation.m4*matRotation.m2 + matTranslation.m5*matRotation.m6 + matTranslation.m6*matRotation.m10 + matTranslation.m7*matRotation.m14;
|
|
|
+ matTransform.m7 = matTranslation.m4*matRotation.m3 + matTranslation.m5*matRotation.m7 + matTranslation.m6*matRotation.m11 + matTranslation.m7*matRotation.m15;
|
|
|
+ matTransform.m8 = matTranslation.m8*matRotation.m0 + matTranslation.m9*matRotation.m4 + matTranslation.m10*matRotation.m8 + matTranslation.m11*matRotation.m12;
|
|
|
+ matTransform.m9 = matTranslation.m8*matRotation.m1 + matTranslation.m9*matRotation.m5 + matTranslation.m10*matRotation.m9 + matTranslation.m11*matRotation.m13;
|
|
|
+ matTransform.m10 = matTranslation.m8*matRotation.m2 + matTranslation.m9*matRotation.m6 + matTranslation.m10*matRotation.m10 + matTranslation.m11*matRotation.m14;
|
|
|
+ matTransform.m11 = matTranslation.m8*matRotation.m3 + matTranslation.m9*matRotation.m7 + matTranslation.m10*matRotation.m11 + matTranslation.m11*matRotation.m15;
|
|
|
+ matTransform.m12 = matTranslation.m12*matRotation.m0 + matTranslation.m13*matRotation.m4 + matTranslation.m14*matRotation.m8 + matTranslation.m15*matRotation.m12;
|
|
|
+ matTransform.m13 = matTranslation.m12*matRotation.m1 + matTranslation.m13*matRotation.m5 + matTranslation.m14*matRotation.m9 + matTranslation.m15*matRotation.m13;
|
|
|
+ matTransform.m14 = matTranslation.m12*matRotation.m2 + matTranslation.m13*matRotation.m6 + matTranslation.m14*matRotation.m10 + matTranslation.m15*matRotation.m14;
|
|
|
+ matTransform.m15 = matTranslation.m12*matRotation.m3 + matTranslation.m13*matRotation.m7 + matTranslation.m14*matRotation.m11 + matTranslation.m15*matRotation.m15;
|
|
|
+
|
|
|
+ camera->target.x = camera->position.x - matTransform.m12;
|
|
|
+ camera->target.y = camera->position.y - matTransform.m13;
|
|
|
+ camera->target.z = camera->position.z - matTransform.m14;
|
|
|
|
|
|
// If movement detected (some key pressed), increase swinging
|
|
|
for (int i = 0; i < 6; i++) if (direction[i]) { swingCounter++; break; }
|