X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FMath%2FFrustum.cpp;h=4844ba54f6516559851275cc31c8a55357f460c1;hb=0aab437dc560d2afa982e61cc2547756ad7b0761;hp=164074b22e0be6146617e44370e93322cb5fb773;hpb=b84825978803615f45a9f128232e62431042aec0;p=lugaru.git diff --git a/Source/Math/Frustum.cpp b/Source/Math/Frustum.cpp index 164074b..4844ba5 100644 --- a/Source/Math/Frustum.cpp +++ b/Source/Math/Frustum.cpp @@ -1,6 +1,6 @@ /* Copyright (C) 2003, 2010 - Wolfire Games -Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) +Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file) This file is part of Lugaru. @@ -18,14 +18,14 @@ You should have received a copy of the GNU General Public License along with Lugaru. If not, see . */ -#include "Math/Frustum.h" -#include +#include "Math/Frustum.hpp" -#include "Graphic/gamegl.h" +#include "Graphic/gamegl.hpp" +#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; + } }