/* Returns a version of 'key' where all numbers have been replaced by zeroes. If there were none, returns "". */ static QCString zeroKey( const char* key ) { QCString zeroed( strlen( key ) + 1 ); char *z = zeroed.data(); int i = 0, j = 0; int len; bool metSomething = FALSE; while ( key[i] != '\0' ) { len = numberLength( key + i ); if ( len > 0 ) { i += len; z[j++] = '0'; metSomething = TRUE; } else { z[j++] = key[i++]; } } z[j] = '\0'; if ( metSomething ) return zeroed; else return ""; }
mat4f persp(float fovy, float aspect, float near_plane, float far_plane) { float range = tan(math::to_radians(fovy / 2.0f)) * near_plane; float left = -range * aspect; float right = range * aspect; float bottom = -range; float top = range; mat4f result = zeroed(); result[0][0] = (2.0f * near_plane) / (right - left); result[1][1] = (2.0f * near_plane) / (top - bottom); result[2][2] = -(far_plane + near_plane) / (far_plane - near_plane); result[2][3] = -1.0f; result[3][2] = -(2.0f * far_plane * near_plane) / (far_plane - near_plane); return result; }