 
  
  
  
 
Here is a simple graphics program that produces an image of a three dimensional polygon and line, and a two dimensional pixel block.
/*------------------------------------------------------
    example_graphics.c
This program demonstrates the use of the BIC Graphics
Library by creating a window and displaying some objects
through a simple interaction mechanism.
------------------------------------------------------ */
#include  <graphics.h>
#define   LIGHT_INDEX   0
int main(
    int    argc,
    char   *argv[] )
{
    Status            status;
    window_struct     *window, *event_window;
    text_struct       text;
    lines_struct      lines;
    polygons_struct   polygons;
    pixels_struct     pixels;
    static Surfprop   spr = { 0.2, 0.5, 0.5, 20.0, 1.0 };
    Point             point;
    Vector            normal, light_direction;
    Event_types       event_type;
    BOOLEAN           update_required, done;
    int               key_pressed;
    int               x_position, y_position, x_size, y_size;
    int               i, j, pixels_x_size, pixels_y_size;
    static Point      origin = { 0.0, 0.0, 2.0 };
    static Vector     up_direction = { 0.0, 1.0, 0.0 };
    static Vector     line_of_sight = { 0.0, 0.0, -1.0 };
    /* ------- create a graphics window ------ */
    status = G_create_window( "Test Window", -1, -1, -1, -1,
                              &window );
    /*--- define the 3D view */
    G_set_3D_view( window, &origin, &line_of_sight,
                   &up_direction, 0.01, 4.0, ON, 2.0,
                   FALSE, 0.0, 2.0, 2.0 );
    /* -------- define text to be drawn
                (text.string will be filled in later) ----- */
    fill_Point( point, 10.0, 10.0, 0.0 );
    initialize_text( &text, &point, make_Colour(255,0,255),
                     SIZED_FONT, 14.0 );
    text.string[0] = (char) 0;
    /* ------------ define line to be drawn  ------------- */
    initialize_lines( &lines, make_Colour(255,255,0) );
    lines.n_points = 4;
    ALLOC( lines.points, 4 );
    fill_Point( lines.points[0], 0.0, 0.0, 0.0 );
    fill_Point( lines.points[1], 1.0, 1.0, 0.0 );
    fill_Point( lines.points[2], -0.3, 1.0, -1.0 );
    fill_Point( lines.points[3], 0.5, 0.4, 0.0 );
    lines.n_items = 3;
    ALLOC( lines.end_indices, lines.n_items );
    lines.end_indices[0] = 2;
    lines.end_indices[1] = 4;
    lines.end_indices[2] = 5;
    ALLOC( lines.indices, lines.end_indices[lines.n_items-1] );
    lines.indices[0] = 0;
    lines.indices[1] = 1;
    lines.indices[2] = 0;
    lines.indices[3] = 2;
    lines.indices[4] = 3;
    /* ------------ define pixels to be drawn  ------------- */
    pixels_x_size = 256;
    pixels_y_size = 256;
    x_position = 10;
    y_position = 10;
    initialize_pixels( &pixels, x_position, y_position,
                       pixels_x_size, pixels_y_size,
                       1.0, 1.0, RGB_PIXEL );
    for_less( i, 0, pixels_x_size )
    {
        for_less( j, 0, pixels_y_size )
        {
            PIXEL_RGB_COLOUR(pixels,i,j) =
                   make_Colour( i % 256, j % 256, 0 );
        }
    }
    /* ------------ define polygons to be drawn  ------------- */
    initialize_polygons( &polygons, make_Colour(0,255,255),
                         &spr );
    start_new_polygon( &polygons );
    fill_Point( point, -0.3, -0.3, 0.0 );
    fill_Vector( normal, 0.0, 0.0, 1.0 );
    add_point_to_polygon( &polygons, &point, &normal );
    fill_Point( point, 0.3, -0.3, 0.0 );
    add_point_to_polygon( &polygons, &point, &normal );
    fill_Point( point, 0.3, 0.3, 0.0 );
    add_point_to_polygon( &polygons, &point, &normal );
    fill_Point( point, -0.3, 0.3, 0.0 );
    add_point_to_polygon( &polygons, &point, &normal );
    /* ------------ define a directional light from over
                    the left shoulder ----------------- */
    fill_Vector( light_direction, 1.0, 1.0, -1.0 );
    G_define_light( window, LIGHT_INDEX, DIRECTIONAL_LIGHT,
                    make_Colour(255,255,255),
                    &light_direction, (Point *) 0, 0.0, 0.0 );
    G_set_light_state( window, LIGHT_INDEX, ON );
    G_set_lighting_state( window, ON );
    /* --------------------------------------- */
    /* ------------ do main loop ------------- */
    /* --------------------------------------- */
    update_required = TRUE;
    print( "Hit left mouse button to exit\n" );
    done = FALSE;
    do
    {
        /* ----- get events until none found ------- */
        do
        {
            event_type = G_get_event( &event_window,
                                      &key_pressed );
            if( event_window == window )
            {
                switch( event_type )
                {
                case KEY_DOWN_EVENT:
                    print( "Key pressed: \"%c\"\n",
                           key_pressed );
                    break;
                case KEY_UP_EVENT:
                    print( "Key released: \"%c\"\n",
                           key_pressed );
                    break;
                case LEFT_MOUSE_DOWN_EVENT:
                    print( "Left mouse DOWN\n" );
                    done = TRUE;
                    break;
                case WINDOW_REDRAW_EVENT:
                    print( "Window will be redrawn.\n" );
                    update_required = TRUE;
                    break;
                case WINDOW_RESIZE_EVENT:
                    G_get_window_position( window,
                                           &x_position,
                                           &y_position );
                    G_get_window_size( window,
                                       &x_size, &y_size );
                    print( "Window resized, " );
                    print( " new position: %d %d\n",
                            x_position, y_position );
                    print( " new size: %d %d\n",
                            x_size, y_size );
                    update_required = TRUE;
                    break;
                }
            }
        }     /* break to do update when no events */
        while( event_type != NO_EVENT );
        /* ------- if one or more events caused an update,
                   redraw the screen */
        if( update_required )
        {
            /* ----- clear the window */
            G_clear_window( window );
            /* ----- draw the objects */
            G_draw_pixels( window, &pixels );
            G_set_view_type( window, MODEL_VIEW );
            G_draw_lines( window, &lines );
            G_draw_polygons( window, &polygons );
            G_set_view_type( window, PIXEL_VIEW );
            G_draw_text( window, &text );
            /* ----- finished drawing scene, now update */
            G_update_window( window );
            update_required = FALSE;
        }
    }
    while( !done );
    /* ----- delete drawing objects and window 
                 (text does not need to be deleted */
    delete_lines( &lines );
    delete_polygons( &polygons );
    delete_pixels( &pixels );
    status = G_delete_window( window );
    G_terminate();
    return( status != OK );
}
 
  
  
 