Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КГ - лекции Польского.doc
Скачиваний:
32
Добавлен:
06.11.2018
Размер:
1.3 Mб
Скачать

1.3. Описание сцены и его машинное представление

Сцена – набор объектов (в т.ч. источников света) которые нужно отобразить (или которые получаются при распознавании).

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

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

1. Пространственное расположение и форма – геометрия объекта и некоторые атрибуты цвет, текстура.

2. Топология (связность с другим объектом).

Существуют два основных способа задания геометрии моделей:

1. Конструктивное (Constructive solid geometry or CSG) .

2. Граничное либо поверхностное (Boundary representation or Brep). Тела задаются поверхностями, которые ограничены.

Представление CSG моделей .

С таким подразбиением можно проводить набор операций:

а) пересечение;

б) объединение;

в) вычитание;

К CSG можно отнести воксельное задание геометрии. Voxel –элемент объема по аналогии с pixel. Когда объем, в котором находится модель, разбивается на кубики, для каждого кубика определяется его положение относительно модели (внутри, снаружи или на поверхности) и свойства материала (цвет, прозрачность и т.д.).

Представление поверхностных моделей.

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

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

Лекция 2

Использование графических интерфейсов.

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

Схема работы приложения:

  1. Инициализация графического интерфейса

  2. Работа с графическим интерфейсом (подготовительные действия, построение изображения, завершающие действия)

  3. Освобождение графического интерфейса

Инициализация графического интерфейса – это переключение в графический режим из текстового (для DOS) (BC:initgraph, VESA: mov ah,4Fh, int 10h), создание окна (для Windows), создание буфера для формирования изображения (BackBuffer, страницы видеопамяти), получение адреса буфера изображения, размеров окна и формата пикселов (размеров скан-линии), инициализация дополнительных интерфейсов (DDraw, D3D, OPENGL).

Освобождение графического интерфейса – это освобождение дополнительных интерфейсов (DDraw, D3D, OPENGL), удаление буфера для формирования изображения, переключение обратно в текстовый режим (для DOS) (BC:closegraph), удаление окна (для Windows).

Подготовительные действия – это очистка BackBuffer-а, его блокирование (Lock) для записи (DDraw), подготовка 3D-интерфейсов.

Завершающие действия – это разблокирование BackBuffer-а, выполнение 3D-интерфейсов, копирование BackBuffer-а на экран.

Функции GUI:

//Инициализация графического интерфейса -

int driver = EGA; int mode = EGAHI; int res;

initgraph ( &driver, &mode, "" );

if ( ( res = graphresult () ) != grOk )

{ printf("\nGraphics error: %s\n", grapherrormsg ( res) ); exit ( 1 ); }

for ( int frame = 0;; frame++ )

{

setactivepage ( frame &1 ); // переключение страниц

setvisualpage (1 – (frame &1) );

clearviewport (); // очистка

line(frame% getmaxx (),0, getmaxx (),getmaxy ()); // размеры окна

if ( kbhit () ) { getch (); break; }

}

// Завершающие действия

closegraph ();

Для WinAPI (application programming interface) – свои функции рисования. Например, чтобы нарисовать линию нужно вызвать две функции MoveToEx и LineTo.

Нужно отметить, что точка 0,0 обычно находится в верхнем левом углу окна.

Работа с видеобуфером.

Видеобуфер – область памяти (либо системного ОЗУ, либо на видеокарте), в которой хранится информация о цвете пикселей. На пиксель как правило отводится определенное количество бит (называемое BPP) например для BPP = 16 для режима 565. Пиксели хранятся построчно, но размер строки (BPL) не всегда равен BPP*Width/8, поэтому он обычно получается отдельно при инициализации. Доступ к пикселу (x,y) по формуле Addr+y* BPL+x*(BPP/8). В примерах есть функция writePixel, устанавливает пиксел с заданными координатами в заданный цвет.