# quake3 / q3map / brush_primit.c

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52``` ```/* =========================================================================== Copyright (C) 1999-2005 Id Software, Inc. This file is part of Quake III Arena source code. Quake III Arena source code is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Quake III Arena source code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ #include "qbsp.h" // global flag int g_bBrushPrimit; // NOTE : ComputeAxisBase here and in editor code must always BE THE SAME ! // WARNING : special case behaviour of atan2(y,x) <-> atan(y/x) might not be the same everywhere when x == 0 // rotation by (0,RotY,RotZ) assigns X to normal void ComputeAxisBase(vec3_t normal,vec3_t texX,vec3_t texY) { vec_t RotY,RotZ; // do some cleaning if (fabs(normal[0])<1e-6) normal[0]=0.0f; if (fabs(normal[1])<1e-6) normal[1]=0.0f; if (fabs(normal[2])<1e-6) normal[2]=0.0f; // compute the two rotations around Y and Z to rotate X to normal RotY=-atan2(normal[2],sqrt(normal[1]*normal[1]+normal[0]*normal[0])); RotZ=atan2(normal[1],normal[0]); // rotate (0,1,0) and (0,0,1) to compute texX and texY texX[0]=-sin(RotZ); texX[1]=cos(RotZ); texX[2]=0; // the texY vector is along -Z ( T texture coorinates axis ) texY[0]=-sin(RotY)*cos(RotZ); texY[1]=-sin(RotY)*sin(RotZ); texY[2]=-cos(RotY); } ```