mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
optimize projection functions
This commit is contained in:
@@ -30,21 +30,22 @@ glm_frustum(float left,
|
|||||||
float nearVal,
|
float nearVal,
|
||||||
float farVal,
|
float farVal,
|
||||||
mat4 dest) {
|
mat4 dest) {
|
||||||
float rl, tb, fn;
|
float rl, tb, fn, nv;
|
||||||
|
|
||||||
glm__memzero(float, dest, sizeof(mat4));
|
glm__memzero(float, dest, sizeof(mat4));
|
||||||
|
|
||||||
rl = 1.0f / (right - left);
|
rl = 1.0f / (right - left);
|
||||||
tb = 1.0f / (top - bottom);
|
tb = 1.0f / (top - bottom);
|
||||||
fn = 1.0f / (farVal - nearVal);
|
fn =-1.0f / (farVal - nearVal);
|
||||||
|
nv = 2.0f * nearVal;
|
||||||
|
|
||||||
dest[0][0] = 2.0f * nearVal * rl;
|
dest[0][0] = nv * rl;
|
||||||
dest[1][1] = 2.0f * nearVal * tb;
|
dest[1][1] = nv * tb;
|
||||||
dest[2][0] = (right + left) * rl;
|
dest[2][0] = (right + left) * rl;
|
||||||
dest[2][1] = (top + bottom) * tb;
|
dest[2][1] = (top + bottom) * tb;
|
||||||
dest[2][2] = -(farVal + nearVal) * fn;
|
dest[2][2] = (farVal + nearVal) * fn;
|
||||||
dest[2][3] = -1.0f;
|
dest[2][3] =-1.0f;
|
||||||
dest[3][2] = -2.0f * farVal * nearVal * fn;
|
dest[3][2] = farVal * nv * fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -71,16 +72,16 @@ glm_ortho(float left,
|
|||||||
|
|
||||||
glm__memzero(float, dest, sizeof(mat4));
|
glm__memzero(float, dest, sizeof(mat4));
|
||||||
|
|
||||||
rl = 1.0f / (right - left);
|
rl = 1.0f / (right - left);
|
||||||
tb = 1.0f / (top - bottom);
|
tb = 1.0f / (top - bottom);
|
||||||
fn = 1.0f / (farVal - nearVal);
|
fn =-1.0f / (farVal - nearVal);
|
||||||
|
|
||||||
dest[0][0] = 2.0f * rl;
|
dest[0][0] = 2.0f * rl;
|
||||||
dest[1][1] = 2.0f * tb;
|
dest[1][1] = 2.0f * tb;
|
||||||
dest[2][2] =-2.0f * fn;
|
dest[2][2] = 2.0f * fn;
|
||||||
dest[3][0] =-(right + left) * rl;
|
dest[3][0] =-(right + left) * rl;
|
||||||
dest[3][1] =-(top + bottom) * tb;
|
dest[3][1] =-(top + bottom) * tb;
|
||||||
dest[3][2] =-(farVal + nearVal) * fn;
|
dest[3][2] = (farVal + nearVal) * fn;
|
||||||
dest[3][3] = 1.0f;
|
dest[3][3] = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +103,7 @@ glm_ortho_default(float aspect,
|
|||||||
-100.0f,
|
-100.0f,
|
||||||
100.0f,
|
100.0f,
|
||||||
dest);
|
dest);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
glm_ortho(-1.0f,
|
glm_ortho(-1.0f,
|
||||||
@@ -134,7 +135,7 @@ glm_ortho_default_s(float aspect,
|
|||||||
-size - 100.0f,
|
-size - 100.0f,
|
||||||
size + 100.0f,
|
size + 100.0f,
|
||||||
dest);
|
dest);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
glm_ortho(-size,
|
glm_ortho(-size,
|
||||||
@@ -166,14 +167,14 @@ glm_perspective(float fovy,
|
|||||||
|
|
||||||
glm__memzero(float, dest, sizeof(mat4));
|
glm__memzero(float, dest, sizeof(mat4));
|
||||||
|
|
||||||
f = cosf(fovy * 0.5f) / sinf(fovy * 0.5f);
|
f = 1.0f / tanf(fovy * 0.5f);
|
||||||
fn = 1.0f / (nearVal - farVal);
|
fn = 1.0f / (nearVal - farVal);
|
||||||
|
|
||||||
dest[0][0] = f / aspect;
|
dest[0][0] = f / aspect;
|
||||||
dest[1][1] = f;
|
dest[1][1] = f;
|
||||||
dest[2][2] = (nearVal + farVal) * fn;
|
dest[2][2] = (nearVal + farVal) * fn;
|
||||||
dest[2][3] =-1.0f;
|
dest[2][3] =-1.0f;
|
||||||
dest[3][2] = 2 * nearVal * farVal * fn;
|
dest[3][2] = 2.0f * nearVal * farVal * fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -206,7 +207,7 @@ CGLM_INLINE
|
|||||||
void
|
void
|
||||||
glm_perspective_resize(float aspect,
|
glm_perspective_resize(float aspect,
|
||||||
mat4 proj) {
|
mat4 proj) {
|
||||||
if (proj[0][0] == 0)
|
if (proj[0][0] == 0.0f)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
proj[0][0] = proj[1][1] / aspect;
|
proj[0][0] = proj[1][1] / aspect;
|
||||||
|
|||||||
Reference in New Issue
Block a user