コード例 #1
0
ファイル: Capsule.cpp プロジェクト: 360degrees-fi/tundra
void Capsule::Transform(const float4x4 &transform)
{
	assume(transform.HasUniformScale());
	assume(transform.IsColOrthogonal3());
	l.Transform(transform);
	r *= transform.Col3(0).Length(); // Scale the radius.
}
コード例 #2
0
ファイル: Sphere.cpp プロジェクト: juj/MathGeoLib
void Sphere::Transform(const float4x4 &transform)
{
	assume(transform.HasUniformScale());
	assume(!transform.ContainsProjection());
	pos = transform.MulPos(pos);
	r *= transform.Col3(0).Length();
}
コード例 #3
0
ファイル: Circle.cpp プロジェクト: 360degrees-fi/tundra
void Circle::Transform(const float4x4 &transform)
{
	assume(transform.HasUniformScale());
	assume(transform.IsColOrthogonal3());
	pos = transform.MulPos(pos);
	normal = transform.MulDir(normal).Normalized();
	r *= transform.Col3(0).Length(); // Scale the radius of the circle.
}
コード例 #4
0
ファイル: AABB.cpp プロジェクト: katik/naali
void AABB::TransformAsAABB(const float4x4 &transform)
{
	assume(transform.IsColOrthogonal3());
	assume(transform.HasUniformScale());
	assume(transform.Row(3).Equals(0,0,0,1));

	AABBTransformAsAABB(*this, transform);
}
コード例 #5
0
ファイル: AABB.cpp プロジェクト: ChunHungLiu/MathGeoLib
void AABB::TransformAsAABB(const float4x4 &transform)
{
	assume(transform.IsColOrthogonal3());
	assume(transform.HasUniformScale());
	assume(transform.Row(3).Equals(0,0,0,1));

#if defined(MATH_AUTOMATIC_SSE) && defined(MATH_SIMD)
	AABBTransformAsAABB_SIMD(*this, transform);
#else
	AABBTransformAsAABB(*this, transform);
#endif
}
コード例 #6
0
ファイル: Quat.cpp プロジェクト: 360degrees-fi/tundra
void Quat::Set(const float4x4 &m)
{
	assume(m.IsColOrthogonal3());
	assume(m.HasUnitaryScale());
	assume(!m.HasNegativeScale());
	assume(m.Row(3).Equals(0,0,0,1));
	SetQuatFrom(*this, m);

#ifdef MATH_ASSERT_CORRECTNESS
	// Test that the conversion float3x3->Quat->float3x3 is correct.
	mathassert(this->ToFloat3x3().Equals(m.Float3x3Part(), 0.01f));
#endif
}
コード例 #7
0
ファイル: TransformOps.cpp プロジェクト: 360degrees-fi/tundra
float4x4 operator *(const float4x4 &lhs, const TranslateOp &rhs)
{
	float4x4 r = lhs;
	r.SetTranslatePart(lhs.TransformPos(rhs.Offset()));

	// Our optimized form of multiplication must be the same as this.
	mathassert(r.Equals(lhs * rhs.ToFloat4x4()));
	return r;
}
コード例 #8
0
ファイル: TransformOps.cpp プロジェクト: juj/MathGeoLib
float4x4 operator *(const TranslateOp &lhs, const float4x4 &rhs)
{
	// This function is based on the optimized assumption that the last row of rhs is [0,0,0,1].
	// If this does not hold and you are hitting the check below, explicitly cast TranslateOp lhs to float4x4 before multiplication!
	assume(rhs.Row(3).Equals(0.f, 0.f, 0.f, 1.f));

	float4x4 r = rhs;
	r.SetTranslatePart(r.TranslatePart() + DIR_TO_FLOAT3(lhs.Offset()));
	return r;
}
コード例 #9
0
ファイル: Aabb.cpp プロジェクト: rocksjtu/SelfLuminous
Aabb operator * (const float4x4 &tfm, const Aabb &a)
{
  Aabb result = { tfm.getTranslation(), tfm.getTranslation() };

  for (int i = 1; i < 4; ++i)
  {
    for (int j = 1; j < 4; ++ j)
    {
      float e = tfm(i,j) * a.min[j - 1];
      float f = tfm(i,j) * a.max[j - 1];
      if (e < f)
      {
        result.min[i - 1] += e;
        result.max[i - 1] += f;
      }
      else
      {
        result.min[i - 1] += f;
        result.max[i - 1] += e;
      }
    }
  }
  return result;
}
コード例 #10
0
ファイル: OBB.cpp プロジェクト: Ilikia/naali
void OBB::Transform(const float4x4 &transform)
{
    assume(transform.IsOrthogonal3());
    OBBTransform(*this, transform);
}
コード例 #11
0
ファイル: Frustum.cpp プロジェクト: chengzg/MathGeoLib
void Frustum::Transform(const float4x4 &transform)
{
	assume(transform.Row(3).Equals(0,0,0,1));
	Transform(transform.Float3x4Part());
}
コード例 #12
0
ファイル: OBB.cpp プロジェクト: OtterOrder/TBToolkit
void OBB::SetFrom(const AABB &aabb, const float4x4 &transform)
{
	assume(transform.Row(3).Equals(0,0,0,1));
	OBBSetFrom(*this, aabb, transform.Float3x4Part());
}
コード例 #13
0
ファイル: Ray.cpp プロジェクト: Ilikia/naali
void Ray::Transform(const float4x4 &transform)
{
    pos = transform.TransformPos(pos);
    dir = transform.TransformDir(dir);
}
コード例 #14
0
ファイル: Ray.cpp プロジェクト: Ilikia/naali
Ray operator *(const float4x4 &transform, const Ray &ray)
{
    return Ray(transform.MulPos(ray.pos), transform.MulDir(ray.dir));
}
コード例 #15
0
ファイル: Ray.cpp プロジェクト: ggf31416/CompGraf1
Ray operator *(const float4x4 &transform, const Ray &ray)
{
	assume(transform.IsInvertible());
	return Ray(transform.MulPos(ray.pos), transform.MulDir(ray.dir).Normalized());
}
コード例 #16
0
ファイル: transform.cpp プロジェクト: jaredhoberock/igloo
transform::transform(const float4x4 &m)
  : m_xfrm(m), m_inv(m.inverse())
{}
コード例 #17
0
ファイル: Polyhedron.cpp プロジェクト: 360degrees-fi/tundra
void Polyhedron::Transform(const float4x4 &transform)
{
	for(size_t i = 0; i < v.size(); ++i)
		v[i] = transform.MulPos(v[i]); ///\todo Add float4x4::BatchTransformPos.
}
コード例 #18
0
ファイル: Triangle.cpp プロジェクト: d0n3val/Edu-Game-Engine
void Triangle::Transform(const float4x4 &transform)
{
	a = transform.MulPos(a);
	b = transform.MulPos(b);
	c = transform.MulPos(c);
}
コード例 #19
0
ファイル: Plane.cpp プロジェクト: Ilikia/naali
void Plane::Transform(const float4x4 &transform)
{
    assume(transform.Row(3).Equals(float4(0,0,0,1)));
    Transform(transform.Float3x4Part());
}
コード例 #20
0
ファイル: Line.cpp プロジェクト: jnmacd/MathGeoLib
void Line::Transform(const float4x4 &transform)
{
    pos = transform.MulPos(pos);
    dir = transform.MulDir(dir);
}
コード例 #21
0
ファイル: Placeable.cpp プロジェクト: aoighost/tundra-urho3d
void Placeable::SetWorldTransform(const float4x4 &tm)
{
    assume(tm.Row(3).Equals(float4(0,0,0,1)));
    SetWorldTransform(tm.Float3x4Part());
}
コード例 #22
0
ファイル: Triangle.cpp プロジェクト: katik/naali
Triangle operator *(const float4x4 &transform, const Triangle &t)
{
    return Triangle(transform.MulPos(t.a), transform.MulPos(t.b), transform.MulPos(t.c));
}
コード例 #23
0
ファイル: TransformOps.cpp プロジェクト: juj/MathGeoLib
float4x4 operator *(const float4x4 &lhs, const TranslateOp &rhs)
{
	float4x4 r = lhs;
	r.SetTranslatePart(lhs.TransformPos(DIR_TO_FLOAT3(rhs.Offset())));
	return r;
}
コード例 #24
0
ファイル: Line.cpp プロジェクト: jnmacd/MathGeoLib
Line operator *(const float4x4 &transform, const Line &l)
{
    return Line(transform.MulPos(l.pos), transform.MulDir(l.dir));
}
コード例 #25
0
ファイル: Polygon.cpp プロジェクト: chengzg/MathGeoLib
void Polygon::Transform(const float4x4 &transform)
{
	for(size_t i = 0; i < p.size(); ++i)
		p[i] = transform.MulPos(p[i]);
}
コード例 #26
0
ファイル: Ray.cpp プロジェクト: 360degrees-fi/tundra
Ray operator *(const float4x4 &transform, const Ray &ray)
{
	assume(transform.IsInvertible(1e-6f)); // Tundra: use smaller epsilon in order to prevent assumption spam when raycasting to non-uniformly scaled objects.
	return Ray(transform.MulPos(ray.pos), transform.MulDir(ray.dir).Normalized());
}