Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define COERCE_FLOAT(x) *reinterpret_cast<float*>(&x)
- #define LODWORD(x) *reinterpret_cast<uint32_t*>(&x)
- const uint32_t _mask__AbsFloat_ = 0x7FFFFFFF;
- const uint32_t _mask__NegFloat_ = 0x80000000;
- bool CullBoxFromConicSectionOfSphere(const float *coneOrg, const float *coneDir, float cosHalfFov, float radius, Bounds *bounds)
- {
- float v5; // xmm8_4
- float v6; // xmm4_4
- float v7; // xmm11_4
- float v8; // xmm9_4
- float v9; // xmm10_4
- float v10; // xmm3_4
- float v11; // xmm7_4
- float v12; // xmm1_4
- float v13; // xmm12_4
- float v14; // xmm2_4
- float v16; // xmm0_4
- float v17; // xmm14_4
- float v18; // xmm1_4
- float v19; // xmm15_4
- float v20; // xmm11_4
- float v21; // xmm1_4
- float v22; // xmm13_4
- float v23; // xmm7_4
- float v24; // xmm4_4
- float v25; // xmm7_4
- float v26; // xmm11_4
- float v27; // xmm12_4
- float v28; // xmm0_4
- float v29; // xmm2_4
- float v30; // xmm5_4
- float v31; // xmm0_4
- float v32; // xmm11_4
- float v33; // xmm12_4
- float v34; // xmm7_4
- float v35; // xmm1_4
- float v36; // xmm2_4
- float v37; // xmm1_4
- float v38; // [rsp+E8h] [rbp+20h]
- v38 = cosHalfFov;
- v5 = bounds->midPoint.v[1] - coneOrg[1];
- v6 = radius;
- v7 = bounds->halfSize.v[0];
- v8 = bounds->midPoint.v[2] - coneOrg[2];
- v9 = bounds->midPoint.v[0] - *coneOrg;
- v10 = (float)abs(v9) - v7;
- if (v10 < 0.0)
- v10 = 0.0;
- v11 = bounds->halfSize.v[1];
- v12 = (float)abs(v5) - v11;
- if (v12 < 0.0)
- v12 = 0.0;
- v13 = bounds->halfSize.v[2];
- v14 = (float)abs(v8) - v13;
- if (v14 < 0.0)
- v14 = 0.0;
- if ((float)((float)((float)(v12 * v12) + (float)(v10 * v10)) + (float)(v14 * v14)) > (float)(v6 * v6))
- return true;
- v16 = -1.0f;
- v17 = *coneDir;
- if (*coneDir < 0.0)
- v18 = -1.0f;
- else
- v18 = 1.0f;
- v19 = coneDir[1];
- v20 = v7 * v18;
- if (v19 < 0.0)
- v21 = -1.0f;
- else
- v21 = 1.0f;
- v22 = coneDir[2];
- v23 = v11 * v21;
- if (v22 >= 0.0)
- v16 = 1.0f;
- v24 = (float)((float)(v19 * v5) + (float)(v17 * v9)) + (float)(v22 * v8);
- if (v24 >= (float)((float)((float)(v19 * v23) + (float)(v17 * v20)) + (float)(v22 * (float)(v13 * v16))))
- return true;
- v25 = (float)((0.0f - v24) * v22) + v8;
- v26 = (float)((0.0f - v24) * v17) + v9;
- v27 = (float)((0.0f - v24) * v19) + v5;
- v28 = v38;
- v29 = (float)((float)(v27 * v27) + (float)(v26 * v26)) + (float)(v25 * v25);
- v30 = 1.0f - (float)(v28 * v28);
- if ((float)((float)(v24 * v24) * v30) >= (float)((float)(v28 * v28) * v29))
- return false;
- v31 = sqrtf(v30 * v29);
- v32 = (float)(v26 * (float)(v38 / v31)) + v17;
- v33 = (float)(v27 * (float)(v38 / v31)) + v19;
- v34 = (float)(v25 * (float)(v38 / v31)) + v22;
- v35 = abs(bounds->halfSize.v[0] * v32);
- v36 = (float)((float)((float)(v33 * v5) + (float)(v32 * v9)) + (float)(v34 * v8)) - v35;
- v37 = abs(bounds->halfSize.v[1] * v33);
- return (float)((float)(v36 - v37) - (float)abs(bounds->halfSize.v[2] * v34)) >= 0.0f;
- }
- bool CullBoxFromSphere(const float *sphereOrg, float radius, Bounds *bounds)
- {
- float v3;
- float v4;
- float v5;
- v3 = (float)abs(*sphereOrg - bounds->midPoint.v[0])
- - bounds->halfSize.v[0];
- if (v3 < 0.0)
- v3 = 0.0;
- v4 = (float)abs(sphereOrg[1] - bounds->midPoint.v[1])
- - bounds->halfSize.v[1];
- if (v4 < 0.0)
- v4 = 0.0;
- v5 = (float)abs(sphereOrg[2] - bounds->midPoint.v[2])
- - bounds->halfSize.v[2];
- if (v5 < 0.0)
- v5 = 0.0;
- return (float)((float)((float)(v4 * v4) + (float)(v3 * v3)) + (float)(v5 * v5)) > (float)(radius * radius);
- }
- #if 1
- bool R_CullBoxFromLightRegionHull(GfxLightRegionHull *hull, const float *boxMidPoint, const float *boxHalfSize)
- {
- float v3;
- float v4;
- float v5;
- float v7;
- float v8;
- float v9;
- float v10;
- float v11;
- float v12;
- float v13;
- float v14;
- float v15;
- float v16;
- float v17;
- float v18;
- unsigned int v19;
- unsigned int v20;
- GfxLightRegionAxis *v21;
- float v22;
- float v23;
- v3 = *boxMidPoint;
- v4 = *boxHalfSize;
- v5 = abs(*boxMidPoint - hull->kdopMidPoint[0]);
- if (v5 >= (float)(*boxHalfSize + hull->kdopHalfSize[0]))
- return true;
- v7 = boxMidPoint[1];
- v8 = boxHalfSize[1];
- v9 = abs(v7 - hull->kdopMidPoint[1]);
- if (v9 >= (float)(boxHalfSize[1] + hull->kdopHalfSize[1]))
- return true;
- v10 = boxMidPoint[2];
- v11 = boxHalfSize[2];
- v12 = abs(v10 - hull->kdopMidPoint[2]);
- if (v12 >= (float)(boxHalfSize[2] + hull->kdopHalfSize[2]))
- return true;
- v13 = abs((float)(v7 + v3) - hull->kdopMidPoint[3]);
- if (v13 >= (float)((float)(v8 + v4) + hull->kdopHalfSize[3]))
- return true;
- v14 = abs((float)(v3 - v7) - hull->kdopMidPoint[4]);
- if (v14 >= (float)((float)(v8 + v4) + hull->kdopHalfSize[4]))
- return true;
- v15 = abs((float)(v10 + v3) - hull->kdopMidPoint[5]);
- if (v15 >= (float)((float)(v11 + v4) + hull->kdopHalfSize[5]))
- return true;
- v16 = abs((float)(v3 - v10) - hull->kdopMidPoint[6]);
- if (v16 >= (float)((float)(v11 + v4) + hull->kdopHalfSize[6]))
- return true;
- v17 = abs((float)(v10 + v7) - hull->kdopMidPoint[7]);
- if (v17 >= (float)((float)(v11 + v8) + hull->kdopHalfSize[7]))
- return true;
- v18 = abs((float)(v7 - v10) - hull->kdopMidPoint[8]);
- if (v18 >= (float)((float)(v11 + v8) + hull->kdopHalfSize[8]))
- return true;
- v19 = hull->axisCount;
- v20 = 0;
- if (!v19)
- return false;
- v21 = hull->axis;
- while (1)
- {
- v22 = abs(
- (float)((float)((float)(v21->dir.v[1] * v7) + (float)(v21->dir.v[0] * v3))
- + (float)(v21->dir.v[2] * v10))
- - v21->midPoint);
- v23 = abs(v21->dir.v[0]);
- if (v22 >= (float)((float)((float)((float)((float)abs(v21->dir.v[1]) * v8)
- + (float)(v23 * v4))
- + (float)((float)abs(v21->dir.v[2]) * v11))
- + v21->halfSize))
- break;
- ++v20;
- ++v21;
- if (v20 >= v19)
- return false;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement