Merge branch 'master' of git://de.git.xonotic.org/xonotic/netradiant

This commit is contained in:
Rudolf Polzer 2011-10-17 06:47:47 +02:00
commit f15b9265ec
8 changed files with 255 additions and 77 deletions

40
.gitattributes vendored
View File

@ -1,5 +1,4 @@
* -crlf
*.0 -diff -crlf
*.1 crlf=input
*.3 crlf=input
@ -27,7 +26,7 @@ branch-manager crlf=input
BSDmakefile crlf=input
bsp2ent crlf=input
*.bsp -diff -crlf
*.cache -diff -crlf
*.cache crlf=input
*.cbp -crlf
*.cbp -diff -crlf
*.c crlf=input
@ -44,15 +43,20 @@ COPYING crlf=input
*.cpp crlf=input
create crlf=input
*.cron crlf=input
crypto-keygen-standalone -diff -crlf
*.css crlf=input
*.cvswrappers crlf=input
*.d0ir crlf=input
*.d0pk -diff -crlf
*.db -diff -crlf
*.db crlf=input
*.db.* crlf=input
*.def2ent crlf=input
*.default crlf=input
*.def crlf=input
*.dem -diff -crlf
*.dev -crlf
dir -diff -crlf
*.directory crlf=input
djpeg -diff -crlf
*.dll -diff -crlf
DOCS -diff -crlf
@ -68,9 +72,13 @@ Doxyfile crlf=input
*.dylib -diff -crlf
empty -diff -crlf
*.EncoderPlugin crlf=input
*.ent crlf=input
etc_svc_git-daemon_run crlf=input
*.flac -diff -crlf
*.flp -diff -crlf
*.form crlf=input
*.framegroups crlf=input
*.fteqccfail -diff -crlf
*.game crlf=input
*.gdb crlf=input
gendox crlf=input
@ -92,10 +100,13 @@ git-svn-update crlf=input
git-update-octopus crlf=input
*.glp crlf=input
*.glsl crlf=input
GPL-2 crlf=input
GPL-3 crlf=input
GPL crlf=input
*.hardwired crlf=input
*.h crlf=input
*.hs crlf=input
*.htaccess crlf=input
*.html crlf=input
*.html-part crlf=input
*.icns -diff -crlf
@ -108,7 +119,7 @@ GPL crlf=input
*.info-2 -diff -crlf
*.info -diff -crlf
*.inl crlf=input
*.instantaction crlf=input
*.iOS crlf=input
*.iqm -diff -crlf
*.java crlf=input
*.jhm crlf=input
@ -140,25 +151,31 @@ makespr32 crlf=input
*.mkdir -diff -crlf
*.mmpz -diff -crlf
*.modules crlf=input
*.mp3 -diff -crlf
*.nib -crlf
*.obj -crlf
OFFSETS -diff -crlf
*.ogg -diff -crlf
*.options crlf=input
*.otf -diff -crlf
pangorc crlf=input
*.part crlf=input
*.patch crlf=input
*.patchsets crlf=input
*.pbxproj crlf=input
*.pc crlf=input
*.pcx -diff -crlf
*.pfb -diff -crlf
*.pfm -diff -crlf
*.php crlf=input
*.pk3 -diff -crlf
PkgInfo crlf=input
*.pl crlf=input
*.plist crlf=input
*.pm crlf=input
*.png -diff -crlf
*.po crlf=input
POSITIONS -diff -crlf
*.pot crlf=input
*.proj -crlf
*.properties crlf=input
*.psd -diff -crlf
@ -167,17 +184,19 @@ POSITIONS -diff -crlf
*.qc crlf=input
*.qdt crlf=input
*.qh crlf=input
*.rar -diff -crlf
*.rb crlf=input
*.rc2 crlf=input
*.rc -crlf
rdjpgcom -diff -crlf
*.readme crlf=input
README crlf=input
*.rtlights -diff -crlf
*.rtlights crlf=input
SCHEMA crlf=input
*.scm crlf=input
sdl-config crlf=input
SDL -diff -crlf
*.sfd -diff -crlf
*.shader crlf=input
*.sh crlf=input
*.skin crlf=input
@ -196,15 +215,16 @@ TMAP -diff -crlf
todo crlf=input
TODO crlf=input
*.ttf -diff -crlf
*.TTF -diff -crlf
*.txt crlf=input
*.txt.* crlf=input
update-shaderlists crlf=input
*.vbs -crlf
*.vcproj -crlf
*.vcxproj crlf=input
versionbuilder crlf=input
*.vhost crlf=input
*.wav -diff -crlf
*.waypoints -diff -crlf
w crlf=input
*.waypoints crlf=input
*.width crlf=input
*.workspace -crlf
wrjpgcom -diff -crlf
@ -214,9 +234,9 @@ wrjpgcom -diff -crlf
xonotic-map-compiler-autobuild crlf=input
xonotic-map-compiler crlf=input
xonotic-map-screenshot crlf=input
xonotic-osx-agl crlf=input
xonotic-osx-sdl crlf=input
*.xpm crlf=input
*.xrns -diff -crlf
*.zip -diff -crlf
zipdiff crlf=input
*.zym -diff -crlf

View File

@ -1400,6 +1400,90 @@ void Patch::ConstructPrefab(const AABB& aabb, EPatchPrefab eType, int axis, std:
return;
}
}
else if (eType == eXactCylinder)
{
int n = (width - 1) / 2; // n = number of segments
setDims(width, height);
// vPos[0] = vector3_subtracted(aabb.origin, aabb.extents);
// vPos[1] = aabb.origin;
// vPos[2] = vector3_added(aabb.origin, aabb.extents);
int i, j;
float f = 1 / cos(M_PI / n);
for(i = 0; i < width; ++i)
{
float angle = (M_PI * i) / n; // 0 to 2pi
float x = vPos[1][0] + (vPos[2][0] - vPos[1][0]) * cos(angle) * ((i&1) ? f : 1.0f);
float y = vPos[1][1] + (vPos[2][1] - vPos[1][1]) * sin(angle) * ((i&1) ? f : 1.0f);
for(j = 0; j < height; ++j)
{
float z = vPos[0][2] + (vPos[2][2] - vPos[0][2]) * (j / (float)(height - 1));
PatchControl *v;
v = &m_ctrl.data()[j*width+i];
v->m_vertex[0] = x;
v->m_vertex[1] = y;
v->m_vertex[2] = z;
}
}
}
else if (eType == eXactCone)
{
int n = (width - 1) / 2; // n = number of segments
setDims(width, height);
// vPos[0] = vector3_subtracted(aabb.origin, aabb.extents);
// vPos[1] = aabb.origin;
// vPos[2] = vector3_added(aabb.origin, aabb.extents);
int i, j;
float f = 1 / cos(M_PI / n);
for(i = 0; i < width; ++i)
{
float angle = (M_PI * i) / n;
for(j = 0; j < height; ++j)
{
float x = vPos[1][0] + (1.0f - (j / (float)(height - 1))) * (vPos[2][0] - vPos[1][0]) * cos(angle) * ((i&1) ? f : 1.0f);
float y = vPos[1][1] + (1.0f - (j / (float)(height - 1))) * (vPos[2][1] - vPos[1][1]) * sin(angle) * ((i&1) ? f : 1.0f);
float z = vPos[0][2] + (vPos[2][2] - vPos[0][2]) * (j / (float)(height - 1));
PatchControl *v;
v = &m_ctrl.data()[j*width+i];
v->m_vertex[0] = x;
v->m_vertex[1] = y;
v->m_vertex[2] = z;
}
}
}
else if (eType == eXactSphere)
{
int n = (width - 1) / 2; // n = number of segments (yaw)
int m = (height - 1) / 2; // m = number of segments (pitch)
setDims(width, height);
// vPos[0] = vector3_subtracted(aabb.origin, aabb.extents);
// vPos[1] = aabb.origin;
// vPos[2] = vector3_added(aabb.origin, aabb.extents);
int i, j;
float f = 1 / cos(M_PI / n);
float g = 1 / cos(M_PI / (2*m));
for(i = 0; i < width; ++i)
{
float angle = (M_PI * i) / n;
for(j = 0; j < height; ++j)
{
float angle2 = (M_PI * j) / (2*m);
float x = vPos[1][0] + (vPos[2][0] - vPos[1][0]) * sin(angle2) * ((j&1) ? g : 1.0f) * cos(angle) * ((i&1) ? f : 1.0f);
float y = vPos[1][1] + (vPos[2][1] - vPos[1][1]) * sin(angle2) * ((j&1) ? g : 1.0f) * sin(angle) * ((i&1) ? f : 1.0f);
float z = vPos[1][2] + (vPos[2][2] - vPos[1][2]) * -cos(angle2) * ((j&1) ? g : 1.0f);
PatchControl *v;
v = &m_ctrl.data()[j*width+i];
v->m_vertex[0] = x;
v->m_vertex[1] = y;
v->m_vertex[2] = z;
}
}
}
else if (eType == eBevel)
{
unsigned char *pIndex;

View File

@ -102,6 +102,9 @@ enum EPatchPrefab
eSqCylinder,
eCone,
eSphere,
eXactCylinder,
eXactSphere,
eXactCone,
};
enum EMatrixMajor

View File

@ -432,6 +432,29 @@ AABB PatchCreator_getBounds()
return AABB(Vector3(0, 0, 0), Vector3(64, 64, 64));
}
void DoNewPatchDlg(EPatchPrefab prefab, int minrows, int mincols, int defrows, int defcols, int maxrows, int maxcols);
void Patch_XactCylinder()
{
UndoableCommand undo("patchCreateXactCylinder");
DoNewPatchDlg(eXactCylinder, 3, 7, 3, 13, 0, 0);
}
void Patch_XactSphere()
{
UndoableCommand undo("patchCreateXactSphere");
DoNewPatchDlg(eXactSphere, 5, 7, 7, 13, 0, 0);
}
void Patch_XactCone()
{
UndoableCommand undo("patchCreateXactCone");
DoNewPatchDlg(eXactCone, 3, 7, 3, 13, 0, 0);
}
void Patch_Cylinder()
{
UndoableCommand undo("patchCreateCylinder");
@ -496,13 +519,11 @@ void Patch_Cone()
Scene_PatchConstructPrefab(GlobalSceneGraph(), PatchCreator_getBounds(), TextureBrowser_GetSelectedShader(GlobalTextureBrowser()), eCone, GlobalXYWnd_getCurrentViewType());
}
void DoNewPatchDlg();
void Patch_Plane()
{
UndoableCommand undo("patchCreatePlane");
DoNewPatchDlg();
DoNewPatchDlg(ePlane, 3, 3, 3, 3, 0, 0);
}
void Patch_InsertInsertColumn()
@ -746,6 +767,9 @@ void Patch_registerCommands()
GlobalCommands_insert("PatchDenseCylinder", FreeCaller<Patch_DenseCylinder>());
GlobalCommands_insert("PatchVeryDenseCylinder", FreeCaller<Patch_VeryDenseCylinder>());
GlobalCommands_insert("PatchSquareCylinder", FreeCaller<Patch_SquareCylinder>());
GlobalCommands_insert("PatchXactCylinder", FreeCaller<Patch_XactCylinder>());
GlobalCommands_insert("PatchXactSphere", FreeCaller<Patch_XactSphere>());
GlobalCommands_insert("PatchXactCone", FreeCaller<Patch_XactCone>());
GlobalCommands_insert("PatchEndCap", FreeCaller<Patch_Endcap>());
GlobalCommands_insert("PatchBevel", FreeCaller<Patch_Bevel>());
GlobalCommands_insert("PatchSquareBevel", FreeCaller<Patch_SquareBevel>());
@ -788,6 +812,7 @@ void Patch_constructMenu(GtkMenu* menu)
create_menu_item_with_mnemonic(menu_in_menu, "Dense Cylinder", "PatchDenseCylinder");
create_menu_item_with_mnemonic(menu_in_menu, "Very Dense Cylinder", "PatchVeryDenseCylinder");
create_menu_item_with_mnemonic(menu_in_menu, "Square Cylinder", "PatchSquareCylinder");
create_menu_item_with_mnemonic(menu_in_menu, "Exact Cylinder...", "PatchXactCylinder");
}
menu_separator (menu);
create_menu_item_with_mnemonic(menu, "End cap", "PatchEndCap");
@ -801,7 +826,10 @@ void Patch_constructMenu(GtkMenu* menu)
}
menu_separator (menu);
create_menu_item_with_mnemonic(menu, "Cone", "PatchCone");
create_menu_item_with_mnemonic(menu, "Exact Cone...", "PatchXactCone");
menu_separator (menu);
create_menu_item_with_mnemonic(menu, "Sphere", "PatchSphere");
create_menu_item_with_mnemonic(menu, "Exact Sphere...", "PatchXactSphere");
menu_separator (menu);
create_menu_item_with_mnemonic(menu, "Simple Patch Mesh...", "SimplePatchMesh");
menu_separator (menu);
@ -866,7 +894,7 @@ void Patch_constructMenu(GtkMenu* menu)
#include "gtkutil/dialog.h"
#include "gtkutil/widget.h"
void DoNewPatchDlg()
void DoNewPatchDlg(EPatchPrefab prefab, int minrows, int mincols, int defrows, int defcols, int maxrows, int maxcols)
{
ModalDialog dialog;
GtkComboBox* width;
@ -902,21 +930,23 @@ void DoNewPatchDlg()
{
GtkComboBox* combo = GTK_COMBO_BOX(gtk_combo_box_new_text());
gtk_combo_box_append_text(combo, "3");
gtk_combo_box_append_text(combo, "5");
gtk_combo_box_append_text(combo, "7");
gtk_combo_box_append_text(combo, "9");
gtk_combo_box_append_text(combo, "11");
gtk_combo_box_append_text(combo, "13");
gtk_combo_box_append_text(combo, "15");
gtk_combo_box_append_text(combo, "17");
gtk_combo_box_append_text(combo, "19");
gtk_combo_box_append_text(combo, "21");
gtk_combo_box_append_text(combo, "23");
gtk_combo_box_append_text(combo, "25");
gtk_combo_box_append_text(combo, "27");
gtk_combo_box_append_text(combo, "29");
gtk_combo_box_append_text(combo, "31"); // MAX_PATCH_SIZE is 32, so we should be able to do 31...
#define D_ITEM(x) if(x >= mincols && (!maxcols || x <= maxcols)) gtk_combo_box_append_text(combo, #x)
D_ITEM(3);
D_ITEM(5);
D_ITEM(7);
D_ITEM(9);
D_ITEM(11);
D_ITEM(13);
D_ITEM(15);
D_ITEM(17);
D_ITEM(19);
D_ITEM(21);
D_ITEM(23);
D_ITEM(25);
D_ITEM(27);
D_ITEM(29);
D_ITEM(31); // MAX_PATCH_SIZE is 32, so we should be able to do 31...
#undef D_ITEM
gtk_widget_show(GTK_WIDGET(combo));
gtk_table_attach(table, GTK_WIDGET(combo), 1, 2, 0, 1,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
@ -926,21 +956,23 @@ void DoNewPatchDlg()
}
{
GtkComboBox* combo = GTK_COMBO_BOX(gtk_combo_box_new_text());
gtk_combo_box_append_text(combo, "3");
gtk_combo_box_append_text(combo, "5");
gtk_combo_box_append_text(combo, "7");
gtk_combo_box_append_text(combo, "9");
gtk_combo_box_append_text(combo, "11");
gtk_combo_box_append_text(combo, "13");
gtk_combo_box_append_text(combo, "15");
gtk_combo_box_append_text(combo, "17");
gtk_combo_box_append_text(combo, "19");
gtk_combo_box_append_text(combo, "21");
gtk_combo_box_append_text(combo, "23");
gtk_combo_box_append_text(combo, "25");
gtk_combo_box_append_text(combo, "27");
gtk_combo_box_append_text(combo, "29");
gtk_combo_box_append_text(combo, "31"); // MAX_PATCH_SIZE is 32, so we should be able to do 31...
#define D_ITEM(x) if(x >= minrows && (!maxrows || x <= maxrows)) gtk_combo_box_append_text(combo, #x)
D_ITEM(3);
D_ITEM(5);
D_ITEM(7);
D_ITEM(9);
D_ITEM(11);
D_ITEM(13);
D_ITEM(15);
D_ITEM(17);
D_ITEM(19);
D_ITEM(21);
D_ITEM(23);
D_ITEM(25);
D_ITEM(27);
D_ITEM(29);
D_ITEM(31); // MAX_PATCH_SIZE is 32, so we should be able to do 31...
#undef D_ITEM
gtk_widget_show(GTK_WIDGET(combo));
gtk_table_attach(table, GTK_WIDGET(combo), 1, 2, 1, 2,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
@ -969,15 +1001,15 @@ void DoNewPatchDlg()
}
// Initialize dialog
gtk_combo_box_set_active(width, 0);
gtk_combo_box_set_active(height, 0);
gtk_combo_box_set_active(width, (defcols - mincols) / 2);
gtk_combo_box_set_active(height, (defrows - minrows) / 2);
if(modal_dialog_show(window, dialog) == eIDOK)
{
int w = gtk_combo_box_get_active(width) * 2 + 3;
int h = gtk_combo_box_get_active(height) * 2 + 3;
int w = gtk_combo_box_get_active(width) * 2 + mincols;
int h = gtk_combo_box_get_active(height) * 2 + minrows;
Scene_PatchConstructPrefab(GlobalSceneGraph(), PatchCreator_getBounds(), TextureBrowser_GetSelectedShader(GlobalTextureBrowser()), ePlane, GlobalXYWnd_getCurrentViewType(), w, h);
Scene_PatchConstructPrefab(GlobalSceneGraph(), PatchCreator_getBounds(), TextureBrowser_GetSelectedShader(GlobalTextureBrowser()), prefab, GlobalXYWnd_getCurrentViewType(), w, h);
}
gtk_widget_destroy(GTK_WIDGET(window));

View File

@ -1827,7 +1827,7 @@ void OpenGLState_apply(const OpenGLState& self, OpenGLState& current, unsigned i
{
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
//qglEnable(GL_RESCALE_NORMAL);
glEnable(GL_RESCALE_NORMAL);
glEnableClientState(GL_NORMAL_ARRAY);
GlobalOpenGL_debugAssertNoErrors();
g_normalArray_enabled = true;
@ -1836,7 +1836,7 @@ void OpenGLState_apply(const OpenGLState& self, OpenGLState& current, unsigned i
{
glDisable(GL_LIGHTING);
glDisable(GL_COLOR_MATERIAL);
//qglDisable(GL_RESCALE_NORMAL);
glDisable(GL_RESCALE_NORMAL);
glDisableClientState(GL_NORMAL_ARRAY);
GlobalOpenGL_debugAssertNoErrors();
g_normalArray_enabled = false;

View File

@ -810,7 +810,7 @@ int BSPMain( int argc, char **argv )
{
npDegrees = atof( argv[ i + 1 ] );
if( npDegrees < 0.0f )
shadeAngleDegrees = 0.0f;
npDegrees = 0.0f;
else if( npDegrees > 0.0f )
Sys_Printf( "Forcing nonplanar surfaces with a breaking angle of %f degrees\n", npDegrees );
i++;
@ -856,6 +856,33 @@ int BSPMain( int argc, char **argv )
Sys_Printf( "Creating meta surfaces from brush faces\n" );
meta = qtrue;
}
else if( !strcmp( argv[ i ], "-metaadequatescore" ) )
{
metaAdequateScore = atoi( argv[ i + 1 ]);
if( metaAdequateScore < 0 )
metaAdequateScore = -1;
i++;
if( metaAdequateScore >= 0 )
Sys_Printf( "Setting ADEQUATE meta score to %d (see surface_meta.c)\n", metaAdequateScore );
}
else if( !strcmp( argv[ i ], "-metagoodscore" ) )
{
metaGoodScore = atoi( argv[ i + 1 ]);
if( metaGoodScore < 0 )
metaGoodScore = -1;
i++;
if( metaGoodScore >= 0 )
Sys_Printf( "Setting GOOD meta score to %d (see surface_meta.c)\n", metaGoodScore );
}
else if( !strcmp( argv[ i ], "-metamaxbboxdistance" ) )
{
metaMaxBBoxDistance = atof( argv[ i + 1 ]);
if( metaMaxBBoxDistance < 0 )
metaMaxBBoxDistance = -1;
i++;
if( metaMaxBBoxDistance >= 0 )
Sys_Printf( "Setting meta maximum bounding box distance to %f\n", metaMaxBBoxDistance );
}
else if( !strcmp( argv[ i ], "-patchmeta" ) )
{
Sys_Printf( "Creating meta surfaces from patches\n" );

View File

@ -2034,6 +2034,9 @@ Q_EXTERN qboolean debugPortals Q_ASSIGN( qfalse );
Q_EXTERN qboolean lightmapTriangleCheck Q_ASSIGN(qfalse);
Q_EXTERN qboolean lightmapExtraVisClusterNudge Q_ASSIGN(qfalse);
Q_EXTERN qboolean lightmapFill Q_ASSIGN(qfalse);
Q_EXTERN int metaAdequateScore Q_ASSIGN( -1 );
Q_EXTERN int metaGoodScore Q_ASSIGN( -1 );
Q_EXTERN float metaMaxBBoxDistance Q_ASSIGN( -1 );
#if Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX
// Increasing the normalEpsilon to compensate for new logic in SnapNormal(), where

View File

@ -1388,17 +1388,20 @@ returns the score of the triangle added
#define AXIS_SCORE 100000
#define AXIS_MIN 100000
#define VERT_SCORE 10000
#define SURFACE_SCORE 1000
#define SURFACE_SCORE 1000
#define ST_SCORE 50
#define ST_SCORE2 (2 * (ST_SCORE))
#define ADEQUATE_SCORE ((AXIS_MIN) + 1 * (VERT_SCORE))
#define GOOD_SCORE ((AXIS_MIN) + 2 * (VERT_SCORE) + 4 * (ST_SCORE))
#define PERFECT_SCORE ((AXIS_MIN) + 3 * (VERT_SCORE) + (SURFACE_SCORE) + 4 * (ST_SCORE))
//#define MAX_BBOX_DISTANCE 16
#define DEFAULT_ADEQUATE_SCORE ((AXIS_MIN) + 1 * (VERT_SCORE))
#define DEFAULT_GOOD_SCORE ((AXIS_MIN) + 2 * (VERT_SCORE) + 4 * (ST_SCORE))
#define PERFECT_SCORE ((AXIS_MIN) + 3 * (VERT_SCORE) + (SURFACE_SCORE) + 4 * (ST_SCORE))
#define ADEQUATE_SCORE (metaAdequateScore >= 0 ? metaAdequateScore : DEFAULT_ADEQUATE_SCORE)
#define GOOD_SCORE (metaGoodScore >= 0 ? metaGoodScore : DEFAULT_GOOD_SCORE)
static int AddMetaTriangleToSurface( mapDrawSurface_t *ds, metaTriangle_t *tri, qboolean testAdd )
{
vec3_t p;
int i, score, coincident, ai, bi, ci, oldTexRange[ 2 ];
float lmMax;
vec3_t mins, maxs;
@ -1433,31 +1436,37 @@ static int AddMetaTriangleToSurface( mapDrawSurface_t *ds, metaTriangle_t *tri,
return 0;
}
#if MAX_BBOX_DISTANCE > 0
VectorCopy( ds->mins, mins );
VectorCopy( ds->maxs, maxs );
mins[0] -= MAX_BBOX_DISTANCE;
mins[1] -= MAX_BBOX_DISTANCE;
mins[2] -= MAX_BBOX_DISTANCE;
maxs[0] += MAX_BBOX_DISTANCE;
maxs[1] += MAX_BBOX_DISTANCE;
maxs[2] += MAX_BBOX_DISTANCE;
if(metaMaxBBoxDistance >= 0)
{
if(ds->numIndexes > 0)
{
VectorCopy( ds->mins, mins );
VectorCopy( ds->maxs, maxs );
mins[0] -= metaMaxBBoxDistance;
mins[1] -= metaMaxBBoxDistance;
mins[2] -= metaMaxBBoxDistance;
maxs[0] += metaMaxBBoxDistance;
maxs[1] += metaMaxBBoxDistance;
maxs[2] += metaMaxBBoxDistance;
#define CHECK_1D(mins, v, maxs) ((mins) <= (v) && (v) <= (maxs))
#define CHECK_3D(mins, v, maxs) (CHECK_1D((mins)[0], (v)[0], (maxs)[0]) && CHECK_1D((mins)[1], (v)[1], (maxs)[1]) && CHECK_1D((mins)[2], (v)[2], (maxs)[2]))
VectorCopy(metaVerts[ tri->indexes[ 0 ] ].xyz, p);
if(!CHECK_3D(mins, p, maxs))
{
VectorCopy(metaVerts[ tri->indexes[ 1 ] ].xyz, p);
if(!CHECK_3D(mins, p, maxs))
{
VectorCopy(metaVerts[ tri->indexes[ 2 ] ].xyz, p);
VectorCopy(metaVerts[ tri->indexes[ 0 ] ].xyz, p);
if(!CHECK_3D(mins, p, maxs))
return 0;
}
}
{
VectorCopy(metaVerts[ tri->indexes[ 1 ] ].xyz, p);
if(!CHECK_3D(mins, p, maxs))
{
VectorCopy(metaVerts[ tri->indexes[ 2 ] ].xyz, p);
if(!CHECK_3D(mins, p, maxs))
return 0;
}
}
#undef CHECK_3D
#undef CHECK_1D
#endif
}
}
/* set initial score */
score = tri->surfaceNum == ds->surfaceNum ? SURFACE_SCORE : 0;