void DebugDrawer::buildFilledTetrahedron(const Ogre::Vector3 ¢re, float scale, const Ogre::ColourValue &colour, float alpha) { int index = trianglesIndex; // Distance from the centre float bottomDistance = scale * 0.2f; float topDistance = scale * 0.62f; float frontDistance = scale * 0.289f; float backDistance = scale * 0.577f; float leftRightDistance = scale * 0.5f; addTriangleVertex(Ogre::Vector3(centre.x, centre.y + topDistance, centre.z), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); addTriangleVertex(Ogre::Vector3(centre.x, centre.y - bottomDistance, centre.z + frontDistance), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); addTriangleVertex(Ogre::Vector3(centre.x + leftRightDistance, centre.y - bottomDistance, centre.z - backDistance), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); addTriangleVertex(Ogre::Vector3(centre.x - leftRightDistance, centre.y - bottomDistance, centre.z - backDistance), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); addTriangleIndices(index, index + 1, index + 2); addTriangleIndices(index, index + 2, index + 3); addTriangleIndices(index, index + 3, index + 1); addTriangleIndices(index + 1, index + 3, index + 2); }
void DebugDrawer::buildFilledCuboid( const Ogre::Vector3 *vertices, const Ogre::ColourValue& colour, float alpha) { const int index = addTriangleVertex( vertices[0], Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); for (int i = 1; i < 8; ++i) { addTriangleVertex( vertices[i], Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); } addQuadIndices(index, index + 1, index + 2, index + 3); addQuadIndices(index + 4, index + 5, index + 6, index + 7); addQuadIndices(index + 1, index + 5, index + 4, index + 2); addQuadIndices(index, index + 3, index + 7, index + 6); addQuadIndices(index + 1, index , index + 6, index + 5); addQuadIndices(index + 4, index + 7, index + 3, index + 2); }
void DebugDrawer::buildFilledTriangle(const Ogre::Vector3 *vertices, const Ogre::ColourValue& colour, float alpha) { int index = addTriangleVertex(vertices[0], Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); addTriangleVertex(vertices[1], Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); addTriangleVertex(vertices[2], Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); addTriangleIndices(index, index + 1, index + 2); }
void DebugDrawer::buildFilledCylinder(const Ogre::Vector3 ¢re, float radius, int segmentsCount, float height, const Ogre::ColourValue& colour, float alpha) { int index = trianglesIndex; float increment = 2 * Ogre::Math::PI / segmentsCount; float angle = 0.0f; // Top circle for (int i = 0; i < segmentsCount; i++) { addTriangleVertex(Ogre::Vector3(centre.x + radius * Ogre::Math::Cos(angle), centre.y + height / 2, centre.z + radius * Ogre::Math::Sin(angle)), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); angle += increment; } addTriangleVertex(Ogre::Vector3(centre.x, centre.y + height / 2, centre.z), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); angle = 0.0f; // Bottom circle for (int i = 0; i < segmentsCount; i++) { addTriangleVertex(Ogre::Vector3(centre.x + radius * Ogre::Math::Cos(angle), centre.y - height / 2, centre.z + radius * Ogre::Math::Sin(angle)), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); angle += increment; } addTriangleVertex(Ogre::Vector3(centre.x, centre.y - height / 2, centre.z), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); for (int i = 0; i < segmentsCount; i++) { addTriangleIndices(i + 1 < segmentsCount ? index + i + 1 : index, index + i, index + segmentsCount); addTriangleIndices(i + 1 < segmentsCount ? (segmentsCount + 1) + index + i + 1 : (segmentsCount + 1) + index, (segmentsCount + 1) + index + segmentsCount, (segmentsCount + 1) + index + i); addQuadIndices( index + i, i + 1 < segmentsCount ? index + i + 1 : index, i + 1 < segmentsCount ? (segmentsCount + 1) + index + i + 1 : (segmentsCount + 1) + index, (segmentsCount + 1) + index + i); } }
void DebugDrawer::buildFilledCircle(const Ogre::Vector3 ¢re, float radius, int segmentsCount, const Ogre::ColourValue& colour, float alpha) { int index = trianglesIndex; float increment = 2 * Ogre::Math::PI / segmentsCount; float angle = 0.0f; for (int i = 0; i < segmentsCount; i++) { addTriangleVertex(Ogre::Vector3(centre.x + radius * Ogre::Math::Cos(angle), centre.y, centre.z + radius * Ogre::Math::Sin(angle)), Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); angle += increment; } addTriangleVertex(centre, Ogre::ColourValue(colour.r, colour.g, colour.b, alpha)); for (int i = 0; i < segmentsCount; i++) addTriangleIndices(i + 1 < segmentsCount ? index + i + 1 : index, index + i, index + segmentsCount); }