Advertisement
ItsTotallyRSX

Untitled

Jan 24th, 2020
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.43 KB | None | 0 0
  1.  
  2.  
  3. #define COERCE_FLOAT(x) *reinterpret_cast<float*>(&x)
  4. #define LODWORD(x) *reinterpret_cast<uint32_t*>(&x)
  5.  
  6. const uint32_t _mask__AbsFloat_ = 0x7FFFFFFF;
  7. const uint32_t _mask__NegFloat_ = 0x80000000;
  8.  
  9. bool CullBoxFromConicSectionOfSphere(const float *coneOrg, const float *coneDir, float cosHalfFov, float radius, Bounds *bounds)
  10. {
  11. float v5; // xmm8_4
  12. float v6; // xmm4_4
  13. float v7; // xmm11_4
  14. float v8; // xmm9_4
  15. float v9; // xmm10_4
  16. float v10; // xmm3_4
  17. float v11; // xmm7_4
  18. float v12; // xmm1_4
  19. float v13; // xmm12_4
  20. float v14; // xmm2_4
  21. float v16; // xmm0_4
  22. float v17; // xmm14_4
  23. float v18; // xmm1_4
  24. float v19; // xmm15_4
  25. float v20; // xmm11_4
  26. float v21; // xmm1_4
  27. float v22; // xmm13_4
  28. float v23; // xmm7_4
  29. float v24; // xmm4_4
  30. float v25; // xmm7_4
  31. float v26; // xmm11_4
  32. float v27; // xmm12_4
  33. float v28; // xmm0_4
  34. float v29; // xmm2_4
  35. float v30; // xmm5_4
  36. float v31; // xmm0_4
  37. float v32; // xmm11_4
  38. float v33; // xmm12_4
  39. float v34; // xmm7_4
  40. float v35; // xmm1_4
  41. float v36; // xmm2_4
  42. float v37; // xmm1_4
  43. float v38; // [rsp+E8h] [rbp+20h]
  44.  
  45. v38 = cosHalfFov;
  46. v5 = bounds->midPoint.v[1] - coneOrg[1];
  47. v6 = radius;
  48. v7 = bounds->halfSize.v[0];
  49. v8 = bounds->midPoint.v[2] - coneOrg[2];
  50. v9 = bounds->midPoint.v[0] - *coneOrg;
  51.  
  52. v10 = (float)abs(v9) - v7;
  53. if (v10 < 0.0)
  54. v10 = 0.0;
  55.  
  56. v11 = bounds->halfSize.v[1];
  57. v12 = (float)abs(v5) - v11;
  58. if (v12 < 0.0)
  59. v12 = 0.0;
  60.  
  61. v13 = bounds->halfSize.v[2];
  62. v14 = (float)abs(v8) - v13;
  63.  
  64. if (v14 < 0.0)
  65. v14 = 0.0;
  66.  
  67. if ((float)((float)((float)(v12 * v12) + (float)(v10 * v10)) + (float)(v14 * v14)) > (float)(v6 * v6))
  68. return true;
  69.  
  70. v16 = -1.0f;
  71. v17 = *coneDir;
  72.  
  73. if (*coneDir < 0.0)
  74. v18 = -1.0f;
  75. else
  76. v18 = 1.0f;
  77.  
  78. v19 = coneDir[1];
  79. v20 = v7 * v18;
  80. if (v19 < 0.0)
  81. v21 = -1.0f;
  82. else
  83. v21 = 1.0f;
  84.  
  85. v22 = coneDir[2];
  86. v23 = v11 * v21;
  87. if (v22 >= 0.0)
  88. v16 = 1.0f;
  89.  
  90. v24 = (float)((float)(v19 * v5) + (float)(v17 * v9)) + (float)(v22 * v8);
  91.  
  92. if (v24 >= (float)((float)((float)(v19 * v23) + (float)(v17 * v20)) + (float)(v22 * (float)(v13 * v16))))
  93. return true;
  94.  
  95.  
  96. v25 = (float)((0.0f - v24) * v22) + v8;
  97. v26 = (float)((0.0f - v24) * v17) + v9;
  98. v27 = (float)((0.0f - v24) * v19) + v5;
  99. v28 = v38;
  100. v29 = (float)((float)(v27 * v27) + (float)(v26 * v26)) + (float)(v25 * v25);
  101. v30 = 1.0f - (float)(v28 * v28);
  102.  
  103. if ((float)((float)(v24 * v24) * v30) >= (float)((float)(v28 * v28) * v29))
  104. return false;
  105.  
  106. v31 = sqrtf(v30 * v29);
  107. v32 = (float)(v26 * (float)(v38 / v31)) + v17;
  108. v33 = (float)(v27 * (float)(v38 / v31)) + v19;
  109. v34 = (float)(v25 * (float)(v38 / v31)) + v22;
  110.  
  111. v35 = abs(bounds->halfSize.v[0] * v32);
  112.  
  113. v36 = (float)((float)((float)(v33 * v5) + (float)(v32 * v9)) + (float)(v34 * v8)) - v35;
  114.  
  115. v37 = abs(bounds->halfSize.v[1] * v33);
  116.  
  117.  
  118. return (float)((float)(v36 - v37) - (float)abs(bounds->halfSize.v[2] * v34)) >= 0.0f;
  119. }
  120.  
  121. bool CullBoxFromSphere(const float *sphereOrg, float radius, Bounds *bounds)
  122. {
  123. float v3;
  124. float v4;
  125. float v5;
  126.  
  127. v3 = (float)abs(*sphereOrg - bounds->midPoint.v[0])
  128. - bounds->halfSize.v[0];
  129. if (v3 < 0.0)
  130. v3 = 0.0;
  131.  
  132. v4 = (float)abs(sphereOrg[1] - bounds->midPoint.v[1])
  133. - bounds->halfSize.v[1];
  134. if (v4 < 0.0)
  135. v4 = 0.0;
  136.  
  137. v5 = (float)abs(sphereOrg[2] - bounds->midPoint.v[2])
  138. - bounds->halfSize.v[2];
  139. if (v5 < 0.0)
  140. v5 = 0.0;
  141.  
  142. return (float)((float)((float)(v4 * v4) + (float)(v3 * v3)) + (float)(v5 * v5)) > (float)(radius * radius);
  143. }
  144.  
  145.  
  146. #if 1
  147. bool R_CullBoxFromLightRegionHull(GfxLightRegionHull *hull, const float *boxMidPoint, const float *boxHalfSize)
  148. {
  149. float v3;
  150. float v4;
  151. float v5;
  152. float v7;
  153. float v8;
  154. float v9;
  155. float v10;
  156. float v11;
  157. float v12;
  158. float v13;
  159. float v14;
  160. float v15;
  161. float v16;
  162. float v17;
  163. float v18;
  164. unsigned int v19;
  165. unsigned int v20;
  166. GfxLightRegionAxis *v21;
  167. float v22;
  168. float v23;
  169.  
  170. v3 = *boxMidPoint;
  171. v4 = *boxHalfSize;
  172. v5 = abs(*boxMidPoint - hull->kdopMidPoint[0]);
  173. if (v5 >= (float)(*boxHalfSize + hull->kdopHalfSize[0]))
  174. return true;
  175. v7 = boxMidPoint[1];
  176. v8 = boxHalfSize[1];
  177. v9 = abs(v7 - hull->kdopMidPoint[1]);
  178. if (v9 >= (float)(boxHalfSize[1] + hull->kdopHalfSize[1]))
  179. return true;
  180. v10 = boxMidPoint[2];
  181. v11 = boxHalfSize[2];
  182. v12 = abs(v10 - hull->kdopMidPoint[2]);
  183. if (v12 >= (float)(boxHalfSize[2] + hull->kdopHalfSize[2]))
  184. return true;
  185. v13 = abs((float)(v7 + v3) - hull->kdopMidPoint[3]);
  186. if (v13 >= (float)((float)(v8 + v4) + hull->kdopHalfSize[3]))
  187. return true;
  188. v14 = abs((float)(v3 - v7) - hull->kdopMidPoint[4]);
  189. if (v14 >= (float)((float)(v8 + v4) + hull->kdopHalfSize[4]))
  190. return true;
  191. v15 = abs((float)(v10 + v3) - hull->kdopMidPoint[5]);
  192. if (v15 >= (float)((float)(v11 + v4) + hull->kdopHalfSize[5]))
  193. return true;
  194. v16 = abs((float)(v3 - v10) - hull->kdopMidPoint[6]);
  195. if (v16 >= (float)((float)(v11 + v4) + hull->kdopHalfSize[6]))
  196. return true;
  197. v17 = abs((float)(v10 + v7) - hull->kdopMidPoint[7]);
  198. if (v17 >= (float)((float)(v11 + v8) + hull->kdopHalfSize[7]))
  199. return true;
  200. v18 = abs((float)(v7 - v10) - hull->kdopMidPoint[8]);
  201. if (v18 >= (float)((float)(v11 + v8) + hull->kdopHalfSize[8]))
  202. return true;
  203. v19 = hull->axisCount;
  204. v20 = 0;
  205. if (!v19)
  206. return false;
  207. v21 = hull->axis;
  208. while (1)
  209. {
  210. v22 = abs(
  211. (float)((float)((float)(v21->dir.v[1] * v7) + (float)(v21->dir.v[0] * v3))
  212. + (float)(v21->dir.v[2] * v10))
  213. - v21->midPoint);
  214. v23 = abs(v21->dir.v[0]);
  215. if (v22 >= (float)((float)((float)((float)((float)abs(v21->dir.v[1]) * v8)
  216. + (float)(v23 * v4))
  217. + (float)((float)abs(v21->dir.v[2]) * v11))
  218. + v21->halfSize))
  219. break;
  220. ++v20;
  221. ++v21;
  222. if (v20 >= v19)
  223. return false;
  224. }
  225. return true;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement