Пример #1
0
//
//#############################################################################
//#############################################################################
//
bool
EulerAngles::TestClass()
{
    SPEW((GROUP_STUFF_TEST, "Starting EulerAngle test..."));

    const EulerAngles
    a(Identity);
    EulerAngles
    b;
    const EulerAngles
    c(Pi_Over_4,Pi_Over_6,Pi_Over_3);

    Test_Assumption(!a.pitch && !a.yaw && !a.roll);
    Test_Assumption(c.pitch == Pi_Over_4 && c.yaw == Pi_Over_6 && c.roll == Pi_Over_3);

    Test_Assumption(!a);
    b = c;
    Test_Assumption(b == c);
    Test_Assumption(b != a);

    Test_Assumption(b[Y_Axis] == b.yaw);
    Test_Assumption(c[Z_Axis] == c.roll);

    b.Lerp(a,c,0.5f);
    Test_Assumption(b == EulerAngles(Stuff::Lerp(a.pitch,c.pitch,0.5f),Stuff::Lerp(a.yaw,c.yaw,0.5f),Stuff::Lerp(a.roll,c.roll,0.5f)));

    LinearMatrix4D m;
    m.BuildRotation(c);
    b = m;
    Test_Assumption(b == c);

    return true;
}
Пример #2
0
//
//#############################################################################
//#############################################################################
//
EulerAngles&
	EulerAngles::operator=(const UnitQuaternion &quaternion)
{
	Check_Pointer(this);
	Check_Object(&quaternion);

	LinearMatrix4D m;
	m.BuildRotation(quaternion);
	return *this = m;
}
Пример #3
0
//
//#############################################################################
//#############################################################################
//
YawPitchRoll&
	YawPitchRoll::operator=(const UnitQuaternion &quaternion)
{
	Check_Pointer(this);
	Check_Object(&quaternion);

	LinearMatrix4D m;
	m.BuildRotation(quaternion);
	return *this = m;
}
Пример #4
0
//
//#############################################################################
//#############################################################################
//
UnitQuaternion&
	UnitQuaternion::operator=(const EulerAngles &angles)
{
	Check_Pointer(this);
	Check_Object(&angles);

	LinearMatrix4D m;
	m.BuildRotation(angles);
	Check_Object(&m);
	*this = m;
	return *this;
}
Пример #5
0
//
//#############################################################################
//#############################################################################
//
EulerAngles&
	EulerAngles::operator=(const YawPitchRoll &angles)
{
	Check_Pointer(this);
	Check_Object(&angles);

	LinearMatrix4D m;
	m.BuildRotation(angles);
	*this = m;

	return *this;
}
//---------------------------------------------------------------------------
//
MLRPrimitive *
	MLRIndexedPolyMesh::LightMapLighting(MLRLight *light)
{
	int i, j, k, stride, len = lengths.GetLength();
	LinearMatrix4D matrix = LinearMatrix4D::Identity;
	Point3D lightPos, hitPoint;

	UnitVector3D up, right;
	Scalar f, u, v;

	light->GetInShapePosition(lightPos);

	for(i=0,j=0,k=0;i<len;i++)
	{
		stride = lengths[i];

		if(testList[i] == 0)
		{
			j += stride;
			continue;
		}

		f = facePlanes[i].DistanceTo(lightPos);
		if(f>0.0f)
		{
			hitPoint.Multiply(facePlanes[i].normal, -f);
			hitPoint+=lightPos;

			matrix.AlignAxis(facePlanes[i].normal, Z_Axis, X_Axis, Y_Axis);
			matrix.GetWorldRightInLocal(&right);
			matrix.GetWorldUpInLocal(&up);

			for(k=j;k<stride+j;k++)
			{
				Vector3D vec(coords[index[k]]);
				vec-=hitPoint;

				u = (right*vec)/f;
				v = (up*vec)/f;
			}
			testList[i] = 0;
		}

		j += stride;
	}

	return NULL;
}
Пример #7
0
		OBB&
			BuildSphere(const Sphere& sphere)
				{
					Check_Pointer(this); Check_Object(&sphere);
					sphereRadius = sphere.radius;
					localToParent.BuildTranslation(sphere.center);
					return *this;
				}
Пример #8
0
//
//###########################################################################
//###########################################################################
//
bool
UnitVector3D::TestClass()
{
	SPEW((GROUP_STUFF_TEST, "Starting UnitVector3D test..."));
	UnitVector3D
	b;
	const UnitVector3D
	c(0.6f, 0.0f, 0.8f);
	UnitVector3D
	d(0.8f, -0.6f, 0.0f);
#if 0
	Test_Assumption(c.x == 0.6f && c.y == 0.0f && c.z == 0.8f);
	Test_Assumption(c[2] == c.z);
#endif
	b = c;
#if 0
	Test_Assumption(b.x == c.x && b.y == c.y && b.z == c.z);
#endif
	Test_Assumption(Close_Enough(b, c));
	Test_Assumption(b == c);
	b.Negate(c);
	Test_Assumption(b == UnitVector3D(-c.x, -c.y, -c.z));
	float f = c * d;
	Test_Assumption(Close_Enough(f, c.x * d.x + c.y * d.y + c.z * d.z));
	LinearMatrix4D
	m;
	EulerAngles
	r(Pi_Over_4, 0.0f, 0.0f);
	m.BuildRotation(r);
	b.Multiply(c, m);
	Test_Assumption(b == UnitVector3D(c.x, c.y * m(1, 1) + c.z * m(2, 1), c.y * m(1, 2) + c.z * m(2, 2)));
	b = c;
	b *= m;
	Test_Assumption(b == UnitVector3D(c.x, c.y * m(1, 1) + c.z * m(2, 1), c.y * m(1, 2) + c.z * m(2, 2)));
	f = c.GetLengthSquared();
	Test_Assumption(Close_Enough(f, 1.0f));
	f = c.GetLength();
	Test_Assumption(Close_Enough(f, 1.0f));
	Vector3D v(0.0f, 1.2f, 1.6f);
	f = v.GetLength();
	b = v;
	Test_Assumption(b == UnitVector3D(v.x / f, v.y / f, v.z / f));
	return true;
}