light: _phong_angle_concave support

This commit is contained in:
Eric Wasylishen 2018-01-12 01:38:22 -07:00
parent 94dbd0a705
commit cae501972e
2 changed files with 219 additions and 19 deletions

View File

@ -440,11 +440,19 @@ CalcualateVertexNormals(const mbsp_t *bsp)
for (int i = 0; i < bsp->numfaces; i++) { for (int i = 0; i < bsp->numfaces; i++) {
const bsp2_dface_t *f = BSP_GetFace(const_cast<mbsp_t *>(bsp), i); const bsp2_dface_t *f = BSP_GetFace(const_cast<mbsp_t *>(bsp), i);
const auto f_points = GLM_FacePoints(bsp, f);
const qvec3f f_norm = Face_Normal_E(bsp, f); const qvec3f f_norm = Face_Normal_E(bsp, f);
const qplane3f f_plane = Face_Plane_E(bsp, f);
// any face normal within this many degrees can be smoothed with this face // any face normal within this many degrees can be smoothed with this face
const int f_smoothangle = (extended_texinfo_flags[f->texinfo] & TEX_PHONG_ANGLE_MASK) >> TEX_PHONG_ANGLE_SHIFT; const int f_phong_angle = (extended_texinfo_flags[f->texinfo] & TEX_PHONG_ANGLE_MASK) >> TEX_PHONG_ANGLE_SHIFT;
if (!f_smoothangle) int f_phong_angle_concave = (extended_texinfo_flags[f->texinfo] & TEX_PHONG_ANGLE_CONCAVE_MASK) >> TEX_PHONG_ANGLE_CONCAVE_SHIFT;
if (f_phong_angle_concave == 0) {
f_phong_angle_concave = f_phong_angle;
}
const bool f_wants_phong = (f_phong_angle || f_phong_angle_concave);
if (!f_wants_phong)
continue; continue;
for (int j = 0; j < f->numedges; j++) { for (int j = 0; j < f->numedges; j++) {
@ -454,15 +462,29 @@ CalcualateVertexNormals(const mbsp_t *bsp)
if (f2 == f) if (f2 == f)
continue; continue;
const int f2_smoothangle = (extended_texinfo_flags[f2->texinfo] & TEX_PHONG_ANGLE_MASK) >> TEX_PHONG_ANGLE_SHIFT; // FIXME: factor out and share with above?
if (!f2_smoothangle) const int f2_phong_angle = (extended_texinfo_flags[f2->texinfo] & TEX_PHONG_ANGLE_MASK) >> TEX_PHONG_ANGLE_SHIFT;
int f2_phong_angle_concave = (extended_texinfo_flags[f2->texinfo] & TEX_PHONG_ANGLE_CONCAVE_MASK) >> TEX_PHONG_ANGLE_CONCAVE_SHIFT;
if (f2_phong_angle_concave == 0) {
f2_phong_angle_concave = f2_phong_angle;
}
const bool f2_wants_phong = (f2_phong_angle || f2_phong_angle_concave);
if (!f2_wants_phong)
continue; continue;
const auto f2_points = GLM_FacePoints(bsp, f2);
const qvec3f f2_centroid = GLM_PolyCentroid(f2_points);
const qvec3f f2_norm = Face_Normal_E(bsp, f2); const qvec3f f2_norm = Face_Normal_E(bsp, f2);
const vec_t cosangle = qv::dot(f_norm, f2_norm);
const vec_t cosmaxangle = cos(DEG2RAD(qmin(f_smoothangle, f2_smoothangle)));
const vec_t cosangle = qv::dot(f_norm, f2_norm);
const bool concave = f_plane.distAbove(f2_centroid) > 0.1;
const vec_t f_threshold = concave ? f_phong_angle_concave : f_phong_angle;
const vec_t f2_threshold = concave ? f2_phong_angle_concave : f2_phong_angle;
const vec_t min_threshold = qmin(f_threshold, f2_threshold);
const vec_t cosmaxangle = cos(DEG2RAD(min_threshold));
// check the angle between the face normals // check the angle between the face normals
if (cosangle >= cosmaxangle) { if (cosangle >= cosmaxangle) {
smoothFaces[f].insert(f2); smoothFaces[f].insert(f2);

View File

@ -36,6 +36,15 @@
( -448 -1472 1984 ) ( -448 -1600 1984 ) ( -576 -1472 1984 ) sbox_side 0 0 0 1 1 ( -448 -1472 1984 ) ( -448 -1600 1984 ) ( -576 -1472 1984 ) sbox_side 0 0 0 1 1
( -576 -1600 1856 ) ( -448 -1600 1856 ) ( -576 -1472 1856 ) sbox_side 0 0 0 1 1 ( -576 -1600 1856 ) ( -448 -1600 1856 ) ( -576 -1472 1856 ) sbox_side 0 0 0 1 1
} }
// brush 3
{
( 352 -912 1936 ) ( 352 -912 1920 ) ( 352 -1360 1936 ) brownstone2 32 -32 -0 1 1
( 96 -1360 1920 ) ( 96 -912 1920 ) ( 96 -1360 1936 ) brownstone2 32 -32 -0 1 1
( 592 -576 1936 ) ( -0 -576 1936 ) ( 592 -576 1920 ) brownstone2 -16 -32 -0 1 1
( -0 -1152 1920 ) ( -0 -1152 1936 ) ( 592 -1152 1920 ) brownstone2 -16 -32 -0 1 1
( 592 -912 1936 ) ( 592 -1360 1936 ) ( -0 -912 1936 ) brownstone2 -16 -32 -0 1 1
( -0 -1360 1920 ) ( 592 -1360 1920 ) ( -0 -912 1920 ) brownstone2 -16 -32 -0 1 1
}
} }
// entity 1 // entity 1
{ {
@ -999,41 +1008,210 @@
"_phong" "1" "_phong" "1"
// brush 0 // brush 0
{ {
( -408 -1392 1981 ) ( -408 -1397 1976 ) ( -384 -1397 1952 ) shuttle1 32 25.375 90 1 -2
( -408 -1392 1987 ) ( -384 -1392 1963 ) ( -384 -1397 1968 ) shuttle1 -31.9996 22.625 90 1 -2 ( -408 -1392 1987 ) ( -384 -1392 1963 ) ( -384 -1397 1968 ) shuttle1 -31.9996 22.625 90 1 -2
( -384 -1392 1957 ) ( -384 -1392 1963 ) ( -408 -1392 1987 ) shuttle1 16 16 270 1 1
( -384 -1403 1952 ) ( -408 -1403 1976 ) ( -408 -1408 1981 ) shuttle1 -31.9996 25.3749 90 1 -2
( -408 -1408 1987 ) ( -408 -1403 1992 ) ( -384 -1403 1968 ) shuttle1 32 22.625 90 1 -2 ( -408 -1408 1987 ) ( -408 -1403 1992 ) ( -384 -1403 1968 ) shuttle1 32 22.625 90 1 -2
( -384 -1408 1957 ) ( -408 -1408 1981 ) ( -408 -1408 1987 ) shuttle1 16 16 270 1 1 ( -384 -1403 1968 ) ( -408 -1403 1992 ) ( -408 -1397 1992 ) shuttle1 32 16 90 1 -1
( -408 -1392 1981 ) ( -408 -1397 1976 ) ( -384 -1397 1952 ) shuttle1 32 25.375 90 1 -2
( -384 -1403 1952 ) ( -408 -1403 1976 ) ( -408 -1408 1981 ) shuttle1 -31.9996 25.3749 90 1 -2
( -408 -1397 1976 ) ( -408 -1403 1976 ) ( -384 -1403 1952 ) shuttle1 32 16 90 1 -1 ( -408 -1397 1976 ) ( -408 -1403 1976 ) ( -384 -1403 1952 ) shuttle1 32 16 90 1 -1
( -408 -1397 1992 ) ( -408 -1403 1992 ) ( -408 -1408 1987 ) shuttle1 15.9991 -16 270 1 -1 ( -408 -1397 1992 ) ( -408 -1403 1992 ) ( -408 -1408 1987 ) shuttle1 15.9991 -16 270 1 -1
( -384 -1403 1968 ) ( -408 -1403 1992 ) ( -408 -1397 1992 ) shuttle1 32 16 90 1 -1 ( -384 -1392 1957 ) ( -384 -1392 1963 ) ( -408 -1392 1987 ) shuttle1 16 16 270 1 1
( -384 -1408 1957 ) ( -408 -1408 1981 ) ( -408 -1408 1987 ) shuttle1 16 16 270 1 1
( -384 -1400 1968 ) ( -392 -1264 1968 ) ( -392 -1392 1968 ) shuttle1 32 16 90 1 -1 ( -384 -1400 1968 ) ( -392 -1264 1968 ) ( -392 -1392 1968 ) shuttle1 32 16 90 1 -1
} }
// brush 1 // brush 1
{ {
( -408 -1397 1976 ) ( -408 -1392 1987 ) ( -408 -1392 1981 ) shuttle1 15.9991 -16 270 1 -1
( -696 -1397 1976 ) ( -696 -1408 1981 ) ( -696 -1403 1976 ) shuttle1 15.9991 -16 270 1 -1
( -520 -1397 1992 ) ( -504 -1392 1987 ) ( -504 -1397 1992 ) shuttle1 -31.9996 32 90 1 -1 ( -520 -1397 1992 ) ( -504 -1392 1987 ) ( -504 -1397 1992 ) shuttle1 -31.9996 32 90 1 -1
( -520 -1397 1976 ) ( -504 -1392 1981 ) ( -520 -1392 1981 ) shuttle1 32 32 90 1 -1 ( -520 -1397 1976 ) ( -504 -1392 1981 ) ( -520 -1392 1981 ) shuttle1 32 32 90 1 -1
( -520 -1392 1981 ) ( -504 -1392 1987 ) ( -520 -1392 1987 ) shuttle1 16 32 270 1 1 ( -520 -1392 1981 ) ( -504 -1392 1987 ) ( -520 -1392 1987 ) shuttle1 16 32 270 1 1
( -520 -1408 1987 ) ( -504 -1403 1992 ) ( -504 -1408 1987 ) shuttle1 32 32 90 1 -1 ( -520 -1408 1987 ) ( -504 -1403 1992 ) ( -504 -1408 1987 ) shuttle1 32 32 90 1 -1
( -504 -1403 1976 ) ( -520 -1408 1981 ) ( -504 -1408 1981 ) shuttle1 -31.9996 32 90 1 -1 ( -504 -1403 1976 ) ( -520 -1408 1981 ) ( -504 -1408 1981 ) shuttle1 -31.9996 32 90 1 -1
( -520 -1408 1987 ) ( -504 -1408 1981 ) ( -520 -1408 1981 ) shuttle1 16 32 270 1 1 ( -520 -1408 1987 ) ( -504 -1408 1981 ) ( -520 -1408 1981 ) shuttle1 16 32 270 1 1
( -696 -1397 1976 ) ( -696 -1408 1981 ) ( -696 -1403 1976 ) shuttle1 15.9991 -16 270 1 -1
( -408 -1397 1976 ) ( -408 -1392 1987 ) ( -408 -1392 1981 ) shuttle1 15.9991 -16 270 1 -1
( -520 -1397 1992 ) ( -504 -1403 1992 ) ( -520 -1403 1992 ) shuttle1 32 32 90 1 -1 ( -520 -1397 1992 ) ( -504 -1403 1992 ) ( -520 -1403 1992 ) shuttle1 32 32 90 1 -1
( -520 -1397 1976 ) ( -504 -1403 1976 ) ( -504 -1397 1976 ) shuttle1 32 32 90 1 -1 ( -520 -1397 1976 ) ( -504 -1403 1976 ) ( -504 -1397 1976 ) shuttle1 32 32 90 1 -1
} }
// brush 2 // brush 2
{ {
( -400 -1397 1856 ) ( -395 -1392 1872 ) ( -400 -1397 1872 ) shuttle1 21.0007 40 -0 1 1
( -389 -1392 1856 ) ( -384 -1397 1872 ) ( -389 -1392 1872 ) shuttle1 -5 39.9995 180 1 -1 ( -389 -1392 1856 ) ( -384 -1397 1872 ) ( -389 -1392 1872 ) shuttle1 -5 39.9995 180 1 -1
( -389 -1392 1856 ) ( -395 -1392 1872 ) ( -395 -1392 1856 ) shuttle1 -16 40 -0 1 1
( -395 -1408 1872 ) ( -400 -1403 1856 ) ( -400 -1403 1872 ) shuttle1 -27 39.9995 180 1 -1
( -389 -1408 1856 ) ( -384 -1403 1872 ) ( -384 -1403 1856 ) shuttle1 43.0007 40 -0 1 1 ( -389 -1408 1856 ) ( -384 -1403 1872 ) ( -384 -1403 1856 ) shuttle1 43.0007 40 -0 1 1
( -389 -1408 1856 ) ( -395 -1408 1872 ) ( -389 -1408 1872 ) shuttle1 -16 40 -0 1 1
( -400 -1397 1856 ) ( -400 -1403 1872 ) ( -400 -1403 1856 ) shuttle1 -40.0004 39.9995 180 1 -1
( -384 -1403 1856 ) ( -384 -1397 1872 ) ( -384 -1397 1856 ) shuttle1 -40.0004 39.9995 180 1 -1 ( -384 -1403 1856 ) ( -384 -1397 1872 ) ( -384 -1397 1856 ) shuttle1 -40.0004 39.9995 180 1 -1
( -400 -1397 1856 ) ( -395 -1392 1872 ) ( -400 -1397 1872 ) shuttle1 21.0007 40 -0 1 1
( -395 -1408 1872 ) ( -400 -1403 1856 ) ( -400 -1403 1872 ) shuttle1 -27 39.9995 180 1 -1
( -400 -1397 1856 ) ( -400 -1403 1872 ) ( -400 -1403 1856 ) shuttle1 -40.0004 39.9995 180 1 -1
( -389 -1392 1856 ) ( -395 -1392 1872 ) ( -395 -1392 1856 ) shuttle1 -16 40 -0 1 1
( -389 -1408 1856 ) ( -395 -1408 1872 ) ( -389 -1408 1872 ) shuttle1 -16 40 -0 1 1
( -389 -1408 1968 ) ( -384 -1397 1968 ) ( -384 -1403 1968 ) shuttle1 -39.9995 -0 270 1 -1 ( -389 -1408 1968 ) ( -384 -1397 1968 ) ( -384 -1403 1968 ) shuttle1 -39.9995 -0 270 1 -1
( -389 -1408 1856 ) ( -400 -1403 1856 ) ( -395 -1408 1856 ) shuttle1 -39.9995 -0 270 1 -1 ( -389 -1408 1856 ) ( -400 -1403 1856 ) ( -395 -1408 1856 ) shuttle1 -39.9995 -0 270 1 -1
} }
} }
// entity 21
{
"classname" "func_detail"
"_phong" "1"
"_phong_angle_concave" "1"
// brush 0
{
( 192 -752 2064 ) ( 256 -752 1984 ) ( 288 -752 2064 ) brownstone2 -0 -0 -0 1 1
( 256 -752 1984 ) ( 192 -752 1984 ) ( 192 -816 1984 ) brownstone2 -0 -32 -0 1 -1
( 192 -752 2064 ) ( 288 -752 2064 ) ( 192 -848 2064 ) brownstone2 -0 -32 -0 1 -1
( 288 -752 2064 ) ( 192 -816 1984 ) ( 192 -848 2064 ) brownstone2 60.6897 -0 180 1 -1
( 192 -816 1984 ) ( 192 -752 2064 ) ( 192 -848 2064 ) brownstone2 32 -0 180 1 -1
}
// brush 1
{
( 192 -800 2064 ) ( 288 -656 2064 ) ( 288 -800 2064 ) brownstone2 -16 -0 -0 1 -1
( 192 -768 1984 ) ( 192 -656 2064 ) ( 192 -800 2064 ) brownstone2 -0 16 180 1 -1
( 288 -656 2064 ) ( 192 -656 1984 ) ( 256 -656 1984 ) brownstone2 -16 16 -0 1 1
( 288 -800 2064 ) ( 256 -656 1984 ) ( 256 -768 1984 ) brownstone2 -0 16 180 1 -1
( 256 -656 1984 ) ( 192 -768 1984 ) ( 256 -768 1984 ) brownstone2 -16 -0 -0 1 -1
( 288 -752 2064 ) ( 240 -752 2064 ) ( 240 -752 2192 ) brownstone2 -16 16 -0 1 1
}
// brush 2
{
( 192 -848 2064 ) ( 96 -752 2064 ) ( 192 -752 2064 ) brownstone2 16 48 270 1 -1
( 96 -848 2064 ) ( 96 -752 1984 ) ( 96 -752 2064 ) brownstone2 16 16 180 1 -1
( 192 -848 2064 ) ( 96 -816 1984 ) ( 96 -848 2064 ) brownstone2 -48 16 180 1 -1
( 192 -816 1984 ) ( 192 -752 2064 ) ( 192 -752 1984 ) brownstone2 16 16 180 1 -1
( 192 -752 2064 ) ( 96 -752 1984 ) ( 192 -752 1984 ) brownstone2 -48 16 180 1 -1
( 96 -752 1984 ) ( 192 -816 1984 ) ( 192 -752 1984 ) brownstone2 16 48 270 1 -1
}
// brush 3
{
( 192 -768 1984 ) ( 256 -752 1984 ) ( 192 -816 1984 ) brownstone2 -0 -32 -0 1 -1
( 192 -816 1984 ) ( 256 -752 1984 ) ( 288 -752 1936 ) brownstone2 48 -48 -0 1 -1
( 288 -752 1936 ) ( 192 -768 1936 ) ( 192 -848 1936 ) brownstone2 -0 -32 -0 1 -1
( 192 -848 1936 ) ( 192 -768 1936 ) ( 192 -768 1984 ) brownstone2 32 -0 180 1 -1
( 192 -768 1984 ) ( 192 -768 1936 ) ( 256 -752 1984 ) brownstone2 -0 -0 -0 1 1
( 256 -752 1984 ) ( 192 -768 1936 ) ( 288 -752 1936 ) brownstone2 -0 -0 -0 1 1
}
// brush 4
{
( 192 -656 1936 ) ( 192 -656 1984 ) ( 192 -752 1984 ) brownstone2 -0 16 180 1 1
( 256 -752 1984 ) ( 288 -752 1936 ) ( 192 -752 1936 ) brownstone2 -16 -0 -0 1 -1
( 192 -752 1936 ) ( 288 -752 1936 ) ( 288 -656 1936 ) brownstone2 -16 -0 -0 1 -1
( 288 -656 1936 ) ( 256 -656 1984 ) ( 192 -656 1984 ) brownstone2 -16 16 -0 1 -1
( 192 -656 1984 ) ( 256 -656 1984 ) ( 256 -752 1984 ) brownstone2 -16 -0 -0 1 -1
( 256 -752 1984 ) ( 256 -656 1984 ) ( 288 -656 1936 ) brownstone2 48 48 -0 1 1
}
// brush 5
{
( 96 -816 1984 ) ( 96 -752 1984 ) ( 192 -752 1984 ) brownstone2 16 48 270 1 -1
( 192 -816 1984 ) ( 192 -848 1936 ) ( 96 -848 1936 ) brownstone2 -0 -0 270 1 1
( 192 -752 1984 ) ( 192 -752 1936 ) ( 192 -848 1936 ) brownstone2 16 16 180 1 1
( 96 -752 1984 ) ( 96 -752 1936 ) ( 192 -752 1936 ) brownstone2 -48 16 180 1 1
( 192 -752 1936 ) ( 96 -752 1936 ) ( 96 -848 1936 ) brownstone2 16 48 270 1 -1
( 96 -848 1936 ) ( 96 -752 1936 ) ( 96 -752 1984 ) brownstone2 16 -0 180 1 1
}
// brush 6
{
( 96 -896 2144 ) ( 96 -752 2144 ) ( 192 -752 2144 ) brownstone2 16 48 270 1 -1
( 96 -848 2064 ) ( 96 -896 2144 ) ( 192 -896 2144 ) brownstone2 -48 -16 180 1 1
( 192 -896 2144 ) ( 192 -752 2144 ) ( 192 -752 2064 ) brownstone2 16 -16 180 1 1
( 96 -848 2064 ) ( 96 -752 2064 ) ( 96 -752 2144 ) brownstone2 16 -16 180 1 1
( 96 -752 2144 ) ( 96 -752 2064 ) ( 192 -752 2064 ) brownstone2 -48 -16 180 1 1
( 192 -752 2064 ) ( 96 -752 2064 ) ( 96 -848 2064 ) brownstone2 16 48 270 1 -1
}
// brush 7
{
( 192 -752 2064 ) ( 192 -848 2064 ) ( 288 -752 2064 ) brownstone2 -0 -32 -0 1 -1
( 192 -752 2144 ) ( 192 -896 2144 ) ( 192 -848 2064 ) brownstone2 32 32 180 1 1
( 192 -752 2144 ) ( 336 -752 2144 ) ( 192 -896 2144 ) brownstone2 -0 -32 -0 1 -1
( 192 -896 2144 ) ( 336 -752 2144 ) ( 288 -752 2064 ) brownstone2 -1.5094 32 180 1 1
( 288 -752 2064 ) ( 336 -752 2144 ) ( 192 -752 2144 ) brownstone2 -0 32 -0 1 -1
}
// brush 8
{
( 288 -752 2064 ) ( 336 -752 2144 ) ( 336 -656 2144 ) brownstone2 -0 -16 180 1 1
( 192 -752 2064 ) ( 288 -752 2064 ) ( 288 -656 2064 ) brownstone2 -16 -0 -0 1 -1
( 192 -752 2064 ) ( 192 -752 2144 ) ( 336 -752 2144 ) brownstone2 -16 -16 -0 1 -1
( 336 -656 2144 ) ( 192 -656 2144 ) ( 192 -656 2064 ) brownstone2 -16 -16 -0 1 -1
( 192 -656 2064 ) ( 192 -656 2144 ) ( 192 -752 2144 ) brownstone2 -0 -16 180 1 1
( 192 -752 2144 ) ( 192 -656 2144 ) ( 336 -656 2144 ) brownstone2 -16 -0 -0 1 -1
}
}
// entity 22
{
"classname" "func_detail"
"_phong" "1"
// brush 0
{
( 192 -1008 2064 ) ( 288 -1008 2064 ) ( 288 -1152 2064 ) brownstone2 -16 -16 -0 1 1
( 192 -1040 1984 ) ( 192 -1008 2064 ) ( 192 -1152 2064 ) brownstone2 16 16 -0 1 1
( 288 -1152 2064 ) ( 256 -1152 1984 ) ( 192 -1152 1984 ) brownstone2 -16 16 -0 1 1
( 288 -1008 2064 ) ( 256 -1040 1984 ) ( 256 -1152 1984 ) brownstone2 16 16 -0 1 1
( 256 -1152 1984 ) ( 256 -1040 1984 ) ( 192 -1040 1984 ) brownstone2 -16 -16 -0 1 1
( 288 -1056 2064 ) ( 240 -1056 2192 ) ( 240 -1056 2064 ) brownstone2 -16 16 -0 1 1
}
// brush 1
{
( 192 -1056 2064 ) ( 288 -1056 2064 ) ( 256 -1056 1984 ) brownstone2 -0 -0 -0 1 1
( 256 -1056 1984 ) ( 192 -992 1984 ) ( 192 -1056 1984 ) brownstone2 -0 -47.9999 -0 1 1
( 192 -1056 2064 ) ( 192 -960 2064 ) ( 288 -1056 2064 ) brownstone2 -0 -48 -0 1 1
( 288 -1056 2064 ) ( 192 -960 2064 ) ( 192 -992 1984 ) brownstone2 12.6897 -0 -0 1 1
( 192 -992 1984 ) ( 192 -960 2064 ) ( 192 -1056 2064 ) brownstone2 48 -0 -0 1 1
}
// brush 2
{
( 192 -960 2064 ) ( 192 -1056 2064 ) ( 96 -1056 2064 ) brownstone2 32 48 90 1 1
( 96 -960 2064 ) ( 96 -1056 2064 ) ( 96 -1056 1984 ) brownstone2 32 16 -0 1 1
( 192 -960 2064 ) ( 96 -960 2064 ) ( 96 -992 1984 ) brownstone2 -48 16 180 1 -1
( 192 -992 1984 ) ( 192 -1056 1984 ) ( 192 -1056 2064 ) brownstone2 32 16 -0 1 1
( 192 -1056 2064 ) ( 192 -1056 1984 ) ( 96 -1056 1984 ) brownstone2 -48 16 180 1 -1
( 96 -1056 1984 ) ( 192 -1056 1984 ) ( 192 -992 1984 ) brownstone2 32 48 90 1 1
}
// brush 3
{
( 288 -1152 1936 ) ( 192 -1152 1936 ) ( 192 -1152 1984 ) brownstone2 -16 16 -0 1 -1
( 192 -1056 1936 ) ( 192 -1056 1984 ) ( 192 -1152 1984 ) brownstone2 16 16 -0 1 -1
( 288 -1056 1936 ) ( 192 -1056 1936 ) ( 192 -1152 1936 ) brownstone2 -16 -16 -0 1 1
( 288 -1056 1936 ) ( 256 -1056 1984 ) ( 192 -1056 1984 ) brownstone2 -16 -0 -0 1 -1
( 192 -1056 1984 ) ( 256 -1056 1984 ) ( 256 -1152 1984 ) brownstone2 -16 -16 -0 1 1
( 256 -1152 1984 ) ( 256 -1056 1984 ) ( 288 -1056 1936 ) brownstone2 -0 -16 -0 1 -1
}
// brush 4
{
( 288 -1056 1936 ) ( 256 -1056 1984 ) ( 192 -992 1984 ) brownstone2 32 16 -0 1 1
( 192 -992 1984 ) ( 256 -1056 1984 ) ( 192 -1040 1984 ) brownstone2 -0 -48.0001 -0 1 1
( 192 -960 1936 ) ( 192 -1040 1936 ) ( 288 -1056 1936 ) brownstone2 -0 -48 -0 1 1
( 288 -1056 1936 ) ( 192 -1040 1936 ) ( 256 -1056 1984 ) brownstone2 -0 -0 -0 1 1
( 256 -1056 1984 ) ( 192 -1040 1936 ) ( 192 -1040 1984 ) brownstone2 -0 -0 -0 1 1
( 192 -1040 1984 ) ( 192 -1040 1936 ) ( 192 -960 1936 ) brownstone2 48 -0 -0 1 1
}
// brush 5
{
( 192 -1056 1936 ) ( 96 -1056 1936 ) ( 96 -1056 1984 ) brownstone2 -48 16 180 1 1
( 192 -1056 1984 ) ( 96 -1056 1984 ) ( 96 -992 1984 ) brownstone2 32 48 90 1 1
( 192 -992 1984 ) ( 192 -960 1936 ) ( 192 -1056 1936 ) brownstone2 32 16 -0 1 -1
( 96 -992 1984 ) ( 96 -960 1936 ) ( 192 -960 1936 ) brownstone2 -0 -0 90 1 -1
( 192 -960 1936 ) ( 96 -960 1936 ) ( 96 -1056 1936 ) brownstone2 32 48 90 1 1
( 96 -1056 1936 ) ( 96 -960 1936 ) ( 96 -992 1984 ) brownstone2 32 -0 -0 1 -1
}
// brush 6
{
( 192 -1056 2064 ) ( 288 -1056 2064 ) ( 192 -960 2064 ) brownstone2 -0 -48 -0 1 1
( 192 -1056 2144 ) ( 192 -960 2064 ) ( 192 -912 2144 ) brownstone2 48 32 -0 1 -1
( 192 -1056 2144 ) ( 192 -912 2144 ) ( 336 -1056 2144 ) brownstone2 -0 -48 -0 1 1
( 192 -912 2144 ) ( 288 -1056 2064 ) ( 336 -1056 2144 ) brownstone2 14.4906 32 -0 1 -1
( 288 -1056 2064 ) ( 192 -1056 2144 ) ( 336 -1056 2144 ) brownstone2 -0 32 -0 1 -1
}
// brush 7
{
( 96 -912 2144 ) ( 192 -1056 2144 ) ( 96 -1056 2144 ) brownstone2 32 48 90 1 1
( 96 -960 2064 ) ( 192 -912 2144 ) ( 96 -912 2144 ) brownstone2 -48 -16 180 1 1
( 192 -912 2144 ) ( 192 -1056 2064 ) ( 192 -1056 2144 ) brownstone2 32 -16 -0 1 -1
( 96 -960 2064 ) ( 96 -1056 2144 ) ( 96 -1056 2064 ) brownstone2 32 -16 -0 1 -1
( 96 -1056 2144 ) ( 192 -1056 2064 ) ( 96 -1056 2064 ) brownstone2 -48 -16 180 1 1
( 192 -1056 2064 ) ( 96 -960 2064 ) ( 96 -1056 2064 ) brownstone2 32 48 90 1 1
}
// brush 8
{
( 288 -1056 2064 ) ( 336 -1152 2144 ) ( 336 -1056 2144 ) brownstone2 16 -16 -0 1 -1
( 192 -1056 2064 ) ( 288 -1152 2064 ) ( 288 -1056 2064 ) brownstone2 -16 -16 -0 1 1
( 192 -1056 2064 ) ( 336 -1056 2144 ) ( 192 -1056 2144 ) brownstone2 -16 -16 -0 1 -1
( 336 -1152 2144 ) ( 192 -1152 2064 ) ( 192 -1152 2144 ) brownstone2 -16 -16 -0 1 -1
( 192 -1152 2064 ) ( 192 -1056 2144 ) ( 192 -1152 2144 ) brownstone2 16 -16 -0 1 -1
( 192 -1056 2144 ) ( 336 -1152 2144 ) ( 192 -1152 2144 ) brownstone2 -16 -16 -0 1 1
}
}