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

  • ifndef _GLRC_H_ define _GLRC_H_

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


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

    void DrawFigures (void)

    {

    // Включение режима нанесения текстуры

    glEnable (GL_TEXTURE_2D) ;

    // Задаем цвет диффузного отражения для колец

    glColor3fv(mat_difil);

    // Чтобы не. проводить перемножение с предыдущей

    // матрицей загружаем единичную матрицу

    glLoadldentity () ;

    // Определяем точку наблюдения


    gluLookAt (0.0 , 0.0, 2.5,

    0.0, 0.0, 0.0,

    0.0, 1.0, 0.0); // Сохраняем видовую матрицу, так как дальше // будет проводиться поворот колец glPushMatrix () ;

    // Производим несколько поворотов на новый угол // (это быстрее, чем умножать предыдущую видовую // матрицу на матрицу поворота с фиксированным // углом поворота) glRotatef (-CurAng, l, 1, 0); glRotatef (CurAng, 1, 0, 0); // Для рисования колец каждое из них надо // преобразовать отдельно, поэтому сначала // сохраняем видовую матрицу, затем восстанавливаем glPushMatrix () ;

    glTranslatef (0 ,0, - RingHeight /2); DrawRing () ; glPopMatrix () ; glPushMatrix () ;

    glTranslatef (0 , RingHeight/2 ,0); glRotatef (90,1,0,0); DrawRing () ; glPopMatrix () ; glPushMatrix () ;

    glTranslatef (-RingHeight/2 ,0 ,0); glRotatef (90,0,1,0); DrawRing () ;

    glPopMatrix () ;

    // Восстанавливаем матрицу для поворотов тераэдра

    glPopMatrix () ;

    // Выключаем режим наложения текстуры

    glDisable (GL_TEXTURE_2D);

    // Проводим повороты glRotatef (CurAng, l, 0, 0);

    Б.4- Пример 3: Текстурирование и анимация

    193

    glRotatef (CurAng / 2, 1, 0, 1);

    // Чтобы тетраэдр вращался вокруг центра, его // надо сдвинуть вниз по оси oz glTranslatef (0, -0.33, 0);

    // Задаем цвет диффузного отражения для тетраэдра glColor3fv(mat_diff2);

    // Проводим построение тетраэдра glCallList (TETR_LIST); }

    void Display (void)

    {

    // Инициализация (очистка) текущего буфера

    // кадра и глубины

    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Построение объектов

    DrawFigures ();

    // Перестановка буферов кадра

    glutSwapBuffers (); }

    void Redraw (void)

    {

    // Увеличение текущего угла поворота CurAng+=l;

    // Сигнал для вызова процедуры создания изображения // (для обновления) glutPostRedisplay (); }

    int main(int argc , char **argv) {

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

    // Инициализация функций библиотеки GLUT glut Init (&argc , argv );

    // Задание режима с двойной буферизацией, // представление цвета в формате RGB, // использование буфера глубины glutInitDisplayMode(GLUT_DOUBLE |

    GLUT_RGB |

    GLUT_DEFTH); // Создание окна приложения

    glutCreateWindow ("Examplewof „using^OpenGL" ); // Регистрация функции построения изображения glutDisplayFunc( Display ) ;

    // Регистрация функции обновления изображения glutldleFunc (Redraw); // Инициализация функций OpenGL Init ();

    // Цикл обработки событий glutMainLoop () ; return 0;

    }








    Рис. Б.З.

    Результат работы программы Б.5.

    Б. 5. Класс для работы с OPENGL в WIN32

    195

    Б.5. Класс для работы с OpenGL в Win32

    Программа Б.6. Файл glrc.li.

    #ifndef _GLRC_H_ #define _GLRC_H_

    // заголовки OpenGL ^include ^include

    class GLRC

    { public :

    // создание из идентификатора окна GLRC( HWND wnd );

    // деструктор

    GLRC() ;

    // удаление, (также вызывается из деструктора) void Destroy () ;

    // Создание контекста рисования.

    // Необходимо вызвать до использования OpenGL

    bool Create ();

    // Создан ли контекст рисования? bool IsCreated ();

    // Является ли контекст рисования текущим? bool IsCurrentQ const;

    // Делает контект текущим bool MakeCurrent () ;

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

    // Вызывается в конце рисования, // показ созданного изображения void SwapBuffers () ;

    private:

    // создан ли контекст

    bool m_created;

    // окно, для которого контекст

    HWND m_wnd;

    // контекст устройства

    HDC m_dc;

    // контекст рисования OpenGL

    HGLRC m_glrc;

    };

    #endif

    Программа Б.7. Файл glrc.cpp.

    T^include T^include "glrc.h" T^include "assert, h"

    GLRC: :GLRC(HWND wnd) : m_created ( false )

    {

    assert( wnd );

    m_wnd = wnd;

    m_dc = : : GetDC ( wnd );

    assert ( m_dc ); }

    GLRC::GLRC()

    { _

    if (m_created)

    Б. 5. Класс для работы с OPENGL в WIN32 197

    Destroy () ; }

    void GLRC:: Destroy ()

    {

    wglDeleteContext (m_glrc) ;

    : : ReleaseDC (m_wnd, m_dc) ;

    m_created = false ; }

    bool GLRC::MakeCurrent()

    {

    assert ( m_created );

    if (IsCurrent ())
    1   ...   22   23   24   25   26   27   28   29   30


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