コード例 #1
0
ファイル: OBB.cpp プロジェクト: OtterOrder/TBToolkit
void OBB::SetNegativeInfinity()
{
	pos = POINT_VEC_SCALAR(0.f);
	r.SetFromScalar(-FLOAT_INF);
	axis[0] = DIR_VEC(1,0,0);
	axis[1] = DIR_VEC(0, 1, 0);
	axis[2] = DIR_VEC(0, 0, 1);
}
コード例 #2
0
ファイル: Plane.cpp プロジェクト: ggf31416/CompGraf1
vec Plane::PointOnPlane() const
{
#ifdef MATH_AUTOMATIC_SSE
	return normal * d + vec(POINT_VEC_SCALAR(0.f));
#else
	return normal * d;
#endif
}
コード例 #3
0
ファイル: AABB.cpp プロジェクト: clement-z/MathGeoLib
void AABB::Enclose(const Capsule &capsule)
{
	vec d = POINT_VEC_SCALAR(capsule.r);
	Enclose(capsule.l.a - d);
	Enclose(capsule.l.a + d);
	Enclose(capsule.l.b - d);
	Enclose(capsule.l.b + d);
}
コード例 #4
0
ファイル: OBB.cpp プロジェクト: OtterOrder/TBToolkit
void OBB::Triangulate(int x, int y, int z, vec *outPos, vec *outNormal, float2 *outUV, bool ccwIsFrontFacing) const
{
	AABB aabb(POINT_VEC_SCALAR(0), r*2.f);
	aabb.Triangulate(x, y, z, outPos, outNormal, outUV, ccwIsFrontFacing);
	float3x4 localToWorld = LocalToWorld();
	assume(localToWorld.HasUnitaryScale()); // Transforming of normals will fail otherwise.
	localToWorld.BatchTransformPos(outPos, NumVerticesInTriangulation(x,y,z), sizeof(vec));
	localToWorld.BatchTransformDir(outNormal, NumVerticesInTriangulation(x,y,z), sizeof(vec));
}
コード例 #5
0
ファイル: TriangleMesh.cpp プロジェクト: ggf31416/CompGraf1
void TriangleMesh::Set(const Polyhedron &polyhedron)
{
	TriangleArray tris = polyhedron.Triangulate();
	if (!tris.empty())
	{
		int alignment = (simdCapability == SIMD_AVX) ? 8 : ((simdCapability == SIMD_SSE41 || simdCapability == SIMD_SSE2) ? 4 : 1);
		vec degen = POINT_VEC_SCALAR(-FLOAT_INF);
		Triangle degent(degen, degen, degen);
		while(tris.size() % alignment != 0)
			tris.push_back(degent);
		Set((Triangle*)&tris[0], (int)tris.size());
	}
}
コード例 #6
0
ファイル: PBVolumeTests.cpp プロジェクト: blooop/MathGeoLib
MATH_IGNORE_UNUSED_VARS_WARNING

RANDOMIZED_TEST(AABBPBVolumeIntersect)
{
	vec pt = vec::RandomBox(rng, POINT_VEC_SCALAR(-SCALE), POINT_VEC_SCALAR(SCALE));
	Frustum b = RandomFrustumContainingPoint(pt);
	AABB a = RandomAABBContainingPoint(pt, 10.f);
	assert(a.Intersects(b));
	assert(b.Intersects(a));

	bool contained = b.Contains(a);

	vec centerPoint = b.CenterPoint();
	assert(b.Contains(b.CenterPoint()));

	PBVolume<6> pbVolume = ToPBVolume(b);
	assert(pbVolume.Contains(b.CenterPoint()));
	CullTestResult r = pbVolume.InsideOrIntersects(a);
	assert(r == TestInside || r == TestNotContained);
	if (contained)
		assert(r == TestInside);
}
コード例 #7
0
ファイル: OBB.cpp プロジェクト: OtterOrder/TBToolkit
bool OBB::Intersects(const Line &line, float &dNear, float &dFar) const
{
	AABB aabb(POINT_VEC_SCALAR(0.f), Size());
	Line l = WorldToLocal() * line;
	return aabb.Intersects(l, dNear, dFar);
}
コード例 #8
0
ファイル: OBB.cpp プロジェクト: OtterOrder/TBToolkit
bool OBB::Intersects(const Line &line) const
{
	AABB aabb(POINT_VEC_SCALAR(0.f), Size());
	Line l = WorldToLocal() * line;
	return aabb.Intersects(l);
}
コード例 #9
0
ファイル: OBB.cpp プロジェクト: OtterOrder/TBToolkit
bool OBB::Intersects(const Ray &ray, float &dNear, float &dFar) const
{
	AABB aabb(POINT_VEC_SCALAR(0.f), Size());
	Ray r = WorldToLocal() * ray;
	return aabb.Intersects(r, dNear, dFar);
}
コード例 #10
0
ファイル: OBB.cpp プロジェクト: OtterOrder/TBToolkit
bool OBB::Intersects(const Triangle &triangle) const
{
	AABB aabb(POINT_VEC_SCALAR(0.f), Size());
	Triangle t = WorldToLocal() * triangle;
	return t.Intersects(aabb);
}
コード例 #11
0
ファイル: AABB.cpp プロジェクト: clement-z/MathGeoLib
void AABB::Enclose(const Sphere &sphere)
{
	vec d = POINT_VEC_SCALAR(sphere.r);
	Enclose(sphere.pos - d);
	Enclose(sphere.pos + d);
}
コード例 #12
0
vec RandomPointNearOrigin(float maxDistanceFromOrigin)
{
	return Sphere(POINT_VEC_SCALAR(0.f), maxDistanceFromOrigin).RandomPointInside(rng);
}