Моделирование и визуализация трехмерного объекта сложной формы

Автор работы: Пользователь скрыл имя, 20 Ноября 2010 в 19:56, Не определен

Описание работы

Для выполнения курсовой работы студенту необходимо написать программу, осуществляющую визуализацию заданного трехмерного объекта (метод визуализации – каркасный, т.е. без удаления невидимых линий) и позволяющую пользователю управлять перемещениями и трансформациями объекта и/или наблюдателя.

Файлы: 1 файл

курсач(2 вариант)1.doc

— 232.00 Кб (Скачать файл)

            return FALSE;// Вернуть false

      }

      if (!(hRC=wglCreateContext(hDC))) 

// Возможно ли установить Контекст Рендеринга?

      {

            KillGLWindow(); // Восстановить экран

            MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

            return FALSE; // Вернуть false

      }

      if(!wglMakeCurrent(hDC,hRC))

        // Попробовать активировать Контекст Рендеринга

      {

            KillGLWindow(); // Восстановить экран

            MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);

            return FALSE;// Вернуть false

      }

      ShowWindow(hWnd,SW_SHOW); // Показать окно

      SetForegroundWindow(hWnd); // Слегка повысим приоритет

      SetFocus(hWnd);  // Установить фокус клавиатуры на наше окно

      ReSizeGLScene(width, height);

// Настроим перспективу для нашего OpenGL экрана.

      if (!InitGL()) // Инициализация только что  созданного окна

      {

            KillGLWindow();// Восстановить экран

            MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);

            return FALSE; // Вернуть false

      }

      return TRUE;// Всё в порядке!

}

LRESULT CALLBACK WndProc( HWND hWnd,

// Дескриптор  нужного окна

UINT  uMsg,                               // Сообщение для этого окна

WPARAM   wParam,   // Дополнительная информация

LPARAM  lParam)   // Дополнительная информация

{

      switch (uMsg) // Проверка сообщения для окна

      {

            case WM_ACTIVATE: // Проверка сообщения активности окна

            {

                  if (!HIWORD(wParam)) 

// Проверить  состояние минимизации

                  {

                        active=TRUE;// Программа  активна

                  }

                  else

                  {

                        active=FALSE; // Программа теперь не активна

                  } 

                  return 0; // Возвращаемся в цикл обработки сообщений

            }

            case WM_SYSCOMMAND:// Перехватываем  системную команду

            {

                  switch (wParam) // Останавливаем системный вызов

                  {

                        case SC_SCREENSAVE: 

          // Пытается ли запустится скринсейвер?

                        case SC_MONITORPOWER: 

      // Пытается ли монитор перейти  в режим сбережения энергии?

                        return 0;  // Предотвращаем это

                  }

                  break;    // Выход

            }

            case WM_CLOSE: // Мы получили сообщение о закрытие?

            {

                  PostQuitMessage(0); // Отправить сообщение о выходе

                  return 0;   // Вернуться назад

            }

            case WM_KEYUP: // Была ли  нажата кнопка?

            {

               if( wParam=='A') Depth+=0.5;

               if( wParam=='Z') Depth-=0.5;

                  if( wParam=='S') Route+=0.05;

                        if( wParam=='X') Route-=0.05;

               if( wParam=='Q')MasRotate[0]=!MasRotate[0];

                   if( wParam=='W')MasRotate[1]=!MasRotate[1];

                     if( wParam=='E')MasRotate[2]=!MasRotate[2];

             return 0;

            }

            case WM_SIZE:  // Изменены размеры OpenGL окна

            {

                  ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); 

          // Младшее слово=Width, старшее слово=Height

                  return 0; // Возвращаемся

            }

      }

      // пересылаем все необработанные  сообщения DefWindowProc

      return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

int WINAPI WinMain( HINSTANCE hInstance,// Дескриптор приложения

            HINSTANCE hPrevInstance,

// Дескриптор родительского приложения

            LPSTR lpCmdLine,// Параметры командной строки

            Int nCmdShow)      // Состояние отображения окна

{

      MSG msg; // Структура для хранения сообщения Windows

      BOOL done=FALSE; // Логическая переменная для выхода из цикла 

      // Создать наше OpenGL окно

      if (!CreateGLWindow("OpenGL",640,480,16,fullscreen))

      {

            return 0;// Выйти, если  окно не может быть создано

  } 

      while(!done) // Цикл продолжается, пока done не равно  true

      {

            if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))

      // Есть ли в очереди какое-нибудь  сообщение?

            {

                  if (msg.message==WM_QUIT)

                        // Мы получили  сообщение о выходе?

                  {

                        done=TRUE;// Если так, done=true

                  }

                  else // Если нет, обрабатывает сообщения

                  {

                        TranslateMessage(&msg);// Переводим  сообщение

                        DispatchMessage(&msg);// Отсылаем  сообщение

                  }

            }

            else  // Если нет сообщений

            {

             // Прорисовываем сцену.

                  if ((active && !DrawGLScene()) || keys[VK_ESCAPE]) 

            // Активна ли программа?

                  {

                        done=TRUE;// Было ли  нажата клавиша ESC?

                  }

                  else // ESC говорит об останове выполнения программы

                  {

                        SwapBuffers(hDC);

           // Не время для выхода, обновим экран.

                  }

                  if (keys[VK_F1]) // Была ли нажата F1?

                  {

                        keys[VK_F1]=FALSE;

                        // Если так, меняем  значение ячейки массива на false

                        KillGLWindow(); // Разрушаем текущее окно

                        fullscreen=!fullscreen;// Переключаем  режим

                         // Пересоздаём наше  OpenGL окно

                  if(!CreateGLWindow("OpenGL",1024,768,32,fullscreen))

                        {

                              return 0;// Выходим, если это невозможно

                        }

                  }

            }

      }

      KillGLWindow(); // Разрушаем окно

      return (msg.wParam); // Выходим из программы

} 
 
 
 
 
 
 
 
 

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

 
 

          

 

Заключение.

С помощью OpenGl была построена, и подвергнута преобразованиям искомая фигура.

Информация о работе Моделирование и визуализация трехмерного объекта сложной формы