qbsp: wip mirroring faces

This commit is contained in:
Eric Wasylishen 2022-02-21 00:47:57 -07:00
parent 019fa63361
commit 3b348af301
5 changed files with 37 additions and 11 deletions

View File

@ -571,8 +571,8 @@ struct dplane_t : qplane3f
#define Q2_CONTENTS_LADDER 0x20000000
// Special contents flags for the compiler only
#define CFLAGS_STRUCTURAL_COVERED_BY_DETAIL (1 << 0)
#define CFLAGS_WAS_ILLUSIONARY (1 << 1) /* was illusionary, got changed to something else */
#define CFLAGS_STRUCTURAL_COVERED_BY_DETAIL (1 << 0) // fixme-brushbsp: remove
#define CFLAGS_WAS_ILLUSIONARY (1 << 1) // fixme-brushbsp: remove
#define CFLAGS_BMODEL_MIRROR_INSIDE \
(1 << 3) /* set "_mirrorinside" "1" on a bmodel to mirror faces for when the player is inside. */
#define CFLAGS_NO_CLIPPING_SAME_TYPE \

View File

@ -27,6 +27,7 @@
extern int csgmergefaces;
int MakeSkipTexinfo();
face_t *NewFaceFromFace(face_t *in);
face_t *NewFaceFromFace(const face_t *in);
face_t *MirrorFace(const face_t *face);
std::tuple<face_t *, face_t *> SplitFace(face_t *in, const qplane3d &split);
void UpdateFaceSphere(face_t *in);

View File

@ -69,7 +69,7 @@ Duplicates the non point information of a face, used by SplitFace and
MergeFace.
==================
*/
face_t *NewFaceFromFace(face_t *in)
face_t *NewFaceFromFace(const face_t *in)
{
face_t *newf = new face_t{};
@ -288,6 +288,17 @@ static void ClipInside(const face_t *clipface, bool precedence, std::list<face_t
}
}
face_t *MirrorFace(const face_t *face)
{
face_t *newface = NewFaceFromFace(face);
newface->w = face->w.flip();
newface->planeside = face->planeside ^ 1;
newface->contents.swap();
newface->lmshift.swap();
return newface;
}
/*
==================
SaveFacesToPlaneList

View File

@ -577,6 +577,11 @@ static void AddFaceToTree_r(mapentity_t* entity, face_t *face, brush_t *srcbrush
for (face_t *part: parts) {
node->facelist.push_back(part);
// fixme-brushbsp: condition for face being two sided?
if (true) {
node->facelist.push_back(MirrorFace(part));
}
}
}

View File

@ -11,19 +11,28 @@
{
( -112 -112 96 ) ( -112 -111 96 ) ( -112 -112 97 ) orangestuff8 [ 0 1 0 -16 ] [ 0 0 -1 0 ] 0 1 1
( -80 -96 80 ) ( -81 -96 80 ) ( -80 -96 81 ) orangestuff8 [ -1 0 0 16 ] [ 0 0 -1 0 ] 180 1 1
( -80 -432 80 ) ( -80 -431 80 ) ( -81 -432 80 ) orangestuff8 [ 1 0 0 -16 ] [ 0 -1 0 16 ] 180 1 1
( -80 -432 0 ) ( -80 -431 0 ) ( -81 -432 0 ) orangestuff8 [ 1 0 0 -16 ] [ 0 -1 0 16 ] 180 1 1
( -160 -112 96 ) ( -161 -112 96 ) ( -160 -111 96 ) orangestuff8 [ -1 0 0 16 ] [ 0 -1 0 16 ] 180 1 1
( -160 128 96 ) ( -160 128 97 ) ( -161 128 96 ) orangestuff8 [ 1 0 0 -16 ] [ 0 0 -1 0 ] 180 1 1
( 144 -432 80 ) ( 144 -432 81 ) ( 144 -431 80 ) orangestuff8 [ 0 -1 0 16 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 1
{
( -179.8822509939086 -118.62741699796953 88 ) ( -179.8822509939086 -118.62741699796953 89 ) ( -180.5893577750951 -119.33452377915609 88 ) orangestuff8 [ 0.7071067811865475 0.7071067811865475 0 35.078217 ] [ 0 0 -1 -8 ] 180 1 1
( -89.37258300203048 -141.25483399593907 88 ) ( -90.07968978321703 -140.5477272147525 88 ) ( -89.37258300203048 -141.25483399593907 89 ) orangestuff8 [ -0.7071067811865475 0.7071067811865475 0 -27.313705 ] [ 0 0 -1 -8 ] 0 1 1
( 159.52900397563428 -344.90158697766475 72 ) ( 158.82189719444773 -344.1944801964782 72 ) ( 158.82189719444773 -345.6086937588513 72 ) orangestuff8 [ 0.7071067811865475 0.7071067811865475 0 35.078217 ] [ 0.7071067811865475 -0.7071067811865475 0 27.313705 ] 225 1 1
( -123.31370849898477 -175.19595949289334 88 ) ( -124.0208152801713 -175.9030662740799 88 ) ( -124.02081528017132 -174.48885271170678 88 ) orangestuff8 [ -0.7071067811865475 -0.7071067811865475 0 -35.078217 ] [ 0.7071067811865475 -0.7071067811865475 0 27.313705 ] 135 1 1
( -78.05887450304573 -107.3137084989848 72 ) ( -78.76598128423227 -108.02081528017132 72 ) ( -78.05887450304573 -107.3137084989848 73 ) orangestuff8 [ -0.7071067811865475 -0.7071067811865475 0 -35.078217 ] [ 0 0 -1 -8 ] 180 1 1
( 170.84271247461902 -333.58787847868 72 ) ( 170.84271247461902 -333.58787847868 73 ) ( 170.13560569343247 -332.88077169749346 72 ) orangestuff8 [ 0.7071067811865475 -0.7071067811865475 0 27.313705 ] [ 0 0 -1 -8 ] 0 1 1
( 64 -16 96 ) ( 64 -15 96 ) ( 64 -16 97 ) *zwater1 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 64 -16 96 ) ( 64 -16 97 ) ( 65 -16 96 ) *zwater1 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 64 -16 96 ) ( 65 -16 96 ) ( 64 -15 96 ) *zwater1 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 80 144 ) ( 96 81 144 ) ( 97 80 144 ) *zwater1 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 80 112 ) ( 97 80 112 ) ( 96 80 113 ) *zwater1 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 80 112 ) ( 96 80 113 ) ( 96 81 112 ) *zwater1 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 2
{
( -48 80 96 ) ( -48 81 96 ) ( -48 80 97 ) brown_brick [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -48 64 96 ) ( -48 64 97 ) ( -47 64 96 ) brown_brick [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -48 80 0 ) ( -47 80 0 ) ( -48 81 0 ) brown_brick [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 16 176 96 ) ( 16 177 96 ) ( 17 176 96 ) brown_brick [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 16 176 112 ) ( 17 176 112 ) ( 16 176 113 ) brown_brick [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 16 176 112 ) ( 16 176 113 ) ( 16 177 112 ) brown_brick [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 1