示例#1
0
文件: main.cpp 项目: mtheall/gs_math
static void
check_matrix(generator_t &gen, distribution_t &dist)
{
  // check identity
  {
    mtx44 m;
    mtx44Identity(&m);
    assert(m == glm::mat4());
  }

  for(size_t x = 0; x < 10000; ++x)
  {
    // check multiply
    {
      mtx44 m1, m2;
      randomMatrix(m1, gen, dist);
      randomMatrix(m2, gen, dist);

      glm::mat4 g1 = loadMatrix(m1);
      glm::mat4 g2 = loadMatrix(m2);

      mtx44 result;
      mtx44Multiply(&result, &m1, &m2);
      assert(result == g1*g2);
    }

    // check translate
    {
      mtx44 m;
      randomMatrix(m, gen, dist);

      glm::mat4 g = loadMatrix(m);
      glm::vec3 v = randomVector(gen, dist);

      mtx44Translate(&m, v.x, v.y, v.z);
      assert(m == glm::translate(g, v));
    }

    // check scale
    {
      mtx44 m;
      randomMatrix(m, gen, dist);

      glm::mat4 g = loadMatrix(m);
      glm::vec3 v = randomVector(gen, dist);

      mtx44Scale(&m, v.x, v.y, v.z);
      assert(m == glm::scale(g, v));
    }

    // check rotate
    {
      mtx44 m;
      randomMatrix(m, gen, dist);

      float r = randomAngle(gen, dist);

      glm::mat4 g = loadMatrix(m);
      glm::vec3 v = randomVector(gen, dist);

      mtx44Rotate(&m, (vec3f){ v.x, v.y, v.z }, r);
      assert(m == glm::rotate(g, r, v));
    }

    // check rotate X
    {
      mtx44 m;
      randomMatrix(m, gen, dist);

      float r = randomAngle(gen, dist);

      glm::mat4 g = loadMatrix(m);

      mtx44RotateX(&m, r);
      assert(m == glm::rotate(g, r, x_axis));
    }

    // check rotate Y
    {
      mtx44 m;
      randomMatrix(m, gen, dist);

      float r = randomAngle(gen, dist);

      glm::mat4 g = loadMatrix(m);

      mtx44RotateY(&m, r);
      assert(m == glm::rotate(g, r, y_axis));
    }

    // check rotate Z
    {
      mtx44 m;
      randomMatrix(m, gen, dist);

      float r = randomAngle(gen, dist);

      glm::mat4 g = loadMatrix(m);

      mtx44RotateZ(&m, r);
      assert(m == glm::rotate(g, r, z_axis));
    }
  }
}
示例#2
0
	mtx44 mtx44::operator* (const mtx44 &rhs) const
	{
		mtx44 result;
		mtx44Multiply(result, *this, rhs);
		return result;
	}