Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системы автоматизированного проектирования. Моделирование в машиностроении. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
– «Основание для создания». Указывают полное наименование дирек­тивных документов, на основании которых создают САПР, организацию, утвердившую эти документы, и дату их утверждения; наименование и (или) условное обозначение темы, в рамках которой создается САПР;
– «Характеристика объектов проектирования». Содержатся сведения о назначении, составе, условиях применения объектов (объекта) проектирования;
– «Цель и назначение». Указывают цель создания САПР, ее назначение и критерии эффективности ее функционирования;
– «Характеристика процесса проектирования». Содержит общее описа­ние процесса проектирования, требования к входным и выходным данным, а
также по разделению проектных процедур (операций) на автоматизирован-
ные и неавтоматизированные;
– «Требования к САПР». Указывают требования к САПР в целом и к составу ее подсистем, к включению в состав САПР ранее созданных подси­стем и компонентов САПР, а при необходимости требования к взаимосвязи САПР с другими автоматизированными системами (АСУП, АСУТП и други-
ми) и возможности ее развития. В раздел могут быть включены требования к
видам обеспечения и отдельным компонентам САПР;
– «Технико-экономические показатели». Оценивают затраты на созда­ние САПР, источники получения экономии и ожидаемую эффективность от применения САПР. Кроме того, приводят требования к технико­экономическим показателям объекта проектирования в САПР, которые будут достигнуты в результате функционирования системы;
– «Стадии и этапы». Устанавливают необходимые стадии создания,
очередность ввода в действие подсистем САПР, этапы работ по стадиям,
сроки выполнения работ и исполнителей, виды и комплектность документов по стадиям создания САПР, объемы работ в соответствие с действующими нормативно-техническими и методическими документами;
– «Порядок испытаний и ввода в действие». Определяются виды испы­таний, требования к проведению испытаний и вводу в действие САПР и их подсистем;
– «Источники разработки». В общем случае содержится перечень научно-исследовательских, экспериментальных работ, нормативно­технических документов, методических материалов, используемых при со­здании САПР. Перечень при большом объеме оформляют в виде приложе­ния.
5.1.4 Задание на выполнение лабораторной работы
Напишите задание на разработку САПР по теме своего исследования. Ознакомьте с полученным вариантов преподавателя и студентов группы и проведите обсуждение пунктов написанного вами задания. По результатам
обсуждения вносите необходимые изменения в документ и оформите окончательный вариант технического задания.
31
5.1.5 Контрольные вопросы
Что понимается под техническим заданием?
С какой целью разрабатывается техническое задание?
Какие разделы технического задания являются наиболее важными?
5.2 Знакомство с графической библиотекой OpenGL
5.2.1 Цель работы
Целью работы является получение практических навыков по использо-
ванию функций графической библиотеки OpenGL.
5.2.2 Назначение графической библиотеки OpenGL
OpenGL (Open Graphics Library — открытая графическая библиотека) –
спецификация, определяющая независимый от языка программирования
кросс-платформенный программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.
Включает более 250 функций для рисования сложных трёхмерных сцен из простых примитивов. Используется при создании компьютерных игр. САПР, виртуальной реальности, визуализации в научных исследованиях. На
платформе Windows конкурируете Direct3D.
На базовом уровне, OpenGL - это спецификация (документ), описы-
вающий набор функций и их точное поведение. Производители оборудова-
ния на основе этой спецификации создают реализации — библиотеки функ-
ций, соответствующих набору функций спецификации. Реализация использу­ет возможности оборудования там, где это возможно. Если аппаратура не
позволяет реализовать какую-либо возможность, она должна быть эмулиро-
вана программно. Производители должны пройти специфические тесты
(conformance tests – тесты на соответствие) прежде чем реализация будет
классифицирована как OpenGL реализация. Таким образом, разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, оставив эффективную реализацию этих функций
разработчикам аппаратного обеспечения.
Эффективные реализации OpenGL существуют для Windows, Unix-
платформ, PlayStation 3 и Mac OS. Эти реализации обычно предоставляются изготовителями видеоадаптеров и активно используют возможности послед­них. Существуют также чисто программные реализации спецификации OpenGL, одной из которых является библиотека Mesa. Из лицензионных со­ображений Mesa является «неофициальной» реализацией OpenGL, хотя пол-
ностью с ней совместима на уровне кода.
32
Спецификация OpenGL пересматривается Консорциумом ARB (Architecture Review Board), который был сформирован в 1992 году. Консор­циум состоит из компаний, заинтересованных в создании широко распро­странённого и доступного API. Согласно официальному сайту OpenGL, чле­нами ARB с решающим голосом на ноябрь 2004 года являются производите-
ли профессиональных графических аппаратных средств SGI, 3Dlabs, Matrox и
Evans & Sutherland (военные приложения), производители потребительских графических аппаратных средств ATI и NVIDIA, производитель процессоров Intel, и изготовители компьютеров и компьютерного оборудования IBM,
Apple, Dell, Hewlett-Packard и Sun Microsystems, а также один из лидеров
компьютерной игровой индустрии id Software. Microsoft, один из основопо­ложников Консорциума, покинула его в марте 2003 года. Помимо постоян­ных членов, каждый год приглашается большое количество других компа­ний, становящихся частью OpenGL ARB в течение одного года. Такое боль­шое число компаний, вовлеченных в разнообразный круг интересов, позво­лило OpenGL стать прикладным интерфейсом широкого назначения с боль-
шим количеством возможностей.
Курт Экли (Kurt Akeley) и Марк Сигал (Mark Segal) являются автора­ми оригинальной спецификации OpenGL. Крис Фрэзиер (Chris Frazier) редак­тировал версию 1.1. Ион Лич (Jon Leech) редактировал версии с 1.2 по вер-
сию 2.0.
OpenGL ориентируется на следующие две задачи:
скрыть сложности адаптации различных 3D-ускорителей, предоставляя разработчику единый API;
скрыть различия в возможностях аппаратных платформ, требуя ре-
ализации недостающей функциональности с помощью программной эмуля-
ции.
Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и многоугольников с последующей математической обработкой полученных данных и построе­нием растровой картинки на экране и/или в памяти. Векторные трансформа­ции и растеризация выполняются графическим конвейером (graphics pipeline), который представляет из себя дискретный автомат. Абсолютное большинство команд OpenGL попадают в одну из двух групп: либо они до­бавляют графические примитивы на вход в конвейер, либо конфигурируют
конвейер на различное исполнение трансформаций.
OpenGL является низкоуровневым процедурным API, что вынуждает программиста диктовать точную последовательность шагов, чтобы построить результирующую растровую графику (императивный подход). Это является основным отличием от дескрипторных подходов, когда вся сцена передается в виде структуры данных (чаще всего дерева), которое обрабатывается и строится на экране. С одной стороны, императивный подход требует от про­граммиста глубокого знания законов трёхмерной графики и математических
моделей, с другой стороны — даёт свободу внедрения различных инноваций.
33
5.2.3 Ход работы
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, OpenGL, StdCtrls, ExtCtrls, XPMan;
private DC : HDC; //контекст устройства hrc: HGLRC; //контекст воспроизведения quadObj : GLUquadricObj; //контекст геометрических фигур второго
порядка
procedure TfrmGL.SetDCPixelFormat; var nPixelFormat: Integer; pfd: TPixelFormatDescriptor; begin FillChar(pfd, SizeOf(pfd), 0); pfd.dwFlags:=PFD_DRAW_TO_WINDOW or
PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat:=ChoosePixelFormat(DC, @pfd); SetPixelFormat(DC, nPixelFormat, @pfd); end;
Создайте новый проект Windows – приложения в Delphi 7. Имя модуля главной формы остается по умолчанию – Unit1.pas, главную форму необхо­димо переименовать в – frmGL. В разделе uses программы подключить биб­лиотеку OpenGL:
Далее, необходимо объявить контекст устройства (берется из стан­дартного модуля Windows.pas), контекст воспроизведения (находится в OpenGL.pas) и контекст геометрических фигур второго порядка (сфера, ко­нус) (находится так же в OpenGL.pas). Для этого в разделе типов private
необходимо вписать следующее:
Далее задаем формат пиксела:
FillChar – полям структуры присваиваются желаемые значения, функцией ChoosePixelFormat осуществляется проверка поддержки на данном компьютере, выбранного формата пикселя, и, наконец, SetPixelFormat уста-
навливает формат пиксела в контексте устройства. Функция
ChoosePixelFormat возвращает индекс формата пиксела, который нужен в качестве аргумента функции nPixelFormat. Заполнив поля структуры
TPixelFormatDescriptor, пользователь лишь определяет желаемый формат
34
пиксела, затем встроенные функции OpenGL автоматически подбирают под-
procedure TfrmGL.FormCreate(Sender: TObject); begin DC:=GetDC(Handle); SetDCPixelFormat(DC); hrc:=wglCreateContext(DC); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); glEnable (GL_COLOR_MATERIAL); quadObj:=gluNewQuadric; wglMakeCurrent(canvas.Handle, hrc); glTranslated(0.0, -0.5, 0.0); SwapBuffers(Canvas.Handle); end;
ходящий формат и устанавливают его в качестве формата пиксела для по-
следующей работы.
Константа PFD_DOUBLEBUFFER включает режим двойной буфери-
зации, когда вывод осуществляется не на экран, а в память, затем содержи­мое буфера выводится на экран. Этот режим очень важен, так как при его отсутствии вывод анимированного кадра будет сопровождаться мерцанием. Кадр, содержимое которого изображено на экране, называется передним бу­фером кадра, вспомогательный раздел памяти, в котором подготавливается изображение, называется задним буфером кадра. Константу
PFD_GENERIC_ACCELERATED имеет смысл ставить, когда компьютер оснащен графическим акселератором.
Теперь нужно инициализировать контекст самого OpenGL посредством функций, содержащихся в модуле Windows, и произвести дополнительную настройку. Для этого перейдите к конструктору и сделайте двойной щелчок
левой кнопкой мыши на форме – создастся процедура события загрузки фор­мы FormCreate. В ней необходимо прописать следующий код:
Функция wglCreateContext создает контекст воспроизведения OpenGL,
а функция wglMakeCurrent устанавливает текущий контекст.
быть:
ченном источнике света.
glEnable() - включить использование, параметрами в скобках могут
 GL_LIGHTING - разрешает использование источника света.
GL_LIGHT0 - включает источник света под номером «0».
GL_DEPTH_TEST - вкл. тест глубины.
GL_COLOR_MATERIAL - разрешает использовать цвета при вклю-
GL_AUTO_NORMAL - авто-расчет нормалей.
35
GL_NORMALIZE - обеспечивает корректный вывод авто-нормалей
procedure TfrmGL.Button1Click(Sender: TObject); begin if radiobutton1.Checked then //Прямая 2D begin glClearColor (255, 255, 255, 1); glClear (GL_COLOR_BUFFER_BIT); glEnable(GL_POINT_SMOOTH);
//Оси
при масштабировании.
GL_BLEND - включает режим смешения цветов.
 GL_CULL_FACE - вкл. отсечение не видимых сторон полигонов.
GL_SCISSOR_TEST - разрешает вырезку.
GL_FOG - включение режима тумана.
GL_STENCIL_TEST - включает режим буфера трафарета.
GL_POLYGON_STIPPLE - включает режим штриховки.
 GL_TEXTURE_1D - вкл. режим одномерной текстуры
GL_TEXTURE_2D - вкл. режим двумерной текстуры.
GL_TEXTURE_GEN_S - включает координату «s».
GL_TEXTURE_GEN_T - включает координату «t».
 GL_CLIP_PLAN0 - включает плоскость отсечения номер «0».
quadObj:=gluNewQuadric – создаем новый объект для создания сфер и конусов;
glTranslatef - осуществляет перенос точки зрения (системы координат), имеет три аргумента – величины переноса по каждой из осей;
SwapBuffers(Canvas.Handle) – вывод содержимого буфера на экран.
Расположим компоненты «Radiobuttongroup» и «Button» на форме так же как представлено на рисунке 5.1.
Рисунок 5.1 - Пример размещения компонентов на форме
Обработчик события OnClick кнопки Button1 будет содержать код,
реализующий визуализацию (рисунок 5.2) выбранного объекта в
RadioButton:
36
glBegin (GL_LINES); glColor3f (255, 0, 0); glVertex2f(0, 0); glVertex2f(0.7, 0); //X glColor3f (0, 255, 0); glVertex2f(0, 0); glVertex2f(0, 0.7); //Y glEnd; glColor3f (0, 0, 0); glBegin (GL_LINES); glVertex2f(0, 0); glVertex2f(0.6, 0.3); glEnd; SwapBuffers(Canvas.Handle); end;
if radiobutton2.Checked then //Многоугольник 2D begin glClearColor (255, 255, 255, 1); glClear (GL_COLOR_BUFFER_BIT); glEnable(GL_POINT_SMOOTH); //Оси glBegin (GL_LINES); glColor3f (255, 0, 0); glVertex2f(0, 0); glVertex2f(0.7, 0); //X glColor3f (0, 255, 0); glVertex2f(0, 0); glVertex2f(0, 0.7); //Y glEnd;
Рисунок 5.2 – Постороение прямой 2D
Построение многоугольника:
37
glColor3f (0, 0, 0); glBegin (GL_POLYGON); glVertex2f (0.2,0.1); glVertex2f (0.1,0.4); glVertex2f (0.4,0.5); glVertex2f (0.6,0.3); glVertex2f (0.5,0.1); glEnd; SwapBuffers(Canvas.Handle); end;
if radiobutton3.Checked then //Отрезок 3D begin glPushMatrix; glRotatef(120, 1, 0, 0); // поворот объекта - ось X glRotatef(180, 0, 1, 0); // поворот объекта - ось Y glRotatef(120, 0, 0, 1); // поворот объекта - ось Z glClearColor (255, 255, 255, 1); glClear (GL_COLOR_BUFFER_BIT) ;
//Оси координат
Вид полученного многоугольника представлен на рисунке 5.3.
Рисунок 5.3 – Постороение полигона 2D
Построение трехмерного отрезка (рисунок 5.4):
38
glBegin (GL_LINES); glColor3f (255, 0, 0); glVertex3d(0, 0, 0); glVertex3d(0.7, 0, 0); //X R glColor3f (0, 255, 0); glVertex3d(0, 0, 0); glVertex3d(0, 0.5, 0); //Y G glColor3f (0, 0, 255); glVertex3d(0, 0, 0); glVertex3d(0, 0, 0.5); //Z B glEnd; glColor3f (0, 0, 0); glBegin (GL_LINES); glVertex3d(0, 0, 0); glVertex3d(0.3, 0.3, 0.8); glEnd; glPopMatrix; SwapBuffers (Canvas.Handle); end;
if radiobutton4.Checked then //Многоугольник 3D begin glPushMatrix; glRotatef(120, 1, 0, 0); // поворот объекта - ось X glRotatef(180, 0, 1, 0); // поворот объекта - ось Y glRotatef(120, 0, 0, 1); // поворот объекта - ось Z glClearColor (255, 255, 255, 1); glClear (GL_COLOR_BUFFER_BIT) ;
//Оси координат
Рисунок 5.4 – Постороение прямой 3D
Построение 3D-поверхности (рисунок 5.5):
39
glBegin (GL_LINES); glColor3f (255, 0, 0); glVertex3d(0, 0, 0); glVertex3d(0.7, 0, 0); //X R glColor3f (0, 255, 0); glVertex3d(0, 0, 0); glVertex3d(0, 0.75, 0); //Y G glColor3f (0, 0, 255); glVertex3d(0, 0, 0); glVertex3d(0, 0, 0.5); //Z B glEnd; glColor3f (0, 0, 0); glBegin (GL_POLYGON); glVertex3d (0,0,0); glVertex3d (-0.2,0.6,0); glVertex3d (0.2,0.8,0); glVertex3d (0.5,0.4,0); glVertex3d (0.2,0,0); glEnd; glPopMatrix; SwapBuffers (Canvas.Handle); end;
if radiobutton5.Checked then //Конус begin glPushMatrix; glRotatef(120, 1, 0, 0); // поворот объекта - ось X glRotatef(180, 0, 1, 0); // поворот объекта - ось Y glRotatef(120, 0, 0, 1); // поворот объекта - ось Z glClearColor (255, 255, 255, 1); glClear (GL_COLOR_BUFFER_BIT) ;
Построение конуса(рисунок 5.6):
Рисунок 5.5 – Постороение полигона 3D
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]