X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FMath%2FFrustum.cpp;h=3c7f21b8c0d363df6ced2e2df6a1574e8f240183;hb=b9a46d8e2b7e7e22c706e7dd3734f31015db4408;hp=e8b13666a977477f748809893a3cc3d85a859687;hpb=ed3662c0852c4312a612b4fc35bd03aba8d13db7;p=lugaru.git diff --git a/Source/Math/Frustum.cpp b/Source/Math/Frustum.cpp index e8b1366..3c7f21b 100644 --- a/Source/Math/Frustum.cpp +++ b/Source/Math/Frustum.cpp @@ -25,7 +25,7 @@ along with Lugaru. If not, see . #include void FRUSTUM:: -GetFrustum() + GetFrustum() { static float projmatrix[16]; static float mvmatrix[16]; @@ -93,86 +93,110 @@ GetFrustum() } int FRUSTUM:: -CubeInFrustum(float x, float y, float z, float size) + CubeInFrustum(float x, float y, float z, float size) { static int c, c2; for (int i = 0; i < 6; i++) { c = 0; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y - size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + if (frustum[i][0] * (x - size) + frustum[i][1] * (y - size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y - size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y - size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y + size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x - size) + frustum[i][1] * (y + size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y + size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y + size) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y - size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x - size) + frustum[i][1] * (y - size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y - size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y - size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y + size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x - size) + frustum[i][1] * (y + size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y + size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y + size) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (c == 0) + } + if (c == 0) { return 0; - if (c == 8) + } + if (c == 8) { c2++; + } } - if (c2 >= 6) + if (c2 >= 6) { return 2; - else + } else { return 1; + } } int FRUSTUM:: -CubeInFrustum(float x, float y, float z, float size, float height) + CubeInFrustum(float x, float y, float z, float size, float height) { static int c, c2; for (int i = 0; i < 6; i++) { c = 0; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y - height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + if (frustum[i][0] * (x - size) + frustum[i][1] * (y - height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y - height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y - height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y + height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x - size) + frustum[i][1] * (y + height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y + height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y + height) + frustum[i][2] * (z - size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y - height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x - size) + frustum[i][1] * (y - height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y - height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y - height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x - size) + frustum[i][1] * (y + height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x - size) + frustum[i][1] * (y + height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (frustum[i][0] * (x + size) + frustum[i][1] * (y + height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) + } + if (frustum[i][0] * (x + size) + frustum[i][1] * (y + height) + frustum[i][2] * (z + size) + frustum[i][3] > 0) { c++; - if (c == 0) + } + if (c == 0) { return 0; - if (c == 8) + } + if (c == 8) { c2++; + } } - if (c2 >= 6) + if (c2 >= 6) { return 2; - else + } else { return 1; + } } int FRUSTUM:: -SphereInFrustum(float x, float y, float z, float radius) + SphereInFrustum(float x, float y, float z, float radius) { - static int c2; + static int c2; for (int i = 0; i < 6; i++) { - if (frustum[i][0] * x + frustum[i][1] * y + frustum[i][2] * z + frustum[i][3] > -1 * radius) + if (frustum[i][0] * x + frustum[i][1] * y + frustum[i][2] * z + frustum[i][3] > -1 * radius) { c2++; - else + } else { return 0; + } } - if (c2 >= 6) + if (c2 >= 6) { return 2; - else + } else { return 1; + } }