//==================================================================== // DebugDrawWireFOVCone //==================================================================== void CAIDebugRenderer::DrawWireFOVCone(const Vec3& vPos, const Vec3& vDir, float fRadius, float fFOV, const ColorB& color) { const unsigned int npts = 32; const unsigned int npts2 = 16; Vec3 points[npts]; Vec3 pointsx[npts2]; Vec3 pointsy[npts2]; Matrix33 base; base.SetRotationVDir(vDir); float coneRadius = sinf(fFOV) * fRadius; float coneHeight = cosf(fFOV) * fRadius; for (unsigned int i = 0; i < npts; i++) { float a = ((float)i / (float)npts) * gf_PI2; float rx = cosf(a) * coneRadius; float ry = sinf(a) * coneRadius; points[i] = vPos + base.TransformVector(Vec3(rx, coneHeight, ry)); } for (unsigned int i = 0; i < npts2; i++) { float a = -fFOV + ((float)i / (float)(npts2-1)) * (fFOV*2); float rx = sinf(a) * fRadius; float ry = cosf(a) * fRadius; pointsx[i] = vPos + base.TransformVector(Vec3(rx, ry, 0)); pointsy[i] = vPos + base.TransformVector(Vec3(0, ry, rx)); } DrawPolyline(points, npts, true, color); DrawPolyline(pointsx, npts2, false, color); DrawPolyline(pointsy, npts2, false, color); DrawLine(points[0], color, vPos, color); DrawLine(points[npts/4], color, vPos, color); DrawLine(points[npts/2], color, vPos, color); DrawLine(points[npts/2+npts/4], color, vPos, color); }