::zerowing-base=428

This commit is contained in:
Rudolf Polzer 2011-01-12 13:58:55 +01:00
parent b188aed61b
commit 34a1e2074b
17 changed files with 1743 additions and 14 deletions

View File

@ -98,6 +98,9 @@ vec_t VectorLength(const vec3_t v);
void VectorMA( const vec3_t va, vec_t scale, const vec3_t vb, vec3_t vc );
void _CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross);
// I need this define in order to test some of the regression tests from time to time.
// This define affect the precision of VectorNormalize() function only.
#define MATHLIB_VECTOR_NORMALIZE_PRECISION_FIX 1
vec_t VectorNormalize (const vec3_t in, vec3_t out);
vec_t ColorNormalize( const vec3_t in, vec3_t out );
void VectorInverse (vec3_t v);

View File

@ -78,6 +78,54 @@ qboolean VectorIsOnAxialPlane(vec3_t v)
return qfalse;
}
/*
================
VectorIsOnAxis
================
*/
qboolean VectorIsOnAxis(vec3_t v)
{
int i, zeroComponentCount;
zeroComponentCount = 0;
for (i = 0; i < 3; i++)
{
if (v[i] == 0.0)
{
zeroComponentCount++;
}
}
if (zeroComponentCount > 1)
{
// The zero vector will be on axis.
return qtrue;
}
return qfalse;
}
/*
================
VectorIsOnAxialPlane
================
*/
qboolean VectorIsOnAxialPlane(vec3_t v)
{
int i;
for (i = 0; i < 3; i++)
{
if (v[i] == 0.0)
{
// The zero vector will be on axial plane.
return qtrue;
}
}
return qfalse;
}
/*
================
MakeNormalVectors
@ -168,6 +216,8 @@ void _VectorCopy (vec3_t in, vec3_t out)
vec_t VectorNormalize( const vec3_t in, vec3_t out ) {
#if MATHLIB_VECTOR_NORMALIZE_PRECISION_FIX
// The sqrt() function takes double as an input and returns double as an
// output according the the man pages on Debian and on FreeBSD. Therefore,
// I don't see a reason why using a double outright (instead of using the
@ -191,6 +241,27 @@ vec_t VectorNormalize( const vec3_t in, vec3_t out ) {
out[2] = (vec_t) (z / length);
return (vec_t) length;
#else
vec_t length, ilength;
length = (vec_t)sqrt (in[0]*in[0] + in[1]*in[1] + in[2]*in[2]);
if (length == 0)
{
VectorClear (out);
return 0;
}
ilength = 1.0f/length;
out[0] = in[0]*ilength;
out[1] = in[1]*ilength;
out[2] = in[2]*ilength;
return length;
#endif
}
vec_t ColorNormalize( const vec3_t in, vec3_t out ) {
@ -791,3 +862,153 @@ vec_accu_t VectorNormalizeAccu(const vec3_accu_t in, vec3_accu_t out)
return length;
}
////////////////////////////////////////////////////////////////////////////////
// Below is double-precision math stuff. This was initially needed by the new
// "base winding" code in q3map2 brush processing in order to fix the famous
// "disappearing triangles" issue. These definitions can be used wherever extra
// precision is needed.
////////////////////////////////////////////////////////////////////////////////
/*
=================
VectorLengthAccu
=================
*/
vec_accu_t VectorLengthAccu(const vec3_accu_t v)
{
return (vec_accu_t) sqrt((v[0] * v[0]) + (v[1] * v[1]) + (v[2] * v[2]));
}
/*
=================
DotProductAccu
=================
*/
vec_accu_t DotProductAccu(const vec3_accu_t a, const vec3_accu_t b)
{
return (a[0] * b[0]) + (a[1] * b[1]) + (a[2] * b[2]);
}
/*
=================
VectorSubtractAccu
=================
*/
void VectorSubtractAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out)
{
out[0] = a[0] - b[0];
out[1] = a[1] - b[1];
out[2] = a[2] - b[2];
}
/*
=================
VectorAddAccu
=================
*/
void VectorAddAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out)
{
out[0] = a[0] + b[0];
out[1] = a[1] + b[1];
out[2] = a[2] + b[2];
}
/*
=================
VectorCopyAccu
=================
*/
void VectorCopyAccu(const vec3_accu_t in, vec3_accu_t out)
{
out[0] = in[0];
out[1] = in[1];
out[2] = in[2];
}
/*
=================
VectorScaleAccu
=================
*/
void VectorScaleAccu(const vec3_accu_t in, vec_accu_t scaleFactor, vec3_accu_t out)
{
out[0] = in[0] * scaleFactor;
out[1] = in[1] * scaleFactor;
out[2] = in[2] * scaleFactor;
}
/*
=================
CrossProductAccu
=================
*/
void CrossProductAccu(const vec3_accu_t a, const vec3_accu_t b, vec3_accu_t out)
{
out[0] = (a[1] * b[2]) - (a[2] * b[1]);
out[1] = (a[2] * b[0]) - (a[0] * b[2]);
out[2] = (a[0] * b[1]) - (a[1] * b[0]);
}
/*
=================
Q_rintAccu
=================
*/
vec_accu_t Q_rintAccu(vec_accu_t val)
{
return (vec_accu_t) floor(val + 0.5);
}
/*
=================
VectorCopyAccuToRegular
=================
*/
void VectorCopyAccuToRegular(const vec3_accu_t in, vec3_t out)
{
out[0] = (vec_t) in[0];
out[1] = (vec_t) in[1];
out[2] = (vec_t) in[2];
}
/*
=================
VectorCopyRegularToAccu
=================
*/
void VectorCopyRegularToAccu(const vec3_t in, vec3_accu_t out)
{
out[0] = (vec_accu_t) in[0];
out[1] = (vec_accu_t) in[1];
out[2] = (vec_accu_t) in[2];
}
/*
=================
VectorNormalizeAccu
=================
*/
vec_accu_t VectorNormalizeAccu(const vec3_accu_t in, vec3_accu_t out)
{
// The sqrt() function takes double as an input and returns double as an
// output according the the man pages on Debian and on FreeBSD. Therefore,
// I don't see a reason why using a double outright (instead of using the
// vec_accu_t alias for example) could possibly be frowned upon.
vec_accu_t length;
length = (vec_accu_t) sqrt((in[0] * in[0]) + (in[1] * in[1]) + (in[2] * in[2]));
if (length == 0)
{
VectorClear(out);
return 0;
}
out[0] = in[0] / length;
out[1] = in[1] / length;
out[2] = in[2] / length;
return length;
}

View File

@ -0,0 +1,16 @@
DESCRIPTION OF PROBLEM:
=======================
The info_null in the map for the decal is not 100% below the center of the
decal itself, because to be totally below it would have to lie on half-units.
So, the info_null lies almost directly below the center of the decal. In
this particular case, all kinds of bad things happen to the decal. For one,
during compiling we get warnings like this:
Bad texture matrix! (B) (50.512253, -49.515625) != (50.484375, -49.515625)
Bad texture matrix! (C) (48.723190, -49.522587) != (48.695312, -49.515625)
Bad texture matrix! (B) (48.723186, -49.522587) != (48.695312, -49.515625)
If you look at where the decal (it's just a blue translucent tile texture)
meets the far wall, it's clearly not aligned correctly. The tile on the decal
and the tile on the wall should align perfectly, and it's quite a bit off.

View File

@ -0,0 +1,89 @@
{
"classname" "worldspawn"
{
( 6472 6336 -960 ) ( 6288 6336 -960 ) ( 6288 6320 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6264 6320 -576 ) ( 6264 6336 -576 ) ( 6448 6336 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6280 6328 -832 ) ( 6464 6328 -832 ) ( 6464 6328 -848 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 6320 -832 ) ( 6464 6336 -832 ) ( 6464 6336 -848 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 6336 -832 ) ( 6280 6336 -832 ) ( 6280 6336 -848 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 6144 6336 -832 ) ( 6144 6320 -832 ) ( 6144 6320 -848 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( 6552 6520 -960 ) ( 6464 6520 -960 ) ( 6464 6336 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 6336 -576 ) ( 6464 6520 -576 ) ( 6552 6520 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 6336 -576 ) ( 6552 6336 -576 ) ( 6552 6336 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6472 6344 -576 ) ( 6472 6528 -576 ) ( 6472 6528 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6528 7360 -576 ) ( 6440 7360 -576 ) ( 6440 7360 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 6520 -576 ) ( 6464 6336 -576 ) ( 6464 6336 -960 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
}
{
( 6464 7424 -960 ) ( 6144 7424 -960 ) ( 6144 7360 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6144 7360 -576 ) ( 6144 7424 -576 ) ( 6464 7424 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6144 7360 -576 ) ( 6464 7360 -576 ) ( 6464 7360 -960 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 6464 7360 -576 ) ( 6464 7424 -576 ) ( 6464 7424 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 7368 -576 ) ( 6144 7368 -576 ) ( 6144 7368 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6144 7424 -576 ) ( 6144 7360 -576 ) ( 6144 7360 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( 6144 7360 -960 ) ( 5880 7360 -960 ) ( 5880 6808 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 5880 6808 -576 ) ( 5880 7360 -576 ) ( 6144 7360 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 5864 6336 -576 ) ( 6128 6336 -576 ) ( 6128 6336 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6144 6808 -576 ) ( 6144 7360 -576 ) ( 6144 7360 -960 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 6144 7360 -576 ) ( 5880 7360 -576 ) ( 5880 7360 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6136 7384 -576 ) ( 6136 6832 -576 ) ( 6136 6832 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( 6456 7360 -968 ) ( 6136 7360 -968 ) ( 6136 6336 -968 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6144 6336 -960 ) ( 6144 7360 -960 ) ( 6464 7360 -960 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 6144 6336 -960 ) ( 6464 6336 -960 ) ( 6464 6336 -1008 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 6336 -960 ) ( 6464 7360 -960 ) ( 6464 7360 -1008 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 7360 -960 ) ( 6144 7360 -960 ) ( 6144 7360 -1008 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6144 7360 -960 ) ( 6144 6336 -960 ) ( 6144 6336 -1008 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( 6464 7360 -576 ) ( 6152 7360 -576 ) ( 6152 6336 -576 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 6176 6336 -568 ) ( 6176 7360 -568 ) ( 6488 7360 -568 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6152 6336 -472 ) ( 6464 6336 -472 ) ( 6464 6336 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 6336 -472 ) ( 6464 7360 -472 ) ( 6464 7360 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6464 7360 -472 ) ( 6152 7360 -472 ) ( 6152 7360 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 6144 7360 -472 ) ( 6144 6336 -472 ) ( 6144 6336 -576 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( 6200 7360 -896 ) ( 6200 6336 -896 ) ( 6592 6336 -896 ) radiant_regression_tests/glass 0 0 0 0.500000 0.500000 134217728 257 0
( 6360 6336 -832 ) ( 6360 7256 -832 ) ( 6464 7256 -832 ) radiant_regression_tests/glass 0 0 0 0.500000 0.500000 134217728 257 0
( 6208 6337 -832 ) ( 6400 6337 -832 ) ( 6400 6337 -896 ) radiant_regression_tests/glass 0 0 0 0.500000 0.500000 134217728 257 0
( 6463 6336 -816 ) ( 6463 7360 -816 ) ( 6463 7360 -880 ) radiant_regression_tests/glass 0 0 0 0.500000 0.500000 134217728 257 0
( 6232 7264 -896 ) ( 6232 7264 -832 ) ( 6232 6337 -896 ) radiant_regression_tests/glass 0 0 0 0.500000 0.500000 134217728 257 0
( 6232 7256 -832 ) ( 6232 7256 -896 ) ( 6463 7256 -832 ) radiant_regression_tests/glass 0 0 0 0.500000 0.500000 134217728 257 0
}
}
{
"target" "checker"
"classname" "_decal"
{
patchDef2
{
radiant_regression_tests/tile_trans
( 3 3 0 0 0 )
(
( ( 6462 7255 -832 50.484375 -56.679688 ) ( 6462 6796.500000 -832 50.484375 -53.097656 ) ( 6462 6338 -832 50.484375 -49.515625 ) )
( ( 6347.500000 7255 -832 49.589844 -56.679688 ) ( 6347.500000 6796.500000 -832 49.589844 -53.097656 ) ( 6347.500000 6338 -832 49.589844 -49.515625 ) )
( ( 6233 7255 -832 48.695312 -56.679688 ) ( 6233 6796.500000 -832 48.695312 -53.097656 ) ( 6233 6338 -832 48.695312 -49.515625 ) )
)
}
}
}
{
"targetname" "checker"
"origin" "6347 6796 -840"
"classname" "info_null"
}
{
"origin" "6288 6704 -712"
"classname" "info_player_deathmatch"
}
{
"light" "2000"
"origin" "6304 6792 -704"
"classname" "light"
}

View File

@ -0,0 +1,29 @@
textures/radiant_regression_tests/tile_trans
{
qer_trans 0.9
q3map_bounceScale 0.0
surfaceparm trans
cull disable
polygonOffset
{
map textures/radiant_regression_tests/tile_trans.tga
blendFunc blend
alphaGen const 1
}
}
textures/radiant_regression_tests/glass
{
qer_editorImage textures/radiant_regression_tests/qer_glass.tga
qer_trans 0.6
q3map_bounceScale 0.0
surfaceparm nolightmap
surfaceparm detail
surfaceparm trans
cull disable
{
map textures/radiant_regression_tests/glass.tga
blendFunc add
tcGen environment
}
}

View File

@ -34,3 +34,39 @@ After clipping side 0 against side 1 should have
**** (-262144, -33762.8) -> (262144, 63722)
************
Random notes for Rambetter, don't expect to understand this:
============================================================
Brush 0 is the problem.
Side 0 is the problem (under surf tri).
Side 1 is the +y 4-face.
Side 2 is the -x 4-face.
Side 3 is the -y 4-face.
side 4 is the +z tri.
(6144, 16122) -> (6784, 16241)
x "climb" of side 1 is 6784 - 6144 = 640.
y "climb" of side 1 is 16241 - 16122 = 119.
x/y "climb rate" of side 1 is 640 / 119 = 5.378151261.
After clipping side 0 against side 1, we get
************
**** (-262144, -33762.8125) -> (262144, 63722)
************
The slope of that is (262144 + 262144) / (63722 + 33762.8125) = 5.378150571.
(-262144, y) -> (6784, 16241)
So (6784 + 262144) / (16241 - y) = 640 / 119
So y = 16241 - ((119 * (6784 + 262144)) / 640) = -33762.8
(6144, 16122) -> (262144, y)
So (262144 - 6144) / (y - 16122) = 640 / 119
So y = 16122 + ((119 * (262144 - 6144)) / 640) = 63722
After clipping side 0 against side 1 should have
************
**** (-262144, -33762.8) -> (262144, 63722)
************

View File

@ -0,0 +1,7 @@
DESCRIPTION OF PROBLEM:
=======================
There are 3 model wedges in the map that are auto-clipped. The middle wedge
with the 45 degree slope is the problem. The slope face does not become solid;
therefore, there is a nonsolid "hole" on the wedge part. The other two wedges
are fine. 45 degrees seems to be a problem for model clipping.

View File

@ -0,0 +1,81 @@
{
"classname" "worldspawn"
{
( 392 512 -8 ) ( 0 512 -8 ) ( 0 448 -8 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 0 448 0 ) ( 0 512 0 ) ( 392 512 0 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 104 -192 0 ) ( 496 -192 0 ) ( 496 -192 -16 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 448 0 ) ( 384 512 0 ) ( 384 512 -16 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 400 640 0 ) ( 8 640 0 ) ( 8 640 -16 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 528 0 ) ( -128 464 0 ) ( -128 464 -16 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -128 688 320 ) ( -128 640 320 ) ( -128 640 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 648 320 ) ( -128 648 320 ) ( -128 648 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 640 320 ) ( 384 688 320 ) ( 384 688 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 640 320 ) ( 384 640 320 ) ( 384 640 0 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( -128 640 320 ) ( -128 688 320 ) ( 384 688 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 688 0 ) ( -128 688 0 ) ( -128 640 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -128 -184 328 ) ( -128 -240 328 ) ( -128 -240 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 -192 328 ) ( -128 -192 328 ) ( -128 -192 0 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 384 -240 328 ) ( 384 -184 328 ) ( 384 -184 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 -200 320 ) ( 384 -200 320 ) ( 384 -200 -8 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 -240 320 ) ( -128 -184 320 ) ( 384 -184 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 -184 0 ) ( -128 -184 0 ) ( -128 -240 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -128 248 392 ) ( -128 -192 392 ) ( -128 -192 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 640 408 ) ( -128 640 408 ) ( -128 640 336 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 -192 392 ) ( 384 248 392 ) ( 384 248 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 -192 392 ) ( 384 -192 392 ) ( 384 -192 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 -176 328 ) ( -128 264 328 ) ( 384 264 328 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 248 320 ) ( -128 248 320 ) ( -128 -192 320 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
}
{
( 384 640 320 ) ( 384 -192 320 ) ( 384 -192 0 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( 432 640 320 ) ( 384 640 320 ) ( 384 640 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 392 -192 320 ) ( 392 640 320 ) ( 392 640 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 -192 320 ) ( 432 -192 320 ) ( 432 -192 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 384 -192 320 ) ( 384 640 320 ) ( 432 640 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 432 640 0 ) ( 384 640 0 ) ( 384 -192 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -136 640 328 ) ( -136 -192 328 ) ( -136 -192 8 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 640 312 ) ( -224 640 312 ) ( -224 640 -8 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 -192 312 ) ( -128 640 312 ) ( -128 640 -8 ) radiant_regression_tests/bigtile 0 0 0 0.500000 0.500000 0 0 0
( -224 -192 312 ) ( -128 -192 312 ) ( -128 -192 -8 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -224 -192 320 ) ( -224 640 320 ) ( -128 640 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -128 640 0 ) ( -224 640 0 ) ( -224 -192 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
}
{
"model" "models/mapobjects/wedges/wedge_shallow.ase"
"origin" "0 -96 0"
"classname" "misc_model"
}
{
"model" "models/mapobjects/wedges/wedge_45.ase"
"origin" "0 160 0"
"classname" "misc_model"
}
{
"model" "models/mapobjects/wedges/wedge_steep.ase"
"origin" "0 416 0"
"classname" "misc_model"
}
{
"classname" "light"
"origin" "192 384 160"
"light" "800"
}
{
"light" "800"
"origin" "192 64 160"
"classname" "light"
}
{
"classname" "info_player_deathmatch"
"origin" "256 208 128"
"angle" "225"
}

View File

@ -0,0 +1,368 @@
*3DSMAX_ASCIIEXPORT 200
*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
*SCENE {
*SCENE_FILENAME "wedge_45.bsp"
*SCENE_FIRSTFRAME 0
*SCENE_LASTFRAME 100
*SCENE_FRAMESPEED 30
*SCENE_TICKSPERFRAME 160
*SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
*SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
}
*MATERIAL_LIST {
*MATERIAL_COUNT 2
*MATERIAL 0 {
*MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
*MATERIAL_CLASS "Standard"
*MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
*MATERIAL_SHADING Phong
*MAP_DIFFUSE {
*MAP_NAME "textures/radiant_regression_tests/tile_model"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0
*MAP_TYPE Screen
*BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
*BITMAP_FILTER Pyramidal
}
}
*MATERIAL 1 {
*MATERIAL_NAME "noshader"
*MATERIAL_CLASS "Standard"
*MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
*MATERIAL_SHADING Phong
*MAP_DIFFUSE {
*MAP_NAME "noshader"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0
*MAP_TYPE Screen
*BITMAP "..\noshader.tga"
*BITMAP_FILTER Pyramidal
}
}
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf0"
*NODE_TM {
*NODE_NAME "mat0model0surf0"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 128.000000 0.000000 0.000000
*MESH_VERTEX 1 64.000000 0.000000 64.000000
*MESH_VERTEX 2 128.000000 128.000000 0.000000
*MESH_VERTEX 3 64.000000 128.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.707107 0.000000 0.707107
*MESH_FACENORMAL 1 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 0 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 1 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 2 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 3 0.707107 0.000000 0.707107
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 1.000000 -1.000000 1.000000
*MESH_TVERT 1 -1.000000 -1.000000 1.000000
*MESH_TVERT 2 1.000000 3.000000 1.000000
*MESH_TVERT 3 -1.000000 3.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf1"
*NODE_TM {
*NODE_NAME "mat0model0surf1"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 128.000000 64.000000
*MESH_VERTEX 1 0.000000 128.000000 0.000000
*MESH_VERTEX 2 64.000000 128.000000 64.000000
*MESH_VERTEX 3 128.000000 128.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.707107 0.000000 0.707107
*MESH_FACENORMAL 1 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 2.000000 1.000000
*MESH_TVERT 1 -2.000000 0.000000 1.000000
*MESH_TVERT 2 0.000000 2.000000 1.000000
*MESH_TVERT 3 2.000000 0.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf2"
*NODE_TM {
*NODE_NAME "mat0model0surf2"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 64.000000 0.000000 64.000000
*MESH_VERTEX 1 0.000000 0.000000 64.000000
*MESH_VERTEX 2 64.000000 128.000000 64.000000
*MESH_VERTEX 3 0.000000 128.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.707107 0.000000 0.707107
*MESH_FACENORMAL 1 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 1.000000 -1.000000 1.000000
*MESH_TVERT 1 -1.000000 -1.000000 1.000000
*MESH_TVERT 2 1.000000 3.000000 1.000000
*MESH_TVERT 3 -1.000000 3.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf3"
*NODE_TM {
*NODE_NAME "mat0model0surf3"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 0.000000 64.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 0.000000 128.000000 64.000000
*MESH_VERTEX 3 0.000000 128.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.707107 0.000000 0.707107
*MESH_FACENORMAL 1 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 2.000000 1.000000
*MESH_TVERT 1 -2.000000 0.000000 1.000000
*MESH_TVERT 2 2.000000 2.000000 1.000000
*MESH_TVERT 3 2.000000 0.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf4"
*NODE_TM {
*NODE_NAME "mat0model0surf4"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 128.000000 0.000000 0.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 64.000000 0.000000 64.000000
*MESH_VERTEX 3 0.000000 0.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.707107 0.000000 0.707107
*MESH_FACENORMAL 1 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 2.000000 0.000000 1.000000
*MESH_TVERT 1 -2.000000 0.000000 1.000000
*MESH_TVERT 2 0.000000 2.000000 1.000000
*MESH_TVERT 3 -2.000000 2.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf5"
*NODE_TM {
*NODE_NAME "mat0model0surf5"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 128.000000 0.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 128.000000 128.000000 0.000000
*MESH_VERTEX 3 128.000000 0.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.707107 0.000000 0.707107
*MESH_FACENORMAL 1 0.707107 0.000000 0.707107
*MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 3.000000 1.000000
*MESH_TVERT 1 -2.000000 -1.000000 1.000000
*MESH_TVERT 2 2.000000 3.000000 1.000000
*MESH_TVERT 3 2.000000 -1.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}

View File

@ -0,0 +1,368 @@
*3DSMAX_ASCIIEXPORT 200
*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
*SCENE {
*SCENE_FILENAME "wedge_shallow.bsp"
*SCENE_FIRSTFRAME 0
*SCENE_LASTFRAME 100
*SCENE_FRAMESPEED 30
*SCENE_TICKSPERFRAME 160
*SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
*SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
}
*MATERIAL_LIST {
*MATERIAL_COUNT 2
*MATERIAL 0 {
*MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
*MATERIAL_CLASS "Standard"
*MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
*MATERIAL_SHADING Phong
*MAP_DIFFUSE {
*MAP_NAME "textures/radiant_regression_tests/tile_model"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0
*MAP_TYPE Screen
*BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
*BITMAP_FILTER Pyramidal
}
}
*MATERIAL 1 {
*MATERIAL_NAME "noshader"
*MATERIAL_CLASS "Standard"
*MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
*MATERIAL_SHADING Phong
*MAP_DIFFUSE {
*MAP_NAME "noshader"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0
*MAP_TYPE Screen
*BITMAP "..\noshader.tga"
*BITMAP_FILTER Pyramidal
}
}
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf0"
*NODE_TM {
*NODE_NAME "mat0model0surf0"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 160.000000 0.000000 0.000000
*MESH_VERTEX 1 64.000000 0.000000 64.000000
*MESH_VERTEX 2 160.000000 128.000000 0.000000
*MESH_VERTEX 3 64.000000 128.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.554700 0.000000 0.832050
*MESH_FACENORMAL 1 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 0 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 1 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 2 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 3 0.554700 0.000000 0.832050
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 2.000000 -1.000000 1.000000
*MESH_TVERT 1 -1.000000 -1.000000 1.000000
*MESH_TVERT 2 2.000000 3.000000 1.000000
*MESH_TVERT 3 -1.000000 3.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf1"
*NODE_TM {
*NODE_NAME "mat0model0surf1"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 128.000000 64.000000
*MESH_VERTEX 1 0.000000 128.000000 0.000000
*MESH_VERTEX 2 64.000000 128.000000 64.000000
*MESH_VERTEX 3 160.000000 128.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.554700 0.000000 0.832050
*MESH_FACENORMAL 1 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 2.000000 1.000000
*MESH_TVERT 1 -2.000000 0.000000 1.000000
*MESH_TVERT 2 0.000000 2.000000 1.000000
*MESH_TVERT 3 3.000000 0.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf2"
*NODE_TM {
*NODE_NAME "mat0model0surf2"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 64.000000 0.000000 64.000000
*MESH_VERTEX 1 0.000000 0.000000 64.000000
*MESH_VERTEX 2 64.000000 128.000000 64.000000
*MESH_VERTEX 3 0.000000 128.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.554700 0.000000 0.832050
*MESH_FACENORMAL 1 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 1.000000 -1.000000 1.000000
*MESH_TVERT 1 -1.000000 -1.000000 1.000000
*MESH_TVERT 2 1.000000 3.000000 1.000000
*MESH_TVERT 3 -1.000000 3.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf3"
*NODE_TM {
*NODE_NAME "mat0model0surf3"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 0.000000 64.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 0.000000 128.000000 64.000000
*MESH_VERTEX 3 0.000000 128.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.554700 0.000000 0.832050
*MESH_FACENORMAL 1 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 2.000000 1.000000
*MESH_TVERT 1 -2.000000 0.000000 1.000000
*MESH_TVERT 2 2.000000 2.000000 1.000000
*MESH_TVERT 3 2.000000 0.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf4"
*NODE_TM {
*NODE_NAME "mat0model0surf4"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 160.000000 0.000000 0.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 64.000000 0.000000 64.000000
*MESH_VERTEX 3 0.000000 0.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.554700 0.000000 0.832050
*MESH_FACENORMAL 1 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 3.000000 0.000000 1.000000
*MESH_TVERT 1 -2.000000 0.000000 1.000000
*MESH_TVERT 2 0.000000 2.000000 1.000000
*MESH_TVERT 3 -2.000000 2.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf5"
*NODE_TM {
*NODE_NAME "mat0model0surf5"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 128.000000 0.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 160.000000 128.000000 0.000000
*MESH_VERTEX 3 160.000000 0.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.554700 0.000000 0.832050
*MESH_FACENORMAL 1 0.554700 0.000000 0.832050
*MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 3.000000 1.000000
*MESH_TVERT 1 -2.000000 -1.000000 1.000000
*MESH_TVERT 2 3.000000 3.000000 1.000000
*MESH_TVERT 3 3.000000 -1.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}

View File

@ -0,0 +1,368 @@
*3DSMAX_ASCIIEXPORT 200
*COMMENT "Generated by Q3Map2 (ydnar) -convert -format ase"
*SCENE {
*SCENE_FILENAME "wedge_steep.bsp"
*SCENE_FIRSTFRAME 0
*SCENE_LASTFRAME 100
*SCENE_FRAMESPEED 30
*SCENE_TICKSPERFRAME 160
*SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
*SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
}
*MATERIAL_LIST {
*MATERIAL_COUNT 2
*MATERIAL 0 {
*MATERIAL_NAME "textures/radiant_regression_tests/tile_model"
*MATERIAL_CLASS "Standard"
*MATERIAL_DIFFUSE 1.000000 1.000000 0.833333
*MATERIAL_SHADING Phong
*MAP_DIFFUSE {
*MAP_NAME "textures/radiant_regression_tests/tile_model"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0
*MAP_TYPE Screen
*BITMAP "..\textures\radiant_regression_tests\tile_model.tga"
*BITMAP_FILTER Pyramidal
}
}
*MATERIAL 1 {
*MATERIAL_NAME "noshader"
*MATERIAL_CLASS "Standard"
*MATERIAL_DIFFUSE 1.000000 1.000000 1.000000
*MATERIAL_SHADING Phong
*MAP_DIFFUSE {
*MAP_NAME "noshader"
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0
*MAP_TYPE Screen
*BITMAP "..\noshader.tga"
*BITMAP_FILTER Pyramidal
}
}
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf0"
*NODE_TM {
*NODE_NAME "mat0model0surf0"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 112.000000 0.000000 0.000000
*MESH_VERTEX 1 64.000000 0.000000 64.000000
*MESH_VERTEX 2 112.000000 128.000000 0.000000
*MESH_VERTEX 3 64.000000 128.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.800000 0.000000 0.600000
*MESH_FACENORMAL 1 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 0 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 1 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 2 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 3 0.800000 0.000000 0.600000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 0.000000 1.000000
*MESH_TVERT 1 -2.000000 2.000000 1.000000
*MESH_TVERT 2 2.000000 0.000000 1.000000
*MESH_TVERT 3 2.000000 2.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf1"
*NODE_TM {
*NODE_NAME "mat0model0surf1"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 128.000000 64.000000
*MESH_VERTEX 1 0.000000 128.000000 0.000000
*MESH_VERTEX 2 64.000000 128.000000 64.000000
*MESH_VERTEX 3 112.000000 128.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.800000 0.000000 0.600000
*MESH_FACENORMAL 1 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 0 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 1 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 2 0.000000 1.000000 0.000000
*MESH_VERTEXNORMAL 3 0.000000 1.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -1.000000 2.000000 1.000000
*MESH_TVERT 1 -1.000000 0.000000 1.000000
*MESH_TVERT 2 1.000000 2.000000 1.000000
*MESH_TVERT 3 2.500000 0.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf2"
*NODE_TM {
*NODE_NAME "mat0model0surf2"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 64.000000 0.000000 64.000000
*MESH_VERTEX 1 0.000000 0.000000 64.000000
*MESH_VERTEX 2 64.000000 128.000000 64.000000
*MESH_VERTEX 3 0.000000 128.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.800000 0.000000 0.600000
*MESH_FACENORMAL 1 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 0 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 1 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 2 0.000000 0.000000 1.000000
*MESH_VERTEXNORMAL 3 0.000000 0.000000 1.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 1.000000 -1.000000 1.000000
*MESH_TVERT 1 -1.000000 -1.000000 1.000000
*MESH_TVERT 2 1.000000 3.000000 1.000000
*MESH_TVERT 3 -1.000000 3.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf3"
*NODE_TM {
*NODE_NAME "mat0model0surf3"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 0.000000 64.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 0.000000 128.000000 64.000000
*MESH_VERTEX 3 0.000000 128.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.800000 0.000000 0.600000
*MESH_FACENORMAL 1 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 0 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 1 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 2 -1.000000 0.000000 0.000000
*MESH_VERTEXNORMAL 3 -1.000000 0.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -2.000000 2.000000 1.000000
*MESH_TVERT 1 -2.000000 0.000000 1.000000
*MESH_TVERT 2 2.000000 2.000000 1.000000
*MESH_TVERT 3 2.000000 0.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf4"
*NODE_TM {
*NODE_NAME "mat0model0surf4"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 112.000000 0.000000 0.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 64.000000 0.000000 64.000000
*MESH_VERTEX 3 0.000000 0.000000 64.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.800000 0.000000 0.600000
*MESH_FACENORMAL 1 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 0 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 1 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 2 0.000000 -1.000000 0.000000
*MESH_VERTEXNORMAL 3 0.000000 -1.000000 0.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 2.500000 0.000000 1.000000
*MESH_TVERT 1 -1.000000 0.000000 1.000000
*MESH_TVERT 2 1.000000 2.000000 1.000000
*MESH_TVERT 3 -1.000000 2.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}
*GEOMOBJECT {
*NODE_NAME "mat0model0surf5"
*NODE_TM {
*NODE_NAME "mat0model0surf5"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 1.0 0 0
*TM_ROW1 0 1.0 0
*TM_ROW2 0 0 1.0
*TM_ROW3 0 0 0
*TM_POS 0.000000 0.000000 0.000000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 4
*MESH_NUMFACES 2
*COMMENT "SURFACETYPE MST_PLANAR"
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 0.000000 128.000000 0.000000
*MESH_VERTEX 1 0.000000 0.000000 0.000000
*MESH_VERTEX 2 112.000000 128.000000 0.000000
*MESH_VERTEX 3 112.000000 0.000000 0.000000
}
*MESH_NORMALS {
*MESH_FACENORMAL 0 0.800000 0.000000 0.600000
*MESH_FACENORMAL 1 0.800000 0.000000 0.600000
*MESH_VERTEXNORMAL 0 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 1 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 2 0.000000 0.000000 -1.000000
*MESH_VERTEXNORMAL 3 0.000000 0.000000 -1.000000
}
*MESH_FACE_LIST {
*MESH_FACE 0 A: 0 B: 2 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
*MESH_FACE 1 A: 2 B: 3 C: 1 AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING 0 *MESH_MTLID 0
}
*MESH_NUMTVERTEX 4
*MESH_TVERTLIST {
*MESH_TVERT 0 -1.000000 3.000000 1.000000
*MESH_TVERT 1 -1.000000 -1.000000 1.000000
*MESH_TVERT 2 2.500000 3.000000 1.000000
*MESH_TVERT 3 2.500000 -1.000000 1.000000
}
*MESH_NUMTVFACES 2
*MESH_TFACELIST {
*MESH_TFACE 0 0 2 1
*MESH_TFACE 1 2 3 1
}
}
*PROP_MOTIONBLUR 0
*PROP_CASTSHADOW 1
*PROP_RECVSHADOW 1
*MATERIAL_REF 0
}

View File

@ -0,0 +1,12 @@
textures/radiant_regression_tests/tile_model
{
q3map_clipModel
q3map_forceMeta
{
map $lightmap
}
{
map textures/radiant_regression_tests/tile_model.tga
blendFunc filter
}
}

View File

@ -0,0 +1,14 @@
DESCRIPTION OF PROBLEM:
=======================
In the disappearing_triangle regression test I outlined a potential problem
in the tjunction.c code, having to do with 2 points being too close together
on a winding, and that winding becoming invalid (drawsurf disappearing).
This example map is the same as disappearing_triangle.map, except that the
floor is raised by 1 unit. Therefore the floor intersects the sliver triangle.
The resulting chopped sliver has a very short edge that is "degenerate" and
causes that draw surf to go away due to problems in the tjunction.c code.
This is speculation at this point. I will provide more info after the bug has
been fixed.

View File

@ -0,0 +1,73 @@
{
"classname" "worldspawn"
{
( 134 -1015 0 ) ( 134 -4096 0 ) ( 67 -1022 0 ) common/caulk 0 0 0 0.500000 0.500000 134217728 4 0
( 88 -892 -768 ) ( 88 -4096 -768 ) ( 134 -1015 0 ) common/caulk 0 0 0 0.500000 0.500000 134217728 4 0
( 67 -1022 0 ) ( 88 -892 -768 ) ( 134 -1015 0 ) radiant_regression_tests/tile 0 0 0 0.500000 0.500000 134217728 0 0
( 67 -1022 0 ) ( 67 -4096 0 ) ( 88 -892 -768 ) common/caulk 0 0 0 0.500000 0.500000 134217728 4 0
( -704 -1152 0 ) ( 4480 -1152 0 ) ( -704 -1152 -768 ) common/caulk 0 0 0 0.500000 0.500000 134217728 4 0
}
{
( 512 -640 0 ) ( 512 -1160 0 ) ( 512 -1160 -768 ) radiant_regression_tests/tile 0 0 0 0.500000 0.500000 0 0 0
( 584 -640 0 ) ( 520 -640 0 ) ( 520 -640 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 520 -1160 0 ) ( 520 -640 0 ) ( 520 -640 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 528 -1152 0 ) ( 592 -1152 0 ) ( 592 -1152 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 528 -1160 320 ) ( 528 -640 320 ) ( 592 -640 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 583 -640 -768 ) ( 519 -640 -768 ) ( 519 -1160 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -512 -536 320 ) ( -512 -624 320 ) ( -512 -624 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 528 -632 320 ) ( -280 -632 320 ) ( -280 -632 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 512 -640 320 ) ( 512 -552 320 ) ( 512 -552 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -296 -640 320 ) ( 512 -640 320 ) ( 512 -640 -768 ) radiant_regression_tests/tile 0 0 0 0.500000 0.500000 0 0 0
( -296 -640 320 ) ( -296 -552 320 ) ( 512 -552 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 511 -552 -768 ) ( -297 -552 -768 ) ( -297 -640 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -520 -648 320 ) ( -520 -1152 320 ) ( -520 -1152 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -512 -640 320 ) ( -536 -640 320 ) ( -536 -640 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -512 -1152 320 ) ( -512 -648 320 ) ( -512 -648 -768 ) radiant_regression_tests/tile 0 0 0 0.500000 0.500000 0 0 0
( -536 -1152 320 ) ( -512 -1152 320 ) ( -512 -1152 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -536 -1152 320 ) ( -536 -648 320 ) ( -512 -648 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -512 -648 -768 ) ( -536 -648 -768 ) ( -536 -1152 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -512 -640 464 ) ( -512 -1152 464 ) ( -512 -1152 352 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 512 -640 440 ) ( 24 -640 440 ) ( 24 -640 328 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 512 -1152 440 ) ( 512 -640 440 ) ( 512 -640 328 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 24 -1152 440 ) ( 512 -1152 440 ) ( 512 -1152 328 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 48 -1152 328 ) ( 48 -640 328 ) ( 536 -640 328 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 512 -640 320 ) ( 24 -640 320 ) ( 24 -1152 320 ) radiant_regression_tests/tile 0 0 0 0.500000 0.500000 0 0 0
}
{
( -368 -640 -824 ) ( -856 -640 -824 ) ( -856 -640 -960 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 512 -1152 -768 ) ( 512 -896 -768 ) ( 512 -896 -776 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -512 -896 -768 ) ( -512 -1152 -768 ) ( -512 -1152 -776 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -512 -1152 -768 ) ( -328 -1152 -768 ) ( -328 -1152 -776 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( -511 -1152 -767 ) ( -511 -896 -767 ) ( -327 -896 -767 ) radiant_regression_tests/tile 0 0 0 0.500000 0.500000 0 0 0
( -328 -896 -776 ) ( -512 -896 -776 ) ( -512 -1152 -776 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
{
( -256 -1152 -768 ) ( -520 -1152 -768 ) ( -520 -1192 -768 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 176 -1568 320 ) ( 176 -1152 320 ) ( 1152 -1152 320 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 208 -1160 320 ) ( 1184 -1160 320 ) ( 1184 -1160 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 512 -1576 320 ) ( 512 -1160 320 ) ( 512 -1160 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
( 1152 -1152 320 ) ( 176 -1152 320 ) ( 176 -1152 0 ) radiant_regression_tests/tile 0 0 0 0.500000 0.500000 0 0 0
( -512 -1168 320 ) ( -512 -1584 320 ) ( -512 -1584 0 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
}
}
{
"classname" "light"
"origin" "0 -768 -480"
"light" "3000"
}
{
"classname" "info_player_deathmatch"
"origin" "0 -712 -640"
"angle" "270"
}
{
"light" "3000"
"origin" "0 -832 160"
"classname" "light"
}

View File

@ -321,6 +321,50 @@ void SnapWeldVectorAccu(vec3_accu_t a, vec3_accu_t b, vec3_accu_t out)
}
}
/*
==================
SnapWeldVectorAccu
Welds two vectors into a third, taking into account nearest-to-integer
instead of averaging.
==================
*/
void SnapWeldVectorAccu(vec3_accu_t a, vec3_accu_t b, vec3_accu_t out)
{
// I'm just preserving what I think was the intended logic of the original
// SnapWeldVector(). I'm not actually sure where this function should even
// be used. I'd like to know which kinds of problems this function addresses.
// TODO: I thought we're snapping all coordinates to nearest 1/8 unit?
// So what is natural about snapping to the nearest integer? Maybe we should
// be snapping to the nearest 1/8 unit instead?
int i;
vec_accu_t ai, bi, ad, bd;
if (a == NULL || b == NULL || out == NULL)
Error("SnapWeldVectorAccu: NULL argument");
for (i = 0; i < 3; i++)
{
ai = Q_rintAccu(a[i]);
bi = Q_rintAccu(b[i]);
ad = fabs(ai - a[i]);
bd = fabs(bi - b[i]);
if (ad < bd)
{
if (ad < SNAP_EPSILON) out[i] = ai;
else out[i] = a[i];
}
else
{
if (bd < SNAP_EPSILON) out[i] = bi;
else out[i] = b[i];
}
}
}
/*
@ -458,7 +502,7 @@ returns false if the brush doesn't enclose a valid volume
qboolean CreateBrushWindings( brush_t *brush )
{
int i, j;
#if EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES
#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
winding_accu_t *w;
#else
winding_t *w;
@ -475,7 +519,7 @@ qboolean CreateBrushWindings( brush_t *brush )
plane = &mapplanes[ side->planenum ];
/* make huge winding */
#if EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES
#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
w = BaseWindingForPlaneAccu(plane->normal, plane->dist);
#else
w = BaseWindingForPlane( plane->normal, plane->dist );
@ -491,14 +535,14 @@ qboolean CreateBrushWindings( brush_t *brush )
if( brush->sides[ j ].bevel )
continue;
plane = &mapplanes[ brush->sides[ j ].planenum ^ 1 ];
#if EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES
#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
ChopWindingInPlaceAccu(&w, plane->normal, plane->dist, 0);
#else
ChopWindingInPlace( &w, plane->normal, plane->dist, 0 ); // CLIP_EPSILON );
#endif
/* ydnar: fix broken windings that would generate trifans */
#if EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES
#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
// I think it's better to FixWindingAccu() once after we chop with all planes
// so that error isn't multiplied. There is nothing natural about welding
// the points unless they are the final endpoints. ChopWindingInPlaceAccu()
@ -509,7 +553,7 @@ qboolean CreateBrushWindings( brush_t *brush )
}
/* set side winding */
#if EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES
#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
if (w != NULL)
{
FixWindingAccu(w);

View File

@ -159,7 +159,7 @@ Returns qtrue if and only if the normal was adjusted.
qboolean SnapNormal( vec3_t normal )
{
#if EXPERIMENTAL_SNAP_NORMAL_FIX
#if Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX
int i;
qboolean adjusted = qfalse;
@ -340,7 +340,7 @@ int FindFloatPlane( vec3_t innormal, vec_t dist, int numPoints, vec3_t *points )
vec3_t normal;
VectorCopy(innormal, normal);
#if EXPERIMENTAL_SNAP_PLANE_FIX
#if Q3MAP2_EXPERIMENTAL_SNAP_PLANE_FIX
SnapPlaneImproved(normal, &dist, numPoints, (const vec3_t *) points);
#else
SnapPlane( normal, &dist );
@ -395,7 +395,7 @@ int FindFloatPlane( vec3_t innormal, vec_t dist, int numPoints, vec3_t *points )
vec3_t normal;
VectorCopy(innormal, normal);
#if EXPERIMENTAL_SNAP_PLANE_FIX
#if Q3MAP2_EXPERIMENTAL_SNAP_PLANE_FIX
SnapPlaneImproved(normal, &dist, numPoints, (const vec3_t *) points);
#else
SnapPlane( normal, &dist );
@ -438,7 +438,7 @@ takes 3 points and finds the plane they lie in
int MapPlaneFromPoints( vec3_t *p )
{
#if EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES
#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
vec3_accu_t paccu[3];
vec3_accu_t t1, t2, normalAccu;
vec3_t normal;

View File

@ -124,9 +124,9 @@ constants
/* temporary hacks and tests (please keep off in SVN to prevent anyone's legacy map from screwing up) */
/* 2011-01-10 TTimo says we should turn these on in SVN, so turning on now */
#define EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES 1
#define EXPERIMENTAL_SNAP_NORMAL_FIX 1
#define EXPERIMENTAL_SNAP_PLANE_FIX 1
#define Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES 1
#define Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX 1
#define Q3MAP2_EXPERIMENTAL_SNAP_PLANE_FIX 1
/* general */
#define MAX_QPATH 64
@ -2033,7 +2033,7 @@ Q_EXTERN qboolean lightmapTriangleCheck Q_ASSIGN(qfalse);
Q_EXTERN qboolean lightmapExtraVisClusterNudge Q_ASSIGN(qfalse);
Q_EXTERN qboolean lightmapFill Q_ASSIGN(qfalse);
#if EXPERIMENTAL_SNAP_NORMAL_FIX
#if Q3MAP2_EXPERIMENTAL_SNAP_NORMAL_FIX
// Increasing the normalEpsilon to compensate for new logic in SnapNormal(), where
// this epsilon is now used to compare against 0 components instead of the 1 or -1
// components. Unfortunately, normalEpsilon is also used in PlaneEqual(). So changing
@ -2044,7 +2044,7 @@ Q_EXTERN double normalEpsilon Q_ASSIGN(0.00005);
Q_EXTERN double normalEpsilon Q_ASSIGN( 0.00001 );
#endif
#if EXPERIMENTAL_HIGH_PRECISION_MATH_Q3MAP2_FIXES
#if Q3MAP2_EXPERIMENTAL_HIGH_PRECISION_MATH_FIXES
// NOTE: This distanceEpsilon is too small if parts of the map are at maximum world
// extents (in the range of plus or minus 2^16). The smallest epsilon at values
// close to 2^16 is about 0.007, which is greater than distanceEpsilon. Therefore,