bool CFXTransExplodingCubes::DrawCube(const SCube& cube, float fT) { float fAngle = cube.fRotation * fT; CVector3 v3Axis(1.0f, 0.0f, 0.0f); CVector3 v3Center = cube.v3Center + (cube.v3Speed * fT) + (cube.v3Accel * fT * fT * 0.5f); CMatrix mtxRot; mtxRot.BuildRotationZ(fAngle); mtxRot.Transform(&v3Axis, true); CVector2 mapping[4] = { CVector2(cube.fU, cube.fV), CVector2(cube.fU, cube.fV2), CVector2(cube.fU2, cube.fV2), CVector2(cube.fU2, cube.fV) }; CMatrix worldMtx; worldMtx.BuildRotation(fAngle, 1.0f, 0.0f, 0.0f); worldMtx.Translate (v3Center.X(), v3Center.Y(), v3Center.Z()); UtilGL::Transforming::SetMatrix(UtilGL::Transforming::MATRIX_WORLD, worldMtx); // front back // 1 4 5 8 // 2 3 6 7 m_textureRTT.SetActive(); UtilGL::States::Set(UtilGL::States::TEXTURE2D, UtilGL::States::ENABLED); UtilGL::States::SetColor(CVector4(1.0f, 1.0f, 1.0f, 1.0f)); glBegin(GL_QUADS); glTexCoord2fv(mapping[0].Data()); glVertex3fv(cube.v1.Data()); glTexCoord2fv(mapping[1].Data()); glVertex3fv(cube.v2.Data()); glTexCoord2fv(mapping[2].Data()); glVertex3fv(cube.v3.Data()); glTexCoord2fv(mapping[3].Data()); glVertex3fv(cube.v4.Data()); glTexCoord2fv(mapping[0].Data()); glVertex3fv(cube.v8.Data()); glTexCoord2fv(mapping[1].Data()); glVertex3fv(cube.v7.Data()); glTexCoord2fv(mapping[2].Data()); glVertex3fv(cube.v6.Data()); glTexCoord2fv(mapping[3].Data()); glVertex3fv(cube.v5.Data()); glEnd(); UtilGL::States::Set(UtilGL::States::TEXTURE2D, UtilGL::States::DISABLED); UtilGL::States::SetColor(m_v4FlatColor); glBegin(GL_QUADS); // left glVertex3fv(cube.v5.Data()); glVertex3fv(cube.v6.Data()); glVertex3fv(cube.v2.Data()); glVertex3fv(cube.v1.Data()); //right glVertex3fv(cube.v4.Data()); glVertex3fv(cube.v3.Data()); glVertex3fv(cube.v7.Data()); glVertex3fv(cube.v8.Data()); //bottom glVertex3fv(cube.v7.Data()); glVertex3fv(cube.v3.Data()); glVertex3fv(cube.v2.Data()); glVertex3fv(cube.v6.Data()); //top glVertex3fv(cube.v5.Data()); glVertex3fv(cube.v1.Data()); glVertex3fv(cube.v4.Data()); glVertex3fv(cube.v8.Data()); glEnd(); /* glLineWidth(1.0f); UtilGL::States::SetColor(CVector4(0.0f, 0.0f, 0.0f, 0.0f)); UtilGL::States::Set(UtilGL::States::POLYGONMODE, UtilGL::States::POLYGONMODE_LINE); glBegin(GL_QUADS); // left glVertex3fv(cube.v5.Data()); glVertex3fv(cube.v6.Data()); glVertex3fv(cube.v2.Data()); glVertex3fv(cube.v1.Data()); //right glVertex3fv(cube.v4.Data()); glVertex3fv(cube.v3.Data()); glVertex3fv(cube.v7.Data()); glVertex3fv(cube.v8.Data()); //bottom glVertex3fv(cube.v7.Data()); glVertex3fv(cube.v3.Data()); glVertex3fv(cube.v2.Data()); glVertex3fv(cube.v6.Data()); //top glVertex3fv(cube.v5.Data()); glVertex3fv(cube.v1.Data()); glVertex3fv(cube.v4.Data()); glVertex3fv(cube.v8.Data()); glEnd(); UtilGL::States::Set(UtilGL::States::POLYGONMODE, UtilGL::States::POLYGONMODE_FILL); */ return true; }