59



Оглавление

Оглавление 1

Графические форматы 3

BMP и WMF 3

GIF и PNG 5

PSD и CDR 6

JPEG и TIFF 8

DWG и DXF 10

DDS , TGA 11

Устройства вывода. 13

Дисплеи. 13

Печатающие устройства. 13

Устройства ввода. 14

Сканеры. 14

Системы ВР 14

Базовая графика в С++ и C# Графические примитивы 15

Установка цвета и толщины графических примитивов, 17

Описание общей структуры команд в OpenGL. 18

Описание общей структуры команд в DirectX. 20

Описание примитивов вывода отрезков в Direct3D 25

Описание примитивов вывода треугольников в OpenGL 26

Описание примитивов вывода треугольников в DirectX 28

Описание примитивов вывода четырехугольников в OpenGL 31

Описание примитивов вывода многоугольников в OpenGL. 33

Описание команд перемещения, вращения и масштабирования объектов в OpenGL. 35

Описание команд перемещения, вращения и масштабирования объектов в DirectX. 38

Компас 3D 40

Выбор и установка основных параметров для выполнения графической документации в графическом редакторе «Компас 3D». Форматы. Масштабы. Линии. Шрифты. Виды. Нанесение размеров. 40

Выбор и установка привязок в графическом редакторе «Компас 3D». Установка точных расстояний и углов. Применение компактной панели: геометрия. Основные геометрические примитивы. Применение соответствующей панели свойств. 42

Типы размеров. Применение компактной панели: размеры 43

Типы обозначений на чертежах: текст, разрезы и сечения, вид, выноски, выносной элемент и другие обозначения. Применение компактной панели: обозначения. Применение соответствующей панели свойств. 44

Измерения на чертежах. Применение компактной панели: измерение. Применение соответствующей панели свойств. 45

Редактирование на чертежах: сдвиг, поворот, масштабирование, симметрия и другие. 46

Применение компактной панели: редактирование. Применение соответствующей панели свойств 46

Описание общей структуры текстового файла VRML 47

Имена 47

Узлы 48

Виртуальная Java машина и графика в Java. 50

Написать последовательность действий в графическом редакторе «Компас- 3D» для создания трехмерной модели детали с выдавливанием (по карте с заданием). 55

Написать последовательность действий в графическом редакторе «Компас- 3D» для создания трехмерной модели детали с вырезанием (по карте с заданием). 55

Требования ЕСКД по выполнению графической документации в графическом редакторе «Компас 3D». Форматы. Масштабы. Линии. Шрифты. 57

Изображения- виды, сечения, разрезы. 57

Требования ЕСПД по выполнению программной документации, алгоритмов и блок-схем. 58





Графические форматы

Графические форматы: области применения, преимущества и недостатки, особенности.



BMP и WMF

Оба - родные форматы Windows

BMP:

Поддерживается всеми графическими редакторами, работающими под управлением этой операционной системы. Применяется для хранения растровых изображений, предназначенных для использования в Windows и, по сути, больше ни на что не пригоден. Способен хранить как индексированный (до 256 цветов), так и RGB-цвет (16.700.000 оттенков). Возможно применение сжатия по принципу RLE, но делать это не рекомендуется, так как очень многие программы таких файлов (они могут иметь расширение .rle) не понимают. Существует разновидность формата ВМР для операционной системы OS/2.

Использование BMP не для нужд Windows является распространенной ошибкой новичков. Использовать BMP нельзя ни в web, ни для печати (особенно), ни для простого переноса и хранения информации.


Windows Metafile - wmf

Служит для передачи векторов через буфер обмена (Clipboard). Понимается практически всеми программами Windows, так или иначе связанными с векторной графикой. Однако, несмотря на кажущуюся простоту и универсальность, пользоваться форматом WMF стоит только в крайних случаях для передачи "голых" векторов. WMF искажает (!) цвет, не может сохранять ряд параметров, которые могут быть присвоены объектам в различных векторных редакторах, не может содержать растровые объекты, не понимается очень многими программами на Macintosh.

Не предназначены для допечатной подготовки!





GIF и PNG

Упрощенно говоря, предназначены для обмена графической информацией в интернете.

GIF (CompuServe Graphics Interchange Format - gif)


Независящий от аппаратного обеспечения формат GIF был разработан в 1987 году (GIF87a) фирмой CompuServe для передачи растровых изображений по сетям (какие они были в 1987 году). В 1989-м формат был модифицирован (GIF89a), были добавлены поддержка прозрачности и анимации. GIF использует LZW-компрессию, что позволяет неплохо сжимать файлы, в которых много однородных заливок (логотипы, надписи, схемы).

PNG - разработанный относительно недавно формат для Сети, призванный заменить собой устаревший GIF. Использует сжатие без потерь Deflate, сходное с LZW (именно из-за патентования в 1995-м году алгоритма LZW возник PNG). Сжатые индексированные файлы PNG, как правило, меньше аналогичных GIF'ов, RGB PNG меньше соответствующего файла в формате TIFF.

Глубина цвета файлах PNG может быть любой, вплоть до 48 бит. Используется двумерный interlacing (не только строк, но и столбцов), который, так же, как и в GIF'е, слегка увеличивает размер файла. В отличие от GIF, где прозрачность как мед - либо есть, либо нет, PNG поддерживает также полупрозрачные пикселы (то есть в диапазоне прозрачности от 0 до 99%) за счет Альфа-канала с 256 градациями серого.

PNG – популярный, но недооцененный формат.

PSD и CDR



Форматы нашли свое применение в допечатной подготовке.

PSD - формат графических файлов редактора Adobe Photoshop:
Формат PSD является стандартным форматом пакета Adobe Photoshop и отличается от большинства обычных растровых форматов возможностью хранения слоев (layers). Он содержит много дополнительных переменных (не уступает TIFF по их количеству) и сжимает изображения, используя алгоритм сжатия без потерь RLE Packbits, иногда даже сильнее, чем PNG (только в тех случаях, когда размеры файла измеряются не в килобайтах, а в десятках или даже сотнях мегабайт). Формат поддерживает глубины цвета, вплоть до 16 бит на канал (48-битные цветные и 16-битные черно-белые), а также альфа-каналы, слои, контуры, прозрачность, векторные надписи и т. п. Прекрасно подойдет для переноса или хранения изображений, содержащих специфические, свойственные только Adobe Photoshop, элементы. Файлы PSD свободно читаются большинством популярных просмотрщиков, но не стоит забывать, что, открыв эти файлы в некоторых графических редакторах третьих фирм, даже декларирующих поддержку формата PSD, можно потерять значительную часть их специфических возможностей (особенно в части работы со слоями, см. серию наших статей "Adobe Photoshop, первые шаги")..

Осторожно: есть проблемы совместимости версий продуктов Photoshop, и как следствие – потеря информации при чтении старыми версиями новых файлов, если вообще получится.


Довольно противоречивым является формат CDR, основной рабочий формат популярного пакета Corel DRAW, являющимся неоспоримым лидером в классе векторных графических редакторов на платформе РС. Имея сравнительно невысокую устойчивость и проблемы с совместимостью файлов разных версий формата, тем не менее формат CDR, особенно последних, 7-й и 8-й версий, можно без натяжек назвать профессиональным. В файлах этих версий применяется раздельная компрессия для векторных и растровых изображений, могут внедряться шрифты, файлы CDR имеют огромное рабочее поле 45х45 метров, поддерживается многостраничность.



Возможно, стоит упоминать и формат Adobe Illustrator.







JPEG и TIFF

Самый популярный формат для хранения фотографических изображений JPEG (или JPG) является общепризнанным стандартом в интернете. JPEG может хранить только 24-битовые полноцветные изображения. Одноименный с форматом, достаточно сложный алгоритм сжатия основан на особенностях человеческого зрения (используется представление блока пикселей 8х8 одним цветом с сохранением информации о яркости плюс метод Хаффмана и, в зависимости от степени компрессии, некоторые другие ухищрения).

Хотя JPEG отлично сжимает фотографии, но это сжатие происходит с потерями и портит качество, тем не менее, он может быть легко настроен на минимальные, практически незаметные для человеческого глаза, потери. Кстати, усилить сжатие и минимизировать потери качества можно, предварительно размыв изображение (например, применив фильтр blur).

Однако не стоит использовать формат JPEG для хранения изображений, подлежащих последующей обработке, так как при каждом сохранении документа в этом формате процесс ухудшения качества изображения носит лавинообразный характер. Наиболее целесообразно будет корректировать изображение в каком-нибудь другом подходящем формате, например TIFF, и лишь по завершению всех работ окончательная версия может быть сохранена в JPEG. Таким образом, можно сохранить вполне приемлемое качество изображения при минимальном размере итогового файла.

Формат JPEG пригоден в подавляющем большинстве случаев только для публикации полноцветных изображений, типа фотографических, в интернете.

С учетом возможностей допечатной подготовки – и для печати он тоже в ряде случаев годится, нечего выпендриваться. -АС



TIFF

Формат TIFF был разработан компанией Aldus для своего графического редактора PhotoStyler, впрочем, уже почившего в бозе, однако самому формату была уготована гораздо более долгая жизнь. Как универсальный формат для хранения растровых изображений, TIFF достаточно широко используется, в первую очередь, в издательских системах, требующих изображения наилучшего качества. Кстати, возможность записи изображений в формате TIFF является одним из признаков высокого класса современных цифровых фотокамер (да ну! Просто raw и плагины к фотошопу дают куда больше).


Благодаря своей совместимости с большинством профессионального ПО для обработки изображений, формат TIFF очень удобен при переносе изображений между компьютерами различных типов (например, с PC на Маc и обратно).

Ценим экспертами допечатной подготовки, придающих высокие требования к картинке. При тиражировании все равно видимых неподготовленным глазом преимуществ, связанный именно с этим форматом, почти нет.



DWG и DXF



DWG

Формат графических файлов фирмы Autodesk. Система AutoCAD использует DWG-формат для хранения своих файлов. Спецификация DWG-формата не раскрывается Autodesk (проприетарная).

Известно, что она меняется в каждой новой версии AutoCAD. До версии 11 формат претерпевал незначительные изменения, связанные с дополнительными возможностями новых версий. В 12 версии формат практически не изменился, но это было как затишье перед бурей, потому что формат 13 версии - это полностью новый формат. В 14 версии формат был снова изменен, но это были изменения в рамках предыдущего формата. Далее, с появлением новых версий AutoCAD, происходили дальнейшие изменения формата.
Поскольку DWG-формат не опубликован, многие разработчики программного обеспечения пытались декодировать его и использовать результаты в коммерческом программном обеспечении, например, в конверторах DWG-формата, в программах просмотра DWG-файлов. Без согласия компании Autodesk организовано открытое сообщество (OpenDWG Alliance), целью которого является сделать DWG-формат доступным для всех, кто присоединится к альянсу.
Для обмена чертежами Autodesk предлагает открытый DXF-формат. Спецификацию DXF-формата можно найти в каждом комплекте документации по AutoCAD.

DXF

Открытый (в отличие от DWG-формата) формат файлов для обмена двумерной графической информацией между приложениями САПР. Был создан фирмой Autodesk для системы Автокад (AutoCAD). DXF - аббревиатура от "Drawing eXchange Format". Существует текстовый (DXF) и двоичный вариант формата (DXB). Описан в множестве документов по разработки приложений для Автокад.
Поддерживается практически всеми CAD-системами на платформе PC. Фирма Autodesk постоянно расширяет возможности передачи графических данных через формат DXF, обновляя формат с выпуском новых версий системы Автокад. Поэтому отсутствует совместимость форматов "сверху-вниз".

Вообще – редкостное убожество, калечащее передаваемую информацию.

Форматов САПР очень много – больше, чем САПР из-за обилия версий.

Правильные форматы – STEP и IGES. Для них есть конверторы, импортеры и т.д. для всевозможных САПР систем.

DDS , TGA

Эти вопросы будут обсуждаться с «претендентами на отлично».




DDS

DDS - Растровый графический формат, предназначенный для хранения текстур, как сжатых, так и несжатых. Особенностям файлов формата .dds относятся его относительно небольшие размеры. Формат DDS (Direct Draw Surface), был впервые введен Microsoft в DirectX 7.0, а качественные инструменты для него предоставляет фирма NVIDIA.


Этот формат очень гибок: поддерживает сжатые и несжатые текстуры (1,2,3-мерные, cubemap-текстуры), а также mipmap уровни текстуры.


Тут требуется разобраться со способами обращения к индивидуальным пикселам текстур:

Одномерные это таблицы.

Трехмерные это массивы вокселов, и, чтобы к ним обратиться, нужны три координаты x,y,z.

К cubemap текстуре можно обращаться по трем нормированным координатам x,y,z, что соответствует направлению в пространстве, а не «плоскому» изображению, но текстура, по сути, двумерная.)


Формат допускает метод сжатия 3TC (S3 Texture Compression) разработанный фирмой S3. S3TC является алгоритмом с потерей данных, и обеспечивает компрессию текстур в 2-8 раз. Алгоритм S3TC достаточно прост (практически не снижает быстродействие), позволяет распаковывать произвольные фрагменты текстуры и, что самое важное – аппаратно поддерживается всеми современными видеокартами.



TGA

Растровый графический формат. Первоначально был создан компанией Truevision Inc. для графических адаптеров собственного производства ещё в 1984, но в дальнейшем стал популярен на самых разных платформах, особенно в области обработки видео, анимации.

TGA формат первоначально стал популярен, так как это был первый 24-битный формат с точным цветом пригодный для широкого использования на ПК.

Обычно файлы этого формата имеют расширение .tga в системах, следующих традициям DOS, или .tpic на компьютерах Macintosh. Формат поддерживает глубину цвета 1—32 бита на пиксель. Есть поддержка альфа-каналов, сжатия RLE (не всегда читается).

Заключение:

Благодаря альфа каналу, и ввиду того, что современные 3d ускорители работают с векторами по 4 числа, а не по 3, и реализуют аппаратно различные режимы «alpha blending» - полупрозрачности, оба формата находит широкое применение в 3d играх, но первый характерен для DirectX совместимых, а второй распространен в OpenGL приложениях.



Устройства вывода.

Дисплеи.

Классификация устройств вывода. Классификация дисплеев. Векторные дисплеи. Растровые дисплеи. Плазменная панель. Жидкокристаллические индикаторы.

Ну и что тут говорить – УВ это мониторы, принтеры и есть еще возможность сохранить графические данные (растр) в память без вывода.

ВД – применялись для охоты на мамонтов. РД – то, чем мы и пользуемся до сих пор. ПП – надо думать это то устаревшее плоское … ЖК индикаторы – в часах.

Вопросы по билету не ко мне, а к ГГ.



Печатающие устройства.

Печатающие устройства. Разрешение устройств. Классификация и принцип действия принтеров

Про струйные, лазерные и сублимационные принтеры. Про векторные плоттеры можете упомянуть.

Исходное изображение имеет гораздо меньшее разрешение НА ЭКРАНЕ, чем позволяет вывести принтер. На экране аддитивная система RGB, принтеры поддерживают субтрактивную CMYK модель представления цвета.

Принцип действия любого принтера состоит в превращении векторного изображения в растровое или процессором ПК (редко) или процессором принтера (обычно), а для растрового изображения (которое имеет место для изображений, или получено на предыдущем этапе) выполняется «полутоновое кодирование». Поэтому полутоновое изображение печатаются каплями или при помощи заряженного барабана лазерного принтера в при помощи частых (будет насыщенный или черный цвет) или редких (будет бледный или серый цвет).



Графопостроители. Классификация. Планшетные графопостроители. Графопостроители с переметающимся носителем.


Соответствует предыдущему билету. Все отличие – ширина листа.

Можете упомянуть СНПЧ – систему непрерывной подачи чернил из банок.


Устройства ввода.

Классификация и принцип действия устройств ввода. Клавиатуры, кнопки, световое перо. Мышь, трекбол, джойстик. Планшеты


Принцип действия кнопки – подается на IO устройство материнской платы, сохраняется в буфере. ОС с определенной частотой обращается к драйверу устройства, тот просматривает, что в буфере и возвращает в ОС обработанную информацию. ОС анализирует фокус ввода, делает приложение активным, и передает событие и информацию в приложение. Там должен быть обработчик.

Про световое перо, трекбол, джойстик и проч. игровую чепуху ничего спрашивать не буду!



Сканеры.

Сканеры.


Сканеры – устройства для оцифровки плоских изображений с носителей – пленки, фотографий, распечаток на бумаге и так далее.


Системы ВР

Средства диалога для систем виртуальной реальности


Про системы ВР:

  1. Информация о глубине благодаря стереоэффекту. Изображение формируется для обоих глаз независимо.

  2. Расчет звука с учетом положения источников звука и пользователя.

  3. Изображение формируется (но не обязательно) с учетом ориентации и (или) положения головы пользователя.

  4. Средства диалога – физически воспроизводят тактильную среду. Например – рычаги в танке или вертолете. В простом и дешевом случае – разнообразные игровые устройства ввода, фантазия у Вас богатая.


Базовая графика в С++ и C# Графические примитивы

Графические примитивы рисования точки, линии и прямоугольника средствами базовой графики


«Базовая графика» это термин блуждающий лишь в наших книгах по программированию windows. Есть базовые функции рисования ()…


В С++

Поставить точку MoveTo()

от нее вести прямую…


Прямую: LineTo()

Дуг: Arc(), ArcTo(), AngleArc()

Ломаных: Polyline(),PolylineTo(), PolyDraw()

Кривых: PolyBezier(),PolyBezierTo();

Прямоугольников: Rectangle(),RoundRectangle();


В С++ это выглядит так:


Скажем, есть метод OnPaint()

{

//В нем

CPaintDC dc(this);

CPen pen_1(PS_Solid, 1, RGB(0,0,0));

CPen *pen_1 = dc.SelectObject(&Pen_1);

dc.MoveTo(100,200);

dc.LineTo(200,100);

и так далее…

}


В С# это выглядит так:


private void button1_Click(object sender, System.EventArgs e)
{

* 2. Инициализация графики */
Graphics canvas= Graphics.FromHwnd(this.Handle);
// где canvas - любое свое имя идентификатора для указателя
float w0=2.0f;

Pen pen=new Pen(Color.Red,w0);
//
выбор пера (Pen) для рисования линии
SolidBrush b=new SolidBrush(Color.FromArgb(150,0,0,255));

//
выбор кисти (Brush) для рисования текста
//
и далее по методичке

line(x0-xn[i],y0+yn[i],x0-xk[i],y0+yk[i]);


Вот если Вы понимаете, при чем здесь “this”, и видите общность этих действий, то вы можете рассчитывать на хорошую отметку.

А если ограничиваетесь только рассуждениями про точку -point, прямую line и прямоугольник rectangle - то хорошая или удовлетворительная оценка.

Установка цвета и толщины графических примитивов,

функции вывода графического текста средствами базовой графики.


В С++ это выглядит так:


Скажем, есть метод OnPaint()

{

//В нем

CPaintDC dc(this);

CPen pen_1(PS_Solid, 1, RGB(0,0,0));

CPen *pen_1 = dc.SelectObject(&Pen_1);

dc.MoveTo(100,200);

dc.LineTo(200,100);

и так далее…

}



В С# это выглядит так:


private void button1_Click(object sender, System.EventArgs e)
{

* 2. Инициализация графики */
Graphics canvas= Graphics.FromHwnd(this.Handle);
//
где canvas - любое свое имя идентификатора для указателя
float w0=2.0f;

Pen pen=new Pen(Color.Red,w0);
//
выбор пера (Pen) для рисования линии
SolidBrush b=new SolidBrush(Color.FromArgb(150,0,0,255));
//
выбор кисти (Brush) для рисования текста
//
и далее по методичке

line(x0-xn[i],y0+yn[i],x0-xk[i],y0+yk[i]);



Описание общей структуры команд в OpenGL.

«Синие» вопросы будут обсуждаться с «претендентами на отлично».


Следует обратить внимание, что OpenGL является программным интерфейсом для графических устройств, и включает в себя сотни функций и процедур.

А что собственно, делают графические устройства

(какие? 3d ускорители или их программный эмулятор)

Выполняет рендеринг – расчет изображения.

(что такое изображение? Прямоугольный массив векторов по 3 или 4 значения – пикселов, то есть в конечном итоге – числа, превращаемые в аналоговые значения ЦАП ускорителя или уже в мониторе)


С точки зрения архитектуры программы, это интерфейс для управления «машиной состояний», а не классическая программа – последовательность действий.


Объясните, как бы работала программная система рендеринга, и в чем отличие OpenGL .


Машина состояний – конечный автомат, абстрактная модель набора переменных состояния, имеющих разные значения, включенный и выключенные. Задавать все переменные состояния, когда мы пытаемся нарисовать что-то в OpenGL непрактично. Вместо этого в OpenGL реализована модель состояний, предназначенная для отслеживания всех состояний OpenGL. Установленное значение в OpenGL остается до тех пор, пока другая функция его не изменит. Многие состояния это просто метки – включено выключено. Например, освещение либо включено, либо выключено. Геометрия, нарисованная без освещения, рисуется без применения к набору цветов расчетов освещения. Любая геометрия, нарисованная после включения освещения, изображается согласно расчетам освещенности…

glEnable(GL_LIGHTNING)

glDisable(GL_LIGHTNING)


Популярно: программа записывает некие параметры, описывающие текущие, необходимые для формирования изображения параметры – где камера, куда она направлена. Где источники света. Где изображаемые предметы. Есть ли туман. Задает текстуры и геометрию.

Затем используются команды1

glFlush();

Это мы приказали машине состояний обработать наши данные. Наше приложение не отвечает за их обработку, и не принципиально – это обработка на ускорителе или программно. Так – мы не обращаем внимание на такие процедуры, как сборка и отсечение треугольников, или перспективное деление – все это непрограммируемая часть OpenGL. Наконец:

SwapBuffers(…); - показать содержимое экранного буфера, куда нарисовали


Командные скобки glBegin и glEnd определяют примитив или группу однотипных примитивов, к которым относятся точки, отрезки, связанные группы отрезков, замкнутые группы отрезков, многоугольники, треугольники, связанные треугольники с общим ребром (trianglestrip trianglefan), четырехугольники и связанные четырехугольники…

Синтаксис:

void glBegin(GLenum mode);

void glEnd()

Описание общей структуры команд в DirectX.

Эти вопросы будут обсуждаться с «претендентами на отлично».


Практически все части DirectX API представляют собой наборы COM-совместимых объектов.

COM (англ. Component Object Model — Объектная Модель Компонентов; произносится как [ком]) — это технологический стандарт от компании Microsoft, предназначенный для создания программного обеспечения на основе взаимодействующих распределённых компонентов, каждый из которых может использоваться во многих программах одновременно.

Основным понятием, которым оперирует стандарт COM, является COM-компонент. Программы, построенные на стандарте COM, фактически не являются автономными программами, а представляют собой набор взаимодействующих между собой COM-компонентов. Каждый компонент имеет уникальный идентификатор (GUID) и может одновременно использоваться многими программами. Компонент взаимодействует с другими программами через COM-интерфейсы — наборы абстрактных функций и свойств


Дан пример кода. Нужно будет объяснить, где что происходит (в примере могут отсутствовать комментарии на английском, но тут они есть…)


Например, есть функция InitVB, в которой описывается геометрия (она вызывается из wWinMain):


HRESULT InitVB()

{

// Initialize three Vertices for rendering a triangle

CUSTOMVERTEX Vertices[] =

{

{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color

{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },

{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },

};


// Create the vertex buffer. Here we are allocating enough memory

// (from the default pool) to hold all our 3 custom Vertices. We also

// specify the FVF, so the vertex buffer knows what data it contains.


Создали буфер g_pVB:


if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ),

0, D3DFVF_CUSTOMVERTEX,

D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )

{

return E_FAIL;

}




// Now we fill the vertex buffer. To do this, we need to Lock() the VB to

// gain access to the Vertices. This mechanism is required becuase vertex

// buffers may be in device memory.

VOID* pVertices;

if( FAILED( g_pVB->Lock( 0, sizeof( Vertices ), ( void** )&pVertices, 0 ) ) )

return E_FAIL;


скопировали в него данные, воспользовавшись указателем на место в буфере pVertices, куда копировать


memcpy( pVertices, Vertices, sizeof( Vertices ) );

g_pVB->Unlock();


return S_OK;


VOID Render() нарисует содержимое этого буфера g_pVB, сперва надо указать источник (source), формат, и явно D3DPT_TRIANGLELIST одного -1 единственного треугольника (или столько, сколько записали в буфер):


VOID Render()

{

// Clear the backbuffer to a blue color

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );


// Begin the scene

if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )

{

// Draw the triangles in the vertex buffer. This is broken into a few

// steps. We are passing the Vertices down a "stream", so first we need

// to specify the source of that stream, which is our vertex buffer. Then

// we need to let D3D know what vertex shader to use. Full, custom vertex

// shaders are an advanced topic, but in most cases the vertex shader is

// just the FVF, so that D3D knows what type of Vertices we are dealing

// with. Finally, we call DrawPrimitive() which does the actual rendering

// of our geometry (in this case, just one triangle).



g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );

g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );


// End the scene

g_pd3dDevice->EndScene();


Сцена передана в очередь на рендеринг, за что отвечает драйвер. Этот метод не является синхронным, так что когда метод выполнился, нет гарантии, что сцена нарисована в экранном буфере. (Однако, по-видимому, драйвер достаточно умный, чтобы отложить показ экранного буфера, который выполняется на следующем этапе)

- показать содержимое экранного буфера, куда нарисовали


// Present the backbuffer contents to the display

g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

}


Таким образом, пара g_pd3dDevice->BeginScene() и g_pd3dDevice->EndScene() выполняет функции аналогичные командным скобкам void glBegin(GLenum mode) и void glEnd() в OpenGL, но между ними можно переключаться между источниками stream, менять форматы и режимы вывода.






Описание примитивов вывода отрезков в OpenGL.


Во-первых, требуется определиться, для чего НУЖНЫ отрезки.

Если речь идет о визуализации таких каркасных объектов как

прямоугольных оболочек, осей и сеток, пространственных кривых или векторных текстов с помощью шрифтов – можно использовать параметр mode GL_LINES:

Каждая пара вершин рассматривается как независимый отрезок.


void CPrimView::Lines()

{

glPushMatrix();

for(int i=0; I < 16;i++)

{

::glBegin(GL_LINES);

::glVertex3f(ax[i],ay[i],az[i]); // скажем, присвоим готовые значения из массива

::glVertex3f(bx[i],by[i],bz[i]);

::glEnd();

}

::glTranslatef((GLfloat)vpW /2., (GLfloat)vpH /2.,0.0f); // размеры экрана

//по горизонтали и вертикали

::glPopMatrix()

}

}

Или для ломаной:

::glBegin(GL_LINE_STRIP);


В этом режиме рисуется последовательность из одного или нескольких связанных отрезков. Если рисуется N отрезков, то вершин должно быть N+1.

::glBegin(GL_LINE_LOOP);


В этом режиме рисуется замкнутая последовательность из нескольких связанных отрезков. Если рисуется n отрезков, то и вершин должно быть n.


Но правильным подходом, если требуется нарисовать каркасную модель из полигональной (т.е. представленной с помощью треугольников):

void glPolygonMode(GLenum face, GLenum mode)


с такими значениями:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

При этом связанные грани многоугольника отображаются в виде отрезков.



Описание примитивов вывода отрезков в Direct3D


Во-первых, требуется определиться, для чего НУЖНЫ отрезки.

Если речь идет о визуализации таких каркасных объектов как

прямоугольных оболочек, осей и сеток, пространственных кривых или векторных текстов с помощью шрифтов – можно использовать параметр mode GL_LINES:

Каждая пара вершин рассматривается как независимый отрезок.


struct CUSTOMVERTEX

{

float x,y,z;

};


CUSTOMVERTEX Vertices[] =

{

{-5.0, -5.0, 0.0},

{ 0.0, 5.0, 0.0},

{ 5.0, -5.0, 0.0},

{10.0, 5.0, 0.0},

{15.0, -5.0, 0.0},

{20.0, 5.0, 0.0}

};



d3dDevice->BeginScene();

d3dDevice->SetStreamSource( 0, m_vertBuffer, sizeof(CUSTOMVERTEX) );

// set vertex stream..

d3dDevice->DrawPrimitive( D3DPT_LINELIST, 0, 3 );

d3dDevice ->EndScene();


Или для ломаной: в этом режиме рисуется последовательность из одного или нескольких связанных отрезков. Если рисуется N отрезков, то вершин должно быть N+1.

d3dDevice->DrawPrimitive( D3DPT_LINESTRIP, 0, 5 );



Но правильным подходом, если требуется нарисовать каркасную модель из полигональной (т.е. представленной с помощью треугольников):

if(g_wireframe){

d3dDevice ->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);

}else{

g_d3d_device->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);

}

Описание примитивов вывода треугольников в OpenGL


Треугольники – важнейший, аппаратно поддерживаемый примитив визуализации. Нужны они для того, чтобы аппроксимировать поверхность, причем современные решения позволяют придавать отдельным текселам прозрачность, что корректно учитывается при удалении невидимых поверхностей с помощью Z- буфера, или полупрозрачность (что крайне затрудняет эту процедуру), и даже рельеф (так наз. Pixel shader displacement).

void CPrimView::Triangles()

{

glPushMatrix();

for(int i=0; I < 16;i++)

{

::glBegin(GL_TRIANGLES);

// скажем, присвоим готовые значения из массива


::glVertex3f(ax[i],ay[i],az[i]); ::glVertex3f(bx[i],by[i],bz[i]);

::glVertex3f(cx[i],cy[i],cz[i]);

::glEnd();

}


// размеры экрана по горизонтали и вертикали

::glTranslatef((GLfloat)vpW /2., (GLfloat)vpH /2.,0.0f);

::glPopMatrix();

}

}

Каждая тройка вершин рассматривается как независимый треугольник. Вершины (3n-2),(3n-1) и 3n в таком порядке определяют треугольник n. Если число вершин не кратно n, то оставшиеся (одна или две) игнорируются.

Другие режимы: GL_TRIANGLE_STRIP

::glBegin(GL_TRIANGLES);

// скажем, присвоим готовые значения из массива

::glVertex3f(ax[i],ay[i],az[i]);

В этом режиме рисуется группа связанных треугольников – полоса или лента. Первые три вершины определяют первый треугольник; вторая, третья и четвертая – второй и так далее. Для нечетного n вершины n, (n+1), и (n+2) определяют треугольник n. Для четного n треугольник определяют вершины (n+1), n и (n+2). Всего рисуется (n-2) треугольника.

GL_TRIANGLE_FAN

В этом режиме рисуется группа связанных треугольников – веер. Первые три вершины определяют первый треугольник, первая, третья и четвертая – второй и т.д. Вершины 1,(n+1),(n+2) определяют треугольник n. Всего рисуется (n-2) треугольника. Поскольку он исключен из DirectX10, описывать геометрию с его помощью не рекомендуется и в OpenGL: оптимизация может просто отсутствовать.

Описание примитивов вывода треугольников в DirectX


Треугольники – важнейший, аппаратно поддерживаемый примитив визуализации. Нужны они для того, чтобы аппроксимировать поверхность, причем современные решения позволяют придавать отдельным текселам прозрачность, что корректно учитывается при удалении невидимых поверхностей с помощью Z- буфера, или полупрозрачность (что крайне затрудняет эту процедуру), и даже рельеф (так наз. Pixel shader displacement).

Дан пример кода. Нужно будет объяснить, где что происходит (в примере могут отсутствовать комментарии на английском, но тут они есть…)


Например, есть функция InitVB, в которой описывается геометрия – список треугольников (она вызывается из wWinMain):


HRESULT InitVB()

{

// Initialize three Vertices for rendering a triangle

CUSTOMVERTEX Vertices[] =

{

{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color

{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },

{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },

};


// Create the vertex buffer. Here we are allocating enough memory

// (from the default pool) to hold all our 3 custom Vertices. We also

// specify the FVF, so the vertex buffer knows what data it contains.


Создали буфер g_pVB:


if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ),

0, D3DFVF_CUSTOMVERTEX,

D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )

{

return E_FAIL;

}



// Now we fill the vertex buffer. To do this, we need to Lock() the VB to

// gain access to the Vertices. This mechanism is required becuase vertex

// buffers may be in device memory.

VOID* pVertices;

if( FAILED( g_pVB->Lock( 0, sizeof( Vertices ), ( void** )&pVertices, 0 ) ) )

return E_FAIL;


скопировали в него данные, воспользовавшись указателем на место в буфере pVertices, куда копировать


memcpy( pVertices, Vertices, sizeof( Vertices ) );

g_pVB->Unlock();


return S_OK;


VOID Render() нарисует содержимое этого буфера g_pVB, сперва надо указать источник (source), формат, и явно D3DPT_TRIANGLELIST одного -1 единственного треугольника (или столько, сколько записали в буфер):


VOID Render()

{

// Clear the backbuffer to a blue color

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );


// Begin the scene

if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )

{

// Draw the triangles in the vertex buffer. This is broken into a few

// steps. We are passing the Vertices down a "stream", so first we need

// to specify the source of that stream, which is our vertex buffer. Then

// we need to let D3D know what vertex shader to use. Full, custom vertex

// shaders are an advanced topic, but in most cases the vertex shader is

// just the FVF, so that D3D knows what type of Vertices we are dealing

// with. Finally, we call DrawPrimitive() which does the actual rendering

// of our geometry (in this case, just one triangle).



g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );

g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );


// End the scene

g_pd3dDevice->EndScene();



// Present the backbuffer contents to the display

g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

}


Таким образом, указав режим вывода D3DPT_TRIANGLELIST,мы явным образом указали, что должны быть выведены треугольники из «списка треугольников». Список треугольников позволяет выводить как связанные, так и изолированные треугольники, в списке их должно быть не менее трех, а число треугольников должно делиться на три…


d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 4);


В этом режиме рисуется группа связанных треугольников – полоса или лента. Первые три вершины определяют первый треугольник; вторая, четвертый и третий – второй, третий, четвертый и пятый – третий, 4ый, 6ой и 5ый - четвертый. Обход четных треугольников – «особый», все вершины обходятся по часовой стрелке.

d3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 4 );



рисует треугольники веером, но этой команды нет в DirectX10.

Описание примитивов вывода четырехугольников в OpenGL


Четырехугольники (квады) можно вводить в ваше приложение на OpenGL помня, что они на определенных стадиях конвейера визуализации (скорее всего – «primitive setup», но могут и раньше) заменяются треугольниками. Обход вершин ни при каких условиях не должен быть в виде «восьмерки», а сам квад должен быть ПЛОСКИМ и ВЫПУКЛЫМ2!

Режим GL_QUADS

Каждая группа из четырех вершин рассматривается как независимый четырехугольник. Вершины (4n-3), (4n-2), (4n-1), (4n) определяют треугольник n. Если число вершин не кратно 4, оставшиеся игнорируются. Всего рисуется N/4 четырехугольника.

void CPrimView::Quads ()

{

::glPushAttrib(GL_POLYGON_BIT);

::glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)

glPushMatrix();


for(int i=0; I < 16;i++)

{

::glBegin(GL_TRIANGLES);

// скажем, присвоим готовые значения из массива


::glVertex3f(ax[i],ay[i],az[i]); ::glVertex3f(bx[i],by[i],bz[i]);

::glVertex3f(cx[i],cy[i],cz[i]);

::glVertex3f(dx[i],dy[i],dz[i]);


::glEnd();

}

::glPopMatrix();

::glPopAttrib();

}


Кроме рассмотренного, имеется еще один режим – GL_QUAD_STRIP. Он рисует связанную группу четырехугольников. Первые четыре вершины определяют первый четырехугольник, третья, четвертая, пятая и шестая вершины – второй и т.д. Вершины (2n-1),(2n),(2n+2),(2n+1) определяют четырехугольник n (зигзагом). Всего рисуется (n-2) квада.

В Direct3d аналогичной функции нет, нужно использовать треугольники.

Для отличников: в DirectX9 имеются индекс буферы, и команда IDirect3DDevice9::DrawIndexedPrimitive(…)

Можно в Вершинном буфере указать список вершин, а в Индекс буфере – тройки номеров из вершинного буфера (смещения от начала). Этот способ позволяет одну вершину задавать и обрабатывать один раз, а не несколько. Это – самый грамотный, учитывающий особенности современного аппаратного обеспечения, способ.

Описание примитивов вывода многоугольников в OpenGL.


Многоугольники можно вводить в ваше приложение на OpenGL помня, что они на определенных стадиях конвейера визуализации (скорее всего – «primitive setup», но могут и раньше) заменяются треугольниками. Обход вершин ни при каких условиях не должен быть в виде «восьмерки», а сам многоугольник должен быть ПЛОСКИМ и ВЫПУКЛЫМ!

Режим GL_POLYGON рисует отдельный выпуклый многоугольник, заданный вершинами от 1 до n.

void CPrimView::Polygon ()

{

::glBegin(GL_POLYGON);

for(int i=0; I < 16;i++)

::glVertex3f(ax[i],ay[i],az[i]);

::glEnd();

}

В Direct3d аналогичной функции нет, нужно использовать треугольники.

Для отличников:

Рисовать полигонами – вообще говоря не очень рационально, и сформированные таким образом ресурсы не просто использовать в приложениях на других API, конвертировать и т.п.

В современном OpenGL имеются индекс буферы. Можно в Вершинном буфере указать список вершин, а в Индекс буфере – последовательность треугольников в виде номеров из вершинного буфера (смещения от начала) по три штуки. Этот способ позволяет одну вершину задавать и обрабатывать один раз, а не несколько.

glGenBuffers (1, &m_IndexBuffer);
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, m_IndexBuffer);
glBufferData (GL_ELEMENT_ARRAY_BUFFER, 2 * m_numIndices, m_pIndices, GL_STATIC_DRAW);

when drawing...

/* setup your gl*Pointers as usual */
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER_ARB, m_IndexBuffer);
glDrawElements (shapes, m_numIndices, GL_UNSIGNED_SHORT, 0);
glBindBuffer (GL_ARRAY_BUFFER_ARB, 0);

Это – самый грамотный, учитывающий особенности современного аппаратного обеспечения, способ.



Описание команд перемещения, вращения и масштабирования объектов в OpenGL.


Для того, чтобы вывести объект в заданное место на экране, требуется указать расположение, направление и ориентацию камеры, а также параметры пирамиды видимости. Кроме того, надо расположить и сами объекты таким образом, чтобы они не только попали в пирамиду видимости, но и были верно расположены и друг относительно друга, и относительно камеры.

Вот для этого и необходимы команды перемещения, вращения и масштабирования. Для описания формы объектов используются вектора из четырех (обычно достаточно трех) элементов – координаты вершины треугольников. (Можно также указать направления нормалей, текстурные координаты, цвета вершин и т.д., но сейчас сосредоточимся на простейшем случае.) Чтобы определить новое, преобразованное положение точки, ее четвертую координату выбирают равной единице, и умножают на специальным образом сгенерированные матрицы 4*4. 3*3 элемента слева вверху это ортогональная матрица, она отвечает за поворот, а столбец из трех элементов (справа) – перемещения.

Для определения элементов матрицы текущего типа вызывается

команда

void glLoadMatrix[f d] (GLtype *m)


где m указывает на массив из 16 элементов типа float или double в соответствии с названием команды, при этом сначала в нем должен быть записан первый столбец матрицы, затем второй, третий и четвертый. Еще раз обратим внимание: в массиве m матрица записана по столбцам.


На лекциях не обсуждалась тема «стека матриц», так что коснемся лишь самих команд.


Поворот:


void glRotate[f d](

GL type angle,

GL type x,

GL type y,

GL type z)


Эта команда рассчитывает матрицу для выполнения вращения вектора против часовой стрелки на угол, определяемый параметром angle:

Матрица поворота имеет вид:

,

Она отвечает за поворот на угол angle против часовой стрелки вокруг вектора, направление которого задано точкой (x, y, z). Эта матрица вычисляется таким образом:

(учить не надо, просто для справки)

Текущая матрица (смотри функцию glMatrixMode) умножается на матрицу поворота, а затем результат этого произведения записывается в текущую матрицу. Таким образом, если M — текущая матрица, а R — матрица поворота, то матрица M будет заменена на M*R.

Если режим текущей матрицы GL_MODELVIEW или GL_PROJECTION, то все примитивы, нарисованные после вызова glRotate, будут соответствующим образом повернуты. Для сохранения старой системы координат (не повернутой) используйте функции glPushMatrix и glPopMatrix.

Перемещение:


void glTranslate[f d](

GL type x,

GL type y,

GL type z)

Функция glTranslate выполняет сдвиг текущей матрицы на вектор (x, y, z). Этот вектор сдвига используется для составления матрицы сдвига:

Текущая матрица (смотри функцию glMatrixMode) умножается на матрицу сдвига, а затем результат этого произведения записывается в текущую матрицу. Таким образом, если M — текущая матрица, а T — матрица сдвига, то матрица M будет заменена на произведение M*T.

Если режим текущей матрицы GL_MODELVIEW или GL_PROJECTION, то все примитивы, нарисованные после вызова glTranslate, будут соответствующим образом сдвинуты. Для сохранения старой системы координат (не сдвинутой) используйте функции glPushMatrix и glPopMatrix.

Масштабирование

В функции glScale вычисляется матрица масштабирования:

void glScale[f d](

GL type x,

GL type y,

GL type z)

Текущая матрица (смотри функцию glMatrixMode) умножается на матрицу масштабирования, а затем результат этого произведения записывается в текущую матрицу. Таким образом, если M — текущая матрица, а S — матрица масштабирования, то матрица M будет заменена на M*S.

Если режим текущей матрицы GL_MODELVIEW или GL_PROJECTION, то все примитивы, нарисованные после вызова glScale, будут соответствующим образом маштабированы. Для сохранения старой системы координат (не масштабированной) используйте функции glPushMatrix и glPopMatrix.



Коды ошибок:


Все эти функции порождают GL_INVALID_OPERATION если оказываются вызваны между glBegin и соответствующим ему вызову glEnd.

Описание команд перемещения, вращения и масштабирования объектов в DirectX.

Для того, чтобы вывести объект в заданное место на экране, требуется указать расположение, направление и ориентацию камеры, а также параметры пирамиды видимости. Кроме того, надо расположить и сами объекты таким образом, чтобы они не только попали в пирамиду видимости, но и были верно расположены и друг относительно друга, и относительно камеры.

Вот для этого и необходимы команды перемещения, вращения и масштабирования. Для описания формы объектов используются вектора из четырех (обычно достаточно трех) элементов – координаты вершины треугольников. (Можно также указать направления нормалей, текстурные координаты, цвета вершин и т.д., но сейчас сосредоточимся на простейшем случае.) Чтобы определить новое, преобразованное положение точки, ее четвертую координату выбирают равной единице, и умножают на специальным образом сгенерированные матрицы 4*4. 3*3 элемента слева вверху это ортогональная матрица, она отвечает за поворот, а столбец из трех элементов (справа) – перемещения.

На лекциях не обсуждалась тема «стека матриц», так что коснемся лишь самих команд.


Перемещение:


Translate - Эта команда рассчитывает матрицу для выполнения перемещения вектора (вершины) на расстояние, заданное вектором смещения:


HRESULT Translate(

FLOAT x,

FLOAT y,

FLOAT z

);


Пример:

D3DXMATRIX tmp;

D3DXMatrixTranslation( &tmp, x, y, z );

m_stack[m_currentPos] = m_stack[m_currentPos] * tmp;



Вращение:

RotateAxis - Эта команда рассчитывает матрицу для выполнения вращения вектора против часовой стрелки на угол, определяемый параметром angle:


HRESULT RotateAxis(

CONST D3DXVECTOR3 *pV,

FLOAT Angle

);


pV

[in] Указатель на произвольный вектор вращения. See D3DXVECTOR3.

Angle

[in] Угол вращения вокруг произвольного угла вращения, в радианах. Угол измеряется против часовой стрелки, если смотреть по направлению произвольного вектора к его началу.


Пример:

D3DXMATRIX tmp;

D3DXMatrixRotationAxis( &tmp, pV, angle );

m_stack[m_currentPos] = m_stack[m_currentPos] * tmp;

Масштабирование:


Scale - Эта команда рассчитывает матрицу для выполнения масштабирования вектора (вершины) на расстояние, заданное вектором масштабирования:


HRESULT Scale(

FLOAT x,

FLOAT y,

FLOAT z

);


Пример:

D3DXMATRIX tmp;

D3DXMatrixScaling(&tmp, x, y, z);

m_stack[m_currentPos] = m_stack[m_currentPos] * tmp;

Возвращаемые значения:

Если метод успешно выполнился- возвращается D3D_OK, (если завершается неудачно D3DERR_INVALIDCALL).

Компас 3D

Выбор и установка основных параметров для выполнения графической документации в графическом редакторе «Компас 3D». Форматы. Масштабы. Линии. Шрифты. Виды. Нанесение размеров.


При выполнении чертежей рекомендуется использовать такие основные параметры, которые используются системой Компас по умолчанию и соответствуют ГОСТ. Но некоторые из них можно изменить так:


Задание формата:

Меню Сервис –> Параметры –> Параметры -> Текущий чертеж –> Параметры первого листа –> Формат –> выбираем значение из ряда (A0…A5) и ориентацию.


Вид - составная часть чертежа системы КОМПАС-3D, "контейнер" для объектов чертежа, а также сами объекты, находящиеся в этом "контейнере".


Объекты, содержащиеся в одном виде, могут формировать как одно изображение (вид, разрез, сечение или выносной элемент), так и сразу несколько. В принципе, чертеж может состоять из одного-единственного вида, который будет содержать все необходимые изображения. Однако настоятельно рекомендуется разбивать всю графическую информацию в чертеже на виды, размещая каждое изображение в отдельном виде.


Вид можно создавать Вставка-> вид, например, «вид с модели», или «фрагмент».


Основными характеристиками вида являются масштаб и положение. Масштаб может быть выбран из стандартного ряда или задан как соотношение произвольных чисел. (Выбрать вид на чертеже –> правая кнопка-> масштаб из ряда)

Положение вида определяется координатами его точки привязки в абсолютной системе координат и углом поворота относительно этой точки.

В каждом виде можно создавать до 2 147 483 647 слоев для удобного размещения и обработки изображения.


Для управления стилем линии используется контекстное меню.

Линии:

На «компактной панели» Пиктограмма Геометрия –> Конкретный объект, например отрезок -> Появится контекстное меню, в котором можно выбрать стиль линии. «Стили линии» должны соответствовать «типам линий», предусмотренным ГОСТ.


Выбирая на компактной панели «Геометрия» соответствующую иконку, мы укажем, будет ли выведен отрезок, дуга окружности или окружности (используя центр и радиус, три точки и т.п. ), эллипс, прямоугольник или линию (составную), прямоугольник и т.п. Можно использовать и вспомогательную прямую – она бесконечная, и на чертеж не выводится.


Для нанесения размеров (упрощенно)

На «компактной панели» Пиктограмма Размеры -> выбираем соответствующий размер.


Выбор и установка привязок в графическом редакторе «Компас 3D». Установка точных расстояний и углов. Применение компактной панели: геометрия. Основные геометрические примитивы. Применение соответствующей панели свойств.


Для управления глобальными привязками служит панель Глобальные привязки. Чтобы включить нужную привязку, нажмите соответствующую кнопку. Пока кнопка находится в нажатом состоянии (птичка стоит), привязка будет действовать. Для выключения привязки следует отжать кнопку (снять птичку). В этой панели можно изменить угловую привязку.



Можно включать несколько различных глобальных привязок к объектам, и все они будут работать одновременно. При этом расчет точки выполняется "на лету", а на экране отображается фантом, соответствующий этой точке.


Чтобы изменить шаг сетки, используйтся диалог:

Параметры -> Система -> Графический редактор – Сетка


Типы размеров. Применение компактной панели: размеры


Для нанесения размеров следует воспользоваться «компактной панелью» размеры. Хотя мы можем явно выбирать, скажем, линейные размеры между – расстояние между двумя точками, диаметры или радиусы, а также угловые размеры, рекомендуется использовать «авторазмер», автоматически выбирающий требуемый тип размера.


Для некоторых типов размеров необходимо выполнить редактирование (кликнуть левой кнопкой чтобы выделить размер, затем правой – редактировать, кликнуть «текст» в контекстном меню -> изменить обозначение, например, вставить знак диаметра).



Нанесение размеров. Аксонометрические проекции


Описать последовательность действий для «смещения» размерной линии таким образом, чтобы они были параллельна осям СК.


Требования ЕСКД по выполнению графической документации в графическом редакторе «Компас 3D». Правила нанесения размеров.


Правила нанесения размеров на чертежах установлены ГОСТ 2.307—68.

Размеры на чертеже указывают размерными числами, размерными и выносными линиями. Размерные числа на чертежах, как правило, указывают в миллиметрах без указания единиц измерения. В тех случаях, когда необходимо применять другие единицы измерения длины, их показывают после размерного числа.

Размерная линия проводится параллельно отрезку, размер которого над ней наносится Допускается размерные линии проводить непосредственно к линиям видимого контура, осевым и центровым. В отдельных случаях размерная линия может проводиться не перпендикулярно выносной (этот трюк мы используем при простановке размеров в аксонометрии).

Размерные линии ограничивают стрелки (рис. 9). (Можно настроить) В отдельных случаях их проводят не полностью, а с обрывом стрелки с одной стороны.

Если длина размерной линии мала для размещения стрелок, то размерную линию продолжают за выносные линии.

Угловые размеры на чертежах проставляются в градусах, минутах и секундах с указанием единиц измерения. Размер угла наносят над размерной линией, которая проводится в виде дуги с центром в его вершине. Выносные линии в этом случае проводятся радиально (рис. 13).

При различных наклонах размерных линий размерные числа линейных размеров располагают так, как показано на рис. 14, а, а угловые размеры — как показано на рис. 14, б. Если размерная линия будет находиться в зоне, которая на чертеже заштрихована, размерные числа наносят на полках линий-выносок.

Если для написания размерного числа мало места над размерной линией или это место занято другими элементами изображения и вписать в него размерное число невозможно, размерное число наносят по одному из вариантов, приведенных на рис. 16. /размерные числа наносят на полках линий-выносок./

С целью упрощения ряда изображений, создания удобств для чтения чертежа стандарт предусматривает применение условных обозначений в виде букв латинского алфавита и графических знаков, которые ставятся перед размерными числами. На чертежах применяются знаки и буквы для обозначения диаметра и радиуса, длины дуги и квадрата, уклона и конусности, сферы, толщины и длины детали.



Типы обозначений на чертежах: текст, разрезы и сечения, вид, выноски, выносной элемент и другие обозначения. Применение компактной панели: обозначения. Применение соответствующей панели свойств.

Чтобы ввести текст в основной надписи, следует дважды кликнуть основную надпись, а дальше достаточно поместить курсор в требуемую ячейку, и вводить текст.

Для того, чтобы ввести текст на чертеже, используется компактная панель «обозначения», а в ней выбирается «Ввод текста». В контекстном меню можно выбрать высоту шрифта и (или) его параметры.

Используя компактную панель «обозначения» можно выбирать стрелку взгляда для обозначения вида, указать линию разреза и сечения, обозначить выносной элемент.

Кроме того, можно выбрать обозначения шероховатости, отформатировать таблицы, указывать позиции на сборочных чертежах и т.п. Для вводимых обозначений существую свои контекстные панели свойств, облегчающие ввод информации в них.

Работу можно упростить, используя копирование уже введенных обозначений.


Измерения на чертежах. Применение компактной панели: измерение. Применение соответствующей панели свойств.


Редактор Компас может использоваться не только на стадии подготовки КД, но и на стадиях проектирования, когда выполняются геометрические построения на плоскости и в пространстве. И в процессе проектирования может возникнуть множество задач, когда требуются измерения, и, на основе измеренных параметров, принимаются те или иные конструкторские решения. Аналогичные задачи могут возникнуть и при подготовке технологической документации по готовым чертежам, представленным в электронном виде.

Воспользовавшись компактной панелью: «измерение» можно найти:

Координаты точек

Расстояния между двумя точками

Расстояния между двумя точками на кривой

Расстояния между точкой и кривой

Расстояния между двумя кривыми

Угол между двумя прямыми

Угол по трем точкам

Длина кривой

Площадь

Расчет МЦХ плоских фигур (масс – центровочные характеристики)

Важно отметить, что измерения могут выполняться без учета выбранного масштаба. Но скопировав вид, и задав для него масштаб 1:1, можно получить точные измерения.



Редактирование на чертежах: сдвиг, поворот, масштабирование, симметрия и другие.

Применение компактной панели: редактирование. Применение соответствующей панели свойств

Воспользовавшись компактной панелью «редактирование», можно выполнить любое аффинное преобразование любого объекта. Это преобразования, задаваемые матрицей 2*3 к координатам, к которым добавлена 1, и при умножении учитывается вектор смещения. Редактирование объекта, может сводиться к созданию нового объекта без, или с удалением исходного.

Список операций:



Операции редактирования удобно выполнять, задействуя те или иные команды «глобальных привязок» - например, найти ось симметрии с помощью «середины отрезка».




Описание общей структуры текстового файла VRML

Элементы заголовка внутри скобок < > являются обязательными. Элементы в квадратных скобках можно использовать при необходимости. Запомните, что слова #VRML и V2.0 должны быть разделены только одним пробелом, также V2.0 и <кодировка>. После кодировки может сразу идти перенос строки или любое количество разделителей в виде пробелов или табуляций, после них текст комментария и, как обязательный элемент, <перенос строки>. Грубо говоря все, что идет после кодировки браузер может игнорировать до переноса строки.

Поле кодировка должно содержать название кодировки, которое будет использоваться для текстовых элементов мира. Пока разбираться с этим полем не будем, оставим на потом. Будем использовать общепринятое значение для него - utf8, эта кодировка известна как Unicode или универсальный алфавит.

В языке VRML каждая строка, начинающаяся со знака #, считается комментарием и игнорируется браузером. Данный символ имеет значение только для заголовка файла.


#VRML V2.0 utf8 ####################################
# Выполнил студент 1715 группы Петров С.Ю., 09.03.2004
# файл g171501s3.wrl


Имена

Как и в любом другом языке, в VRML вы можете использовать имена для различных объектов. Имена могут быть практически любыми, но на них все же существуют некоторые ограничения:

  1. Имена в языке регистро-зависимые (точно также, как в С++).

  2. В именах можно использовать только первую половину кодовой тавлицы. Т.е. имена состоящие из русских букв нельзя.

  3. Нельзя использовать управляющие символы от 0 до 32. Впрочем это и понятно, так как использовать их неудобно.

  4. Имена не должны содержать синтаксических символов, которые используются в языке. К этим символам относятся "#',.[\]{}.

  5. Имена не должны начинаться с цифр, впрочем это ограничение существует во всех языках программирования.

Используя эти правила вы можете составлять любые имена, только помните первое правило.

Узлы

Все трехмерные миры, создаваемые с помощью VRML, могут содержать сотни и тысячи объектов. Под объектами мира понимаются не только все трехмерные тела в мире, но и любые звуки, изображения и тексты. Все такие объекты в VRML носят название узлы(nodes). Связано это с тем, что весь трехмерный мир представляет собой дерево объектов.

Все узлы делятся на три типа:

  1. Группировочные

  2. Конечные

  3. Вспомогательные

Например: геометрические – цилиндры, конусы, шары, боксы. Или положение камеры, или шрифты…


узлы и Coordinate и IndexedFaceSet


Group {
children [
Shape {
appearance Appearance {
material DEF _DefMat Material {
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [
# Массив точек #############
0.0 0.0 0.0,
0.0 20.0 10.0,
90.0 20.0 10.0,
90.0 20.0 30.0,
70.0 20.0 30.0,
и так далее
20.0 60.0 50.0,
20.0 60.0 30.0,
0.0 60.0 30.0
############################
]
}
solid FALSE
creaseAngle 0.5
coordIndex [
# Массив граней ########
1, 2, 14, 13, -1,
2, 3, 15, 14, -1,
3, 4, 16, 15, -1,
и так далее
13,14, 15, 24, -1,
16,17, 18, 19, -1,
20,21, 22, 23, -1
#########################
]
}
}
]
}



Виртуальная Java машина и графика в Java.

Java-апплет— программный компонент, который передается сервером в составе web-страницы и выполняется на стороне пользователя Интернет. Программы на Java обычно передаются на целевую машину в виде байт-кода, который перед исполнением транслируется в машинный код «на лету» — с помощью JIT-компиляции.

Байт-код (англ. byte-code),— машинно-независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. (Хотя и возможно создание процессоров, для которых данный байт-код является непосредственно машинным кодом (такие процессоры существуют, например, для Java и Forth)).

Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Трансляция в байт-код занимает промежуточное положение между компиляцией в машинный код и интерпретацией.

Байт-код называется так, потому что длина каждого кода операции — один байт, но длина кода команды различна. Каждая инструкция представляет собой однобайтовый код операции от 0 до 255, за которым следуют такие параметры, как регистры или адреса памяти. Это в типичном случае, но спецификация байт-кода значительно различается в языке.

Программа на байт-коде обычно выполняется интерпретатором байт-кода (обычно он называется виртуальной машиной, поскольку подобен компьютеру). Преимущество — в портируемости, т. е. один и тот же байт-код может исполняться на разных платформах и архитектурах. То же самое преимущество дают интерпретируемые языки.

Достоинство подобного способа выполнения программ — в полной независимости байт-кода от ОС и оборудования, что позволяет выполнять Java-приложения на любом устройстве, которое поддерживает виртуальную машину. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание. Это позволяет пользователям загружать программы, написанные на Java, на их компьютеры (или другие устройства, например, мобильные телефоны) из неизвестных источников, при этом не опасаясь заражения вирусами, пропажи ценной информации, и т. п.


Базовая графика в Java основана на двух абстрактных классах Graphics и Graphics2D. К функциям и конструкторам графических классов относятся такие функции, как:


import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;
public class g1511XXs1_a1 extends Applet {
public void init() {
///init()
JButton button1=new JButton("JButton построить");
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
//
int x0,y0,i; x0=110;y0=110;
// 1. Ввод значений исходных данных
int n=14;
int[] xn= { 40, 0,20,40, 0,20,25,22,22,25,18,18,15,15};
int[] yn={ 10,10,40,10,10,40,22,22,25,28,28,22,22,28};
int[] zn={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int[] xk={ 0,20,40,20,20,20,22,22,25,22,18,15,15,18};
int[] yk={ 10,40,10,20,20,20,22,25,28,28,22,22,28,28};
int[] zk={ 0, 0, 0,40,40,40, 0, 0, 0, 0, 0, 0, 0, 0};
// 2. получение указателя на поверхность рисования
Graphics canvas= getGraphics();
// вычерчивание рамки формата А4
:

canvas.drawString(" Ортогональные проекции",25,270);

// Оси координат и их обозначение
:


Color c3=Color.RED;

canvas.setColor(c3);
// Основные циклы вычислений проекции XOY -горизонтальной проекции
for(i=0;i&ltn;i++){ canvas.drawLine(x0-xn[i],y0+yn[i],x0-xk[i],y0+yk[i] );};
// Основные циклы вычислений проекции XOZ - фронтальной проекции
for(i=0;i&ltn;i++){ canvas.drawLine(x0-xn[i],y0-zn[i],x0-xk[i],y0-zk[i] );};
// Основные циклы вычислений проекции ZOY - профильной проекции
for(i=0;i&ltn;i++){ canvas.drawLine(x0+yn[i],y0-zn[i],x0+yk[i],y0-zk[i] );};
}
} );
this.add(button1);
//////////////////////////
} ///init()
}

button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event) {
// Графическая часть программы
}
}

Язык C#, базовая графика.

C# (Си-шарп) — объектно-ориентированный язык программирования для платформы .NET. Разработан в 2000 году Андерсом Хейлсбергом, Скоттом Вилтамутом и Питером Гольде под эгидой Microsoft Research. Основным постулатом С# является высказывание: "всякая сущность есть объект". Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода.

C# — это полнофункциональный объектно-ориентированный язык, который поддерживает инкапсуляцию, наследование и полиморфизм. Он имеет прекрасную поддержку компонентов, надежен и устойчив благодаря использованию «сборки мусора», обработки исключений, безопасности типов.

Язык C# разрабатывался "с нуля" и вобрал в себя много полезных свойств таких языков, как C++, Java, Visual Basic, а также Pascal, Delphy и др. При этом необходимость обратной совместимости с предыдущими версиями отсутствовала, что позволило языку C# избежать многих отрицательных сторон своих предшественников.

Как и Java, C# разрабатывался для Интернет и примерно 75% его синтаксических возможностей аналогичны языку программирования Java, его также называют «очищенной версией Java. 10% подобны языку программирования C++, а 5% – заимствованы из языка программирования Visual Basic. Объем новых концептуальных идей в языке C# около 10%.

C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Common Language Runtime (CLR) — «общеязыковая исполняющая среда» — компонент пакета Microsoft .NET Framework, виртуальная машина, на которой исполняются все языки платформы .NET Framework.

CLR интерпретирует3 и исполняет код на языке IL (реализация компиляции которого компанией Microsoft называется MSIL), а также предоставляет MSIL-программам (а следовательно, и программам, написанным на языках высокого уровня, поддерживающих .NET Framework) доступ к библиотеке классов .NET Framework, или так называемой .NET FCL (англ. Framework Class Library).

Для работы с С# используется среда программирования Visual Studio 2008 Express Edition или полноценная среда разработки Visual Studio 2008.

Пространства имен4 в C# для работы с графикой следующие:

System.Drawing; System.Drawing.Drawing2D; System.Drawing.Imaging; System.Drawing.Printing; System.Drawing.Text.

При автоматическом создании приложения с использованием образца (template ) Windows Forms эти пространства имен импортируются в начале исходного файла.

Пример обработчика сообщения при нажатии кнопки button1:

private void button1_Click(object sender, System.EventArgs e)
{

int x0,y0,i; x0=110;y0=110;
/* 1. Ввод значений исходных данных */
int n=14;
int[] xn={ 40, 0,20,40, 0,20,25,22,22,25,18,18,15,15};
// и далее по методичке yn, zn, xk, yk, zk

/* 2. Инициализация графики */
Graphics canvas= Graphics.FromHwnd(this.Handle);
// где canvas - любое свое имя идентификатора для указателя
float w0=2.0f; Pen pen=new Pen(Color.Red,w0);
// выбор пера (Pen) для рисования линии
SolidBrush b=new SolidBrush(Color.FromArgb(150,0,0,255));
// выбор кисти (Brush) для рисования текста
// и далее по методичке

/* 3. Вычерчивание рамки, осей координат, и вывод надписей*/
canvas.DrawRectangle(pen2,2,2,210,297);
// и так далее DrawLine
/* Обозначения осей координат и надписи*/
canvas.DrawString(" ось X",new Font("Areal",15),b,x0-70,y0+10);
// и так далее DrawString

/* 4. Основные циклы вычислений */
/* Основные циклы вычислений проекции XOY*/
for(i=0;i&ltn;i++)
{
canvas.DrawLine(pen,x0-xn[i],y0+yn[i],x0-xk[i],y0+yk[i]);
};
// и далее по методичке
// /* Основные циклы вычислений проекции XOZ*/
// /* Основные циклы вычислений проекции YOZ*/
// /* Основные циклы вычислений аксонометрической проекции*/

}


Написать последовательность действий в графическом редакторе «Компас- 3D» для создания трехмерной модели детали с выдавливанием (по карте с заданием).


Начинаем с команды «операция выдавливания» - пиктограмма с кубиком, и используем «приклеить выдавливанием» (пиктограмма с кубиком, из него торчит второй кубик).


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

Команда доступна, если выделен один эскиз.

Для вызова команды нажмите кнопку Операция выдавливания на инструментальной панели редактирования детали или выберите ее название из меню Операции.


С помощью списка Направление вкладке Параметры Панели свойств задайте направление, в котором требуется выдавливать эскиз.

Выберите способ определения глубины выдавливания из списка Способ.

Введите величину, характеризующую глубину выдавливания, в поле Расстояние на вкладке Параметры.

Чтобы подтвердить выполнение операции, нажмите кнопку Создать объект на Панели специального управления.


Написать последовательность действий в графическом редакторе «Компас- 3D» для создания трехмерной модели детали и «приклеиванием» части детали (по карте с заданием).


Написать последовательность действий в графическом редакторе «Компас- 3D» для создания трехмерной модели детали с вырезанием (по карте с заданием).


Начинаем с команды «операция выдавливания» - пиктограмма с кубиком, используем

«приклеить выдавливанием» (пиктограмма с кубиком, из него торчит второй кубик) для построения тела.


Удаление материала детали - это вырезание формообразующих элементов из тел.

Вырезание формообразующего элемента начинается с создания его эскиза.


После того, как создание эскиза завершено, необходимо указать, каким способом требуется перемещать эскиз в пространстве для получения элемента нужного типа, т.е. выбрать вид формообразующей операции.


Отличие операций удаления материала от операций добавления состоит в том, что результатом удаления является не создание нового тела или объединение тел, а вычитание или пересечение.


(для чего используем иконку «вырезать выдавливанием» )


Требования ЕСКД по выполнению графической документации в графическом редакторе «Компас 3D». Форматы. Масштабы. Линии. Шрифты.

Изображения- виды, сечения, разрезы.


Вид- изображение обращенной к наблюдателю видимой части поверхности предмета. Для уменьшения количества изображений допускается на видах показывать необходимые невидимые части поверхности предмета при помощи штриховых линий.


Устанавливаются следующие названия видов, получаемых на основных плоскостях проекций:

1-     вид спереди (главный вид);

2-     вид сверху;

3-     вид слева;

4-     вид справа;

5-     вид снизу;

6-     вид сзади.  

Названия видов на чертежах надписывать не следует, за исключением случая, когда виды сверху, слева, справа, снизу, сзади не находятся в непосредственной проекционной связи с главным изображением (видом или разрезом, изображенным на фронтальной плоскости проекций). 


Сечение - изображение фигуры, получающейся при мысленном рассечении предмета одной или несколькими плоскостями. На сечении показываются только то, что получается непосредственно в секущей плоскости. Штриховка частей предмета, расположенной в секущей плоскости, осуществляется тонкими сплошными линиями под углом 45О к линии рамки чертежа. Применение сечений сокращает графическую работу при выполнении чертежа.

Сечения в зависимости от расположения на чертеже делятся на вынесенные и наложенные.


Принцип выполнения разрезов заключается в том, что условно представляют отсеченной и отнятой одну из частей детали так, что становится ясно внутреннее очертание оставшейся части детали. При этом линии невидимого контура станут видимыми и будут изображаться сплошными основными линиями.


Требования ЕСПД по выполнению программной документации, алгоритмов и блок-схем.

Написать фрагмент программы с исходными координатами, и объяснить последовательность действий для вывода изображения на примере равносторонней пирамиды средствами OpenGL.

При необходимости вставить данный фрагмент в исходный код программы и перекомпилировать исполняемый файл. (Например, модель равносторонней шестигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Выполнить на компьютере двухмерный чертеж детали по выданному двухмерному эскизу по требованиям ЕСКД.


Написать массив исходных координат, фрагмент программы и объяснить последовательность действий для вывода ортогональных проекций средствами базовой графики по заданию в билете. (Например, модель равносторонней пятигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Написать массив исходных координат, фрагмент программы и объяснить последовательность действий для вывода аксонометрический проекций средствами базовой графики по заданию в билете. (Например, модель равносторонней шестигранной пирамиды. Основание пирамиды вписано в окружность радиусом 40 пикселей.)


Написать фрагмент программы с исходными координатами, и объяснить последовательность действий для вывода изображения на примере равносторонней пирамиды средствами OpenGL. При необходимости вставить данный фрагмент в исходный код программы и перекомпилировать исполняемый файл. (Например, модель равносторонней пятигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Написать фрагмент программы с массивом исходных координат и объяснить последовательность действий для вывода изображения равносторонней пирамиды средствами VRML. Вставить данный фрагмент в программу. (Например, модель равносторонней шестигранной пирамиды. Основание пирамиды вписано в окружность радиусом 40 пикселей.)


Написать фрагмент программы с исходными координатами, и объяснить последовательность действий для вывода изображения на примере равносторонней пирамиды средствами OpenGL. При необходимости вставить данный фрагмент в исходный код программы и перекомпилировать исполняемый файл. (Например, модель равносторонней шестигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Написать фрагмент программы с массивом исходных координат и объяснить последовательность действий для вывода изображения равносторонней пирамиды средствами VRML. Вставить данный фрагмент в программу. (Например, модель равносторонней шестигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Написать последовательность действий в графическом редакторе «Компас- 3D» для создания трехмерной модели детали с осью вращения (по карте с заданием).


Написать массив исходных координат, фрагмент программы и объяснить последовательность действий для вывода аксонометрический проекций средствами базовой графики по заданию в билете. (Например, модель равносторонней шестигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Написать массив исходных координат, фрагмент программы и объяснить последовательность действий для вывода ортогональных проекций средствами базовой графики по заданию в билете. (Например, модель равносторонней семигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Написать массив исходных координат, фрагмент программы и объяснить последовательность действий для вывода аксонометрический проекций средствами базовой графики по заданию в билете. (Например, модель равносторонней семигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)


Написать массив исходных координат, фрагмент программы и объяснить последовательность действий для вывода ортогональных проекций средствами базовой графики по заданию в билете. (Например, модель равносторонней восьмигранной пирамиды. Основание пирамиды вписано в окружность радиусом 50 пикселей.)

1 Совсем на пятерку – объяснить, что делают эти команды…

2 Если он и не плоский – будут все равно два плоских треугольника. Но вот как квады будут разбиты – не совсем очевидно.

3 Промежуточный язык Microsoft (MSIL) разделяет с байт-кодом Java идею низкоуровневого языка с простым синтаксисом (базируюшегося на числовых кодах вместо текста), который может быть очень быстро транслирован в родной машинний код. Наличие этого кода с четко определенным универсальным синтаксисом дает ряд существенных преимуществ. Это значит, что файл, содержащий инструкции бакт-кода, может быть размещен на любой платформе; во время исполнения финальная стадия компиляции может быть легко осуществлена, что позволит выполнить код на конкретной платформе. Другими словами, компилируя в IL, вы получаете платформенную независимость .NET.

4 Пространства имен (namespaces) предоставляют программистам возможность логичной взаимосвязи классов и других типов. Само понятие namespaces скорее является логическим, нежели физическим (например как файл или компонент). Каждый раз когда вы обьявляете класс в C# - у вас есть возможность добавить его в пространство имен. Когда станет необходимо расширять функциональную часть программы - вы с легкостью сможете добавить несколько логически обьединенных классов в одно пространство имен.