void renderCamSetupGL ( Scene& scene, int prog ) { // Set model, view, projection matrices Camera3D* cam = scene.getCamera (); Matrix4F ident; ident.Identity(); glProgramUniformMatrix4fv( prog, scene.getParam(prog, UMODEL), 1, GL_FALSE, ident.GetDataF() ); glProgramUniformMatrix4fv( prog, scene.getParam(prog, UVIEW), 1, GL_FALSE, cam->getViewMatrix().GetDataF() ); glProgramUniformMatrix4fv( prog, scene.getParam(prog, UPROJ), 1, GL_FALSE, cam->getProjMatrix().GetDataF() ); }
void Camera3D::updateFrustum () { Matrix4F mv; mv = tileproj_matrix; // Compute the model-view-projection matrix mv *= view_matrix; float* mvm = mv.GetDataF(); float t; // Right plane frustum[0][0] = mvm[ 3] - mvm[ 0]; frustum[0][1] = mvm[ 7] - mvm[ 4]; frustum[0][2] = mvm[11] - mvm[ 8]; frustum[0][3] = mvm[15] - mvm[12]; t = sqrt( frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2] ); frustum[0][0] /= t; frustum[0][1] /= t; frustum[0][2] /= t; frustum[0][3] /= t; // Left plane frustum[1][0] = mvm[ 3] + mvm[ 0]; frustum[1][1] = mvm[ 7] + mvm[ 4]; frustum[1][2] = mvm[11] + mvm[ 8]; frustum[1][3] = mvm[15] + mvm[12]; t = sqrt( frustum[1][0] * frustum[1][0] + frustum[1][1] * frustum[1][1] + frustum[1][2] * frustum[1][2] ); frustum[1][0] /= t; frustum[1][1] /= t; frustum[1][2] /= t; frustum[1][3] /= t; // Bottom plane frustum[2][0] = mvm[ 3] + mvm[ 1]; frustum[2][1] = mvm[ 7] + mvm[ 5]; frustum[2][2] = mvm[11] + mvm[ 9]; frustum[2][3] = mvm[15] + mvm[13]; t = sqrt( frustum[2][0] * frustum[2][0] + frustum[2][1] * frustum[2][1] + frustum[2][2] * frustum[2][2] ); frustum[2][0] /= t; frustum[2][1] /= t; frustum[2][2] /= t; frustum[2][3] /= t; // Top plane frustum[3][0] = mvm[ 3] - mvm[ 1]; frustum[3][1] = mvm[ 7] - mvm[ 5]; frustum[3][2] = mvm[11] - mvm[ 9]; frustum[3][3] = mvm[15] - mvm[13]; t = sqrt( frustum[3][0] * frustum[3][0] + frustum[3][1] * frustum[3][1] + frustum[3][2] * frustum[3][2] ); frustum[3][0] /= t; frustum[3][1] /= t; frustum[3][2] /= t; frustum[3][3] /= t; // Far plane frustum[4][0] = mvm[ 3] - mvm[ 2]; frustum[4][1] = mvm[ 7] - mvm[ 6]; frustum[4][2] = mvm[11] - mvm[10]; frustum[4][3] = mvm[15] - mvm[14]; t = sqrt( frustum[4][0] * frustum[4][0] + frustum[4][1] * frustum[4][1] + frustum[4][2] * frustum[4][2] ); frustum[4][0] /= t; frustum[4][1] /= t; frustum[4][2] /= t; frustum[4][3] /= t; // Near plane frustum[5][0] = mvm[ 3] + mvm[ 2]; frustum[5][1] = mvm[ 7] + mvm[ 6]; frustum[5][2] = mvm[11] + mvm[10]; frustum[5][3] = mvm[15] + mvm[14]; t = sqrt( frustum[5][0] * frustum[5][0] + frustum[5][1] * frustum[5][1] + frustum[5][2] * frustum[5][2] ); frustum[5][0] /= t; frustum[5][1] /= t; frustum[5][2] /= t; frustum[5][3] /= t; }