Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Системы автоматизированного проектирования. Моделирование в машиностроении. Учебное пособие
.pdf
– «Основание для создания». Указывают полное наименование директивных документов, на основании которых создают САПР, организацию,
утвердившую эти документы, и дату их утверждения; наименование и (или)
условное обозначение темы, в рамках которой создается САПР;
– «Характеристика объектов проектирования». Содержатся сведения о
назначении, составе, условиях применения объектов (объекта) проектирования;
– «Цель и назначение». Указывают цель создания САПР, ее назначение
и критерии эффективности ее функционирования;
– «Характеристика процесса проектирования». Содержит общее описание процесса проектирования, требования к входным и выходным данным, а
также по разделению проектных процедур (операций) на автоматизирован-
ные и неавтоматизированные;
– «Требования к САПР». Указывают требования к САПР в целом и к
составу ее подсистем, к включению в состав САПР ранее созданных подсистем и компонентов САПР, а при необходимости требования к взаимосвязи
САПР с другими автоматизированными системами (АСУП, АСУТП и други-
ми) и возможности ее развития. В раздел могут быть включены требования к
видам обеспечения и отдельным компонентам САПР;
– «Технико-экономические показатели». Оценивают затраты на создание САПР, источники получения экономии и ожидаемую эффективность от
применения САПР. Кроме того, приводят требования к техникоэкономическим показателям объекта проектирования в САПР, которые будут
достигнуты в результате функционирования системы;
– «Стадии и этапы». Устанавливают необходимые стадии создания,
очередность ввода в действие подсистем САПР, этапы работ по стадиям,
сроки выполнения работ и исполнителей, виды и комплектность документов
по стадиям создания САПР, объемы работ в соответствие с действующими
нормативно-техническими и методическими документами;
– «Порядок испытаний и ввода в действие». Определяются виды испытаний, требования к проведению испытаний и вводу в действие САПР и их
подсистем;
– «Источники разработки». В общем случае содержится перечень
научно-исследовательских, экспериментальных работ, нормативнотехнических документов, методических материалов, используемых при создании САПР. Перечень при большом объеме оформляют в виде приложения.
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
