示例#1
0
void OpenGLTools::drawWiredCamera()
{
    drawWiredBox(Vector3dd(-5.0,-5.0,-15.0), Vector3dd(5.0,5.0,-5.0));

    glBegin(GL_LINES);

    int CIRCLE_STEPS = 16;
    for (int i = 0; i < CIRCLE_STEPS; i++)
    {
        double angle1 = (i / (double)CIRCLE_STEPS * 2.0 * M_PI);
        double angle2 = (((i + 1) % CIRCLE_STEPS) / (double)CIRCLE_STEPS * 2.0 * M_PI);

        double sa1 = sin(angle1);
        double ca1 = cos(angle1);

        double sa2 = sin(angle2);
        double ca2 = cos(angle2);

        double r1 = 2.5;
        double r2 = 4.5;

        glVertex3d(r1 * sa1, r1 * ca1 ,-5.0);
        glVertex3d(r1 * sa2, r1 * ca2 ,-5.0);

        glVertex3d(r2 * sa1, r2 * ca1 ,-0.0);
        glVertex3d(r2 * sa2, r2 * ca2 ,-0.0);

        glVertex3d(r1 * sa1, r1 * ca1 ,-5.0);
        glVertex3d(r2 * sa1, r2 * ca1 ,-0.0);
    }
    glEnd();

}
ConvexPolyhedron::ConvexPolyhedron(const AxisAlignedBox3d &box)
{
    faces.push_back(Plane3d::FromNormalAndPoint(Vector3dd( 0,  0,  1), box.low()));
    faces.push_back(Plane3d::FromNormalAndPoint(Vector3dd( 0,  1,  0), box.low()));
    faces.push_back(Plane3d::FromNormalAndPoint(Vector3dd( 1,  0,  0), box.low()));

    faces.push_back(Plane3d::FromNormalAndPoint(Vector3dd( 0,  0, -1), box.high()));
    faces.push_back(Plane3d::FromNormalAndPoint(Vector3dd( 0, -1,  0), box.high()));
    faces.push_back(Plane3d::FromNormalAndPoint(Vector3dd(-1,  0,  0), box.high()));

}