| 1084 | // ------------------------------------------------------------------------------------ |
| 1085 | |
| 1086 | void SetupCamera(bool mirrored = false) |
| 1087 | { |
| 1088 | glMatrixMode(GL_PROJECTION); |
| 1089 | glLoadIdentity(); |
| 1090 | float aspectRatio = ((float)glutGet(GLUT_WINDOW_WIDTH)/(float)glutGet(GLUT_WINDOW_HEIGHT)); |
| 1091 | gluPerspective(gCamera.fov, aspectRatio, zNear, zFar); |
| 1092 | glMatrixMode(GL_MODELVIEW); |
| 1093 | glLoadIdentity(); |
| 1094 | |
| 1095 | if (gCamera.trackballMode) { |
| 1096 | gCamera.trackballCenter.x = 0.0f; |
| 1097 | gCamera.trackballCenter.z = 0.0f; |
| 1098 | gCamera.pos = gCamera.trackballCenter - gCamera.forward * gCamera.trackballRadius; |
| 1099 | } |
| 1100 | |
| 1101 | |
| 1102 | gSampleScene->getCamera(gCamera.pos, gCamera.forward); |
| 1103 | |
| 1104 | PxVec3 pos = gCamera.pos; |
| 1105 | PxVec3 dir = gCamera.forward; |
| 1106 | PxVec3 apos = gCamera.pos + dir; |
| 1107 | |
| 1108 | |
| 1109 | gluLookAt(pos.x, pos.y, pos.z, pos.x + dir.x, pos.y + dir.y, pos.z + dir.z, 0.0f, 1.0f, 0.0f); |
| 1110 | |
| 1111 | if (mirrored) { |
| 1112 | PxTransform trans; |
| 1113 | |
| 1114 | PxVec3 waterN(0.0f, 1.0f, 0.0f); |
| 1115 | PxVec3 waterP(0.0f,gGroundY,0.0f); |
| 1116 | float QQQ = 0.00f; |
| 1117 | waterP.y += QQQ; |
| 1118 | float np2 = 2.0f*waterN.dot(waterP); |
| 1119 | |
| 1120 | PxVec3 r0 = PxVec3(1.0f, 0.0f, 0.0f) - 2*waterN.x*waterN; |
| 1121 | PxVec3 r1 = PxVec3(0.0f, 1.0f, 0.0f) - 2*waterN.y*waterN; |
| 1122 | PxVec3 r2 = PxVec3(0.0f, 0.0f, 1.0f) - 2*waterN.z*waterN; |
| 1123 | PxVec3 t = np2*waterN; |
| 1124 | |
| 1125 | float matGL[16] = { |
| 1126 | r0.x, r1.x, r2.x, 0.0f, |
| 1127 | r0.y, r1.y, r2.y, 0.0f, |
| 1128 | r0.z, r1.z, r2.z, 0.0f, |
| 1129 | t.x, t.y, t.z, 1.0f}; |
| 1130 | |
| 1131 | glMultMatrixf(matGL); |
| 1132 | |
| 1133 | } |
| 1134 | |
| 1135 | |
| 1136 | glGetFloatv(GL_MODELVIEW_MATRIX, modelMatrix); |
| 1137 | glGetFloatv(GL_PROJECTION_MATRIX, projMatrix); |
| 1138 | |
| 1139 | gDefaultShader->updateCamera(modelMatrix, projMatrix); |
| 1140 | if (gSampleScene != NULL) { |
| 1141 | for (int i = 0; i < (int)gSampleScene->getShaders().size(); i++) |
| 1142 | gSampleScene->getShaders()[i]->updateCamera(modelMatrix, projMatrix); |
| 1143 | gSampleScene->setCamera(gCamera.pos, gCamera.forward, PxVec3(0,1,0), gCamera.fov); |
no test coverage detected