瀏覽代碼

Implement float4x4::ortho() and float4x4::translate().

legacy
Sam Hocevar sam 13 年之前
父節點
當前提交
a17ef2ca4c
共有 2 個文件被更改,包括 29 次插入0 次删除
  1. +27
    -0
      src/matrix.cpp
  2. +2
    -0
      src/matrix.h

+ 27
- 0
src/matrix.cpp 查看文件

@@ -62,6 +62,24 @@ template<> float4x4 float4x4::invert() const
return ret;
}

template<> float4x4 float4x4::ortho(float left, float right, float bottom,
float top, float near, float far)
{
float invrl = (right != left) ? 1.0f / (right - left) : 0.0f;
float invtb = (top != bottom) ? 1.0f / (top - bottom) : 0.0f;
float invfn = (far != near) ? 1.0f / (far - near) : 0.0f;

float4x4 ret(0.0f);
ret[0][0] = 2.0f * invrl;
ret[1][1] = 2.0f * invtb;
ret[2][2] = -2.0f * invfn;
ret[3][0] = - (right + left) * invrl;
ret[3][1] = - (top + bottom) * invtb;
ret[3][2] = - (far + near) * invfn;
ret[3][3] = 1.0f;
return ret;
}

template<> float4x4 float4x4::frustum(float left, float right, float bottom,
float top, float near, float far)
{
@@ -89,3 +107,12 @@ template<> float4x4 float4x4::perspective(float theta, float width,
return frustum(-near * t1, near * t1, -near * t2, near * t2, near, far);
}

template<> float4x4 float4x4::translate(float x, float y, float z)
{
float4x4 ret(1.0f);
ret[3][0] = x;
ret[3][1] = y;
ret[3][2] = z;
return ret;
}


+ 2
- 0
src/matrix.h 查看文件

@@ -195,8 +195,10 @@ template <typename T> struct Mat4
T det() const;
Mat4<T> invert() const;

static Mat4<T> ortho(T left, T right, T bottom, T top, T near, T far);
static Mat4<T> frustum(T left, T right, T bottom, T top, T near, T far);
static Mat4<T> perspective(T theta, T width, T height, T near, T far);
static Mat4<T> translate(T x, T y, T z);

inline Mat4<T> operator +(Mat4<T> const val) const
{


Loading…
取消
儲存