/* Transform body normals, draw front */ void drawbody(Matrix Rot) { double bodyScale = 1.0/theBodyRadius; register int i, j, k, n; pushmatrix(); scale(bodyScale, bodyScale, bodyScale); for (j=0; j<bodyNFaces; j++) { double dot = Rot[X][Z]*theFaceNormals[j][X] +Rot[Y][Z]*theFaceNormals[j][Y] +Rot[Z][Z]*theFaceNormals[j][Z]; if (dot>0.0) { /* Front-facing polygon, so draw it */ short shadedColor[3]; dot += 0.4; if (dot>1.0) dot = 1.0; shadedColor[0] = dot*theFaceColors[j][0]; shadedColor[1] = dot*theFaceColors[j][1]; shadedColor[2] = dot*theFaceColors[j][2]; n = theFaceVertices[j][0]; RGBcolor(shadedColor[0], shadedColor[1], shadedColor[2]); bgnpolygon(); for (k=1; k<=n; k++) { i = theFaceVertices[j][k]; v4f(thePoints[i]); } endpolygon(); } } popmatrix(); }
TEST(Vector4, Addition) { float fv[4] = { 1.0f, 2.0f, 3.0f, 4.0f }; FasTC::Vec4f v4f (fv); double dv[4] = { 4.3, -10.2, 0.0f, -22.0f }; FasTC::Vec4d v3d (dv); EXPECT_NEAR((v4f + v3d).X(), 5.3, kEpsilon); EXPECT_NEAR((v4f + v3d).Y(), -8.2, kEpsilon); EXPECT_NEAR((v4f + v3d).Z(), 3.0, kEpsilon); EXPECT_NEAR((v4f + v3d).W(), -18.0, kEpsilon); }
TEST(Vector4, Accessors) { float fv[4] = { 1.0f, 2.0f, 3.0f, 4.0f }; FasTC::Vec4f v4f (fv); EXPECT_EQ(v4f.X(), 1.0f); EXPECT_EQ(v4f.Y(), 2.0f); EXPECT_EQ(v4f.Z(), 3.0f); EXPECT_EQ(v4f.W(), 4.0f); v4f.X() = 5.0f; v4f.Y() = 6.0f; v4f.Z() = 7.0f; v4f.W() = 8.0f; EXPECT_EQ(v4f.X(), 5.0f); EXPECT_EQ(v4f.Y(), 6.0f); EXPECT_EQ(v4f.Z(), 7.0f); EXPECT_EQ(v4f.W(), 8.0f); }