light: add missing model offset for luxel occlusion check against bmodels with origin brush

This commit is contained in:
Eric Wasylishen 2023-04-08 12:37:44 -06:00
parent 8d368060eb
commit c2a787f6a3
3 changed files with 49 additions and 4 deletions

View File

@ -309,7 +309,7 @@ static bool Light_PointInAnySolid(const mbsp_t *bsp, const dmodelh2_t *self, con
if (modelinfo->object_channel_mask.value() != self_modelinfo->object_channel_mask.value())
continue;
if (Light_PointInSolid(bsp, modelinfo->model, point)) {
if (Light_PointInSolid(bsp, modelinfo->model, point - modelinfo->offset)) {
// Only mark occluded if the bmodel is fully opaque
if (modelinfo->alpha.value() == 1.0f)
return true;

View File

@ -60,6 +60,51 @@
( -576 224 128 ) ( -575 224 128 ) ( -576 224 129 ) e1u1/sky1 0 16 0 1 1
( -480 208 128 ) ( -480 208 129 ) ( -480 209 128 ) e1u1/sky1 16 16 0 1 1
}
// brush 6
{
( -4 -1 0 ) ( -4 0 0 ) ( -4 -1 1 ) e1u1/twall2_1 64 16 0 1 1
( -1 -4 0 ) ( -1 -4 1 ) ( 0 -4 0 ) e1u1/twall2_1 64 16 0 1 1
( -1 -1 0 ) ( 0 -1 0 ) ( -1 0 0 ) e1u1/twall2_1 64 16 0 1 1
( 1 1 1 ) ( 1 2 1 ) ( 2 1 1 ) e1u1/twall2_1 64 16 0 1 1
( 1 4 1 ) ( 2 4 1 ) ( 1 4 2 ) e1u1/twall2_1 64 16 0 1 1
( 4 1 1 ) ( 4 1 2 ) ( 4 2 1 ) e1u1/twall2_1 64 16 0 1 1
}
// brush 7
{
( -324 175 0 ) ( -324 176 0 ) ( -324 175 1 ) e1u1/twall2_1 -112 16 0 1 1
( -321 172 0 ) ( -321 172 1 ) ( -320 172 0 ) e1u1/twall2_1 0 16 0 1 1
( -321 175 0 ) ( -320 175 0 ) ( -321 176 0 ) e1u1/twall2_1 0 64 0 1 1
( -319 177 1 ) ( -319 178 1 ) ( -318 177 1 ) e1u1/twall2_1 0 64 0 1 1
( -319 180 1 ) ( -318 180 1 ) ( -319 180 2 ) e1u1/twall2_1 0 16 0 1 1
( -316 177 1 ) ( -316 177 2 ) ( -316 178 1 ) e1u1/twall2_1 -112 16 0 1 1
}
// brush 8
{
( -324 79 0 ) ( -324 80 0 ) ( -324 79 1 ) e1u1/twall2_1 -16 16 0 1 1
( -321 76 0 ) ( -321 76 1 ) ( -320 76 0 ) e1u1/twall2_1 0 16 0 1 1
( -321 79 0 ) ( -320 79 0 ) ( -321 80 0 ) e1u1/twall2_1 0 -32 0 1 1
( -319 81 1 ) ( -319 82 1 ) ( -318 81 1 ) e1u1/twall2_1 0 -32 0 1 1
( -319 84 1 ) ( -318 84 1 ) ( -319 84 2 ) e1u1/twall2_1 0 16 0 1 1
( -316 81 1 ) ( -316 81 2 ) ( -316 82 1 ) e1u1/twall2_1 -16 16 0 1 1
}
// brush 9
{
( -436 79 0 ) ( -436 80 0 ) ( -436 79 1 ) e1u1/twall2_1 -16 16 0 1 1
( -433 76 0 ) ( -433 76 1 ) ( -432 76 0 ) e1u1/twall2_1 112 16 0 1 1
( -433 79 0 ) ( -432 79 0 ) ( -433 80 0 ) e1u1/twall2_1 112 -32 0 1 1
( -431 81 1 ) ( -431 82 1 ) ( -430 81 1 ) e1u1/twall2_1 112 -32 0 1 1
( -431 84 1 ) ( -430 84 1 ) ( -431 84 2 ) e1u1/twall2_1 112 16 0 1 1
( -428 81 1 ) ( -428 81 2 ) ( -428 82 1 ) e1u1/twall2_1 -16 16 0 1 1
}
// brush 10
{
( -436 175 0 ) ( -436 176 0 ) ( -436 175 1 ) e1u1/twall2_1 -112 16 0 1 1
( -433 172 0 ) ( -433 172 1 ) ( -432 172 0 ) e1u1/twall2_1 112 16 0 1 1
( -433 175 0 ) ( -432 175 0 ) ( -433 176 0 ) e1u1/twall2_1 112 64 0 1 1
( -431 177 1 ) ( -431 178 1 ) ( -430 177 1 ) e1u1/twall2_1 112 64 0 1 1
( -431 180 1 ) ( -430 180 1 ) ( -431 180 2 ) e1u1/twall2_1 112 16 0 1 1
( -428 177 1 ) ( -428 177 2 ) ( -428 178 1 ) e1u1/twall2_1 -112 16 0 1 1
}
}
// entity 1
{

View File

@ -595,13 +595,13 @@ TEST_CASE("q2_light_origin_brush_shadow")
{
auto [bsp, bspx] = QbspVisLight_Q2("q2_light_origin_brush_shadow.map", {});
const qvec3d under_shadow_bmodel{-320, 176, 0};
const qvec3d under_nonshadow_bmodel{-432, 176, 0};
const qvec3d under_shadow_bmodel{-320, 176, 1};
const qvec3d under_nonshadow_bmodel{-432, 176, 1};
const qvec3d under_nodraw_shadow_bmodel = under_shadow_bmodel - qvec3d(0, 96, 0);
const qvec3d under_nodraw_nonshadow_bmodel = under_nonshadow_bmodel - qvec3d(0, 96, 0);
const qvec3d at_origin{0, 0, 0};
const qvec3d at_origin{0, 0, 1};
INFO("ensure expected shadow");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 0}, under_shadow_bmodel);