Главная страница
Навигация по странице:

  • ^include

  • Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика


    Скачать 0.66 Mb.
    НазваниеРуководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
    Дата21.10.2022
    Размер0.66 Mb.
    Формат файлаdocx
    Имя файла221937-83556.docx
    ТипРуководство
    #747097
    страница23 из 30
    1   ...   19   20   21   22   23   24   25   26   ...   30
    void glutSolidTetrahedron (void) void glutWireTetrahedron (void)

    Эти команды строят тетраэдр (правильную треугольную пи­рамиду) или его каркас, при этом радиус описанной сферы во­круг него равен 1.

    void glutSolidOctahedron (void) void glutWireOctahedron (void)

    Эти команды строят октаэдр или его каркас, радиус описан­ной вокруг него сферы равен 1.

    void glutSolidDodecahedron (void) void glutWireDodecahedron (void)

    Эти команды строят додекаэдр или его каркас, радиус опи­санной вокруг него сферы равен квадратному корню из трех.

    void glutSolidlcosahedron (void) void glutWirelcosahedron (void)

    Эти команды строят икосаэдр или его каркас, радиус описан­ной вокруг него сферы равен 1.

    Правильное построение перечисленных примитивов возмож­но при удалении невидимых линии и поверхностей, для че­го надо включить соответствующий режим вызовом команды glEnable(GL_DEPTH_TEST).

    Приложение Б.

    Демонстрационные программы

    Б.1. Пример 1: Простое GLUT-приложение

    Этот простой пример предназначен для демонстрации струк­туры GLUT-приложения и простейших основ OpenGL. Резуль­татом работы программы является случайный набор цветных прямоугольников, который меняется при нажатии левой кнопки мыши. С помощью правой кнопки мыши можно менять режим заливки прямоугольников.

    Программа Б.1. Простой пример OpenGL.

    ^include ^include

    #ifdef random #undef random #endif

    #define random (m) ( float) rand () *m/RAND_MAX

    169

    170

    Приложение Б. Демонстрационные программы

    // ширина и высота окна

    GLint Width = 512, Height = 512;

    // число прямоугольников в окне

    int Times = 100;

    // с заполнением ?

    int FillFlag = 1;

    long Seed = 0;

    // функция отображает прямоугольник void DrawRect ( float xl , float yl ,

    float x2 , float y2 ,

    int FillFlag )

    {

    glBegin( FillFlag ? GL_QUADS : GL_UNE_LOOP);

    glVertex2f (xl , yl) ; glVertex2f(x2, yl) ; glVertex2f(x2, y2 ) ; glVertex2f (xl , y2 ) ; glEnd(); }

    // управляет всем выводом на экран void Display (void)

    { _

    int i ;

    float xl , yl , x2 , y2 ;

    float r , g, b;

    srand(Seed);

    glClearColor(0, 0, 0, I);

    g 1С1 e ar (GL_COIX)R_BUFFER_Brr);

    for( i = 0; i < Times; i++ ) { r = random (1); g = random (1);

    Б.1. Пример 1: Простое GLUT-приложение

    171

    b = random (1); glColor3f( r, g, b );

    xl = random (1) * Width; yl = random (1) * Height; x2 = random (1) * Width; y2 = random (1) * Height; DrawRect( xl , yl , x2 , y2 , FillFlag ); }

    glFinish () ; }

    // Вызывается при изменении размеров окна void Reshape (GLint w, GLint h)

    {

    Width = w;

    Height = h;

    glViewport (0 , 0, w, h);

    glMatrixMode (GL_PROJECTION);

    glLoadldentity () ;

    glOrtho(0, w, 0, h, -1.0, 1.0);

    glMatrixMode (GL_MODELVIEW); glLoadldentity () ; }

    // Обрабатывает сообщения от мыши void Mouse (int button, int state , int x, int y)

    {

    if( state = GLUT_DOWN ) { switch( button ) {

    case GLUTLEFTBUTTON:

    Seed = random (RAND_MAX);

    172 Приложение Б. Демонстрационные программы

    break; case GLUT_raGHT_BlJTTC)N:

    FillFlag = ! FillFlag ; break;

    }

    glutPostRedisplay ();

    } }

    // Обрабатывает сообщения от клавиатуры

    void Keyboard ( unsigned char key, int x, int у )

    { const char ESCAPE = '\033';

    if ( key = ESCAPE ) exit(0); }

    void main(int argc , char *argv[])

    {

    glut Init (&argc , argv ); glutlnitDisplayMode (GLUT_RGB) ; glutlnitWindowSize (Width , Height ); glutCreateWindow (" Rect„drawwexample„ (RGB) " );

    glutDisplayFunc( Display ) ; gl ut Re shape Fun с (Reshape ); glutKeyboardFunc (Keyboard); glutMouseFunc (Mouse);

    glutMainLoop () ; }




    Б. 2. Пример 2: Модель освещения OPENGL 173

    Рис. Б.1. Результат работы программы Б.1. Слева — режим за­полнения, справа — режим контуров.

    Б.2. Пример 2: Модель освещения OpenGL

    Программа предназначена для демонстрации модели освеще­ния OpenGL на примере простой сцены, состоящей из тора, ко­нуса и шара. Объектам назначаются разные материалы. В сцене присутствует точечный источник света.

    Программа Б.2. Модель освещения OpenGL.

    ^include #include

    // параметры материала тора
    1   ...   19   20   21   22   23   24   25   26   ...   30


    написать администратору сайта