Чтение онлайн

на главную

Жанры

Журнал «Компьютерра» №45 от 01 декабря 2005 года
Шрифт:

Вот рабочее пространство и готово, можно приступать к рисованию. В OGL все примитивы для обрисовки должны находиться между вызовами glBegin и glEnd, некоторым их аналогом в D3D являются d3d_Device-›BeginScene и d3d_Device-›EndScene . В случае с OGL уже можно привести фрагмент кода, выполняющий нашу задачу:

glBegin(GL_TRIANGLES);

glColor3d(1,0,0);

glVertex3d(1,2,3);

glColor3d(0,1,0);

glVertex3d(4,5,6);

glColor3d(0,0,1);

glVertex3d(7,8,9);

glVertex3d - это вершины нашего треугольника, Название функции интуитивно понятно, но 3d, как ни странно, не означает «трехмерный»; точнее, 3 - как раз означает, а вот d - это тип аргументов (double). GL_TRIANGLES указывает, что все последующие вершины будут последовательно образовывать треугольники (если бы

у нас было не три, а шесть вершин - получилось бы два треугольника). glColor3d принимает на вход цветовые компоненты RGB, и все вершины, идущие после него и до следующего вызова glColor, будут иметь соответствующий цвет.

В D3D перед рисованием необходимо подготовить специальную структуру данных:

struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color;};

CUSTOMVERTEX g_Vertices[] =

{1, 2, 3, 1, 0xffff0000},

{4, 5, 6, 1, 0xff00ff00},

{7, 8, 9, 1, 0xff0000ff},

LPDIRECT3DVERTEXBUFFER8 p_VertexBuffer = NULL;

Эта структура содержит и координаты вершин, и их цвета. p_VertexBuffer - указатель на нашу структуру, для хранения вершин.

Теперь напишем следующее:

d3d_Device-›CreateVertexBuffer (3*sizeof(CUSTOMVERTEX),

0, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, amp;p_VertexBuffer);

VOID* pVertices;

p_VertexBuffer-›Lock (0, sizeof(g_Vertices), (BYTE**) amp;pVertices, 0);

memcpy (pVertices, g_Vertices, sizeof(g_Vertices));

p_VertexBuffer-›Unlock;

CreateVertexBuffer - выделяет место на устройстве под три вершины (3*sizeof(CUSTOMVERTEX),) и присваивает его нашему указателю (p_VertexBuffer). Далее «запираем» (Lock) буфер вершин, чтобы случайно его не повредить. Копируем весь наш буфер (memcpy) в буфер видеокарты. И снова разрешаем доступ (Unlock;).

И наконец, мы готовы к рисованию:

d3d_Device-›BeginScene ;

d3d_Device-›SetVertexShader (D3DFVF_CUSTOMVERTEX);

d3d_Device-›SetStreamSource (0, p_VertexBuffer, sizeof(CUSTOMVERTEX));

d3d_Device-›DrawPrimitive (D3DFVF_XYZRHW | D3DFVF_DIFFUSE, 0, 1);

d3d_Device-›EndScene ;

SetVertexShader определяет тип вершин. SetStreamSource задает поток для дальнейшей работы. Здесь 0 - номер потока, второй параметр - данные, которые присваиваются к этому потоку, и третий параметр - размер, занимаемый в памяти одной вершиной. DrawPrimitive - рисует примитивы на экране, принимает на вход (в порядке следования) тип примитивов для отрисовки, индекс первой вершины, с которой нужно начать рисование, и количество примитивов в последовательности.

ТЕХНОЛОГИИ: Весь фокус в фокусе

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

В этом году группа из шести исследователей - Рена Н’ (да-да, именно такая фамилия, он держит фотокамеру на снимке справа), Марка Левоя, Мэтью Брэди, Марка Хоровитца, Пата Генрегана и основателя студии «Дюваль Дизайн» Рене Дюваля - предложила работающий прототип «фотокамеры будущего». Новый фотоаппарат, утверждают разработчики, позволяет делать специальные «четырехмерные» фотоснимки, из которых путем вычислений можно получать самые обычные цифровые отпечатки, но точку фокусировки можно менять уже после съемки.

Звучит невероятно? Однако это истинная правда. Более того, с такими снимками можно ознакомиться на сайте разработчиков. Снаружи чудо-камера выглядит точно так же, как и обычная цифровая, и все отличие заключено в оптической системе и алгоритме работы встроенного программного обеспечения. Группа экспериментировала со специально переделанной среднеформатной камерой Kodak DCS 645M, используя 16,6-мегапиксельную цифровую матрицу Kodak KaF-16802CE. Выбор столь дорогого образца разработчики объясняют просто: чтобы получить доступ к матрице, нужна была модель со съемной

задней панелью. Такая конструкция бывает только у профессиональных фотокамер, в которых предусмотрена возможность замены не только объектива, но и «задника» с пленкой или CCD-матрицей.

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

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

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

Можно сказать, что «внутри» одного такого изображения хранится как бы «стопка» фотографий с разрешением хоть и ниже исходного разрешения матрицы (теперь оно равно размеру матрицы микролинз[Разработчики замечают, что, жертвуя высокой резкостью итогового изображения, можно получать снимки и более высокого разрешения, как это делается в современных сканерах]), но каждое из которых сфокусировано по-своему. Пространство сцены как бы нарезано на вертикальные слои - подобно множеству изображений, полученных одновременно при разной настройке фокуса объектива и закодированных внутри снимка. Размер «стопки» пропорционален количеству засвеченных точек под каждой микролинзой. Однако это не значит, что каждая такая точка что-то значит сама по себе. Чтобы увидеть любую фотографию из «стопки», необходимо смотреть на записанное изображение через такую же оптическую систему с микролинзами, какая использовалась при начальной экспозиции. Настраивая фокус объектива «просмотрщика», мы сможем выбирать любую фотографию из «стопки». То есть каждая микролинза формирует только одну точку результирующего изображения на основе всех находящихся под ней точек (рис. 2).

Поделиться:
Популярные книги

Неудержимый. Книга III

Боярский Андрей
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга III

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Звезда сомнительного счастья

Шах Ольга
Фантастика:
фэнтези
6.00
рейтинг книги
Звезда сомнительного счастья

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Сумеречный Стрелок 3

Карелин Сергей Витальевич
3. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 3

Вечная Война. Книга V

Винокуров Юрий
5. Вечная Война
Фантастика:
юмористическая фантастика
космическая фантастика
7.29
рейтинг книги
Вечная Война. Книга V

Ты нас предал

Безрукова Елена
1. Измены. Кантемировы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты нас предал

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

Ночь со зверем

Владимирова Анна
3. Оборотни-медведи
Любовные романы:
любовно-фантастические романы
5.25
рейтинг книги
Ночь со зверем

Измена. За что ты так со мной

Дали Мила
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. За что ты так со мной

Неожиданный наследник

Яманов Александр
1. Царь Иоанн Кровавый
Приключения:
исторические приключения
5.00
рейтинг книги
Неожиданный наследник

Аромат невинности

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
эро литература
9.23
рейтинг книги
Аромат невинности

Проклятый Лекарь. Род III

Скабер Артемий
3. Каратель
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь. Род III

Лисья нора

Сакавич Нора
1. Всё ради игры
Фантастика:
боевая фантастика
8.80
рейтинг книги
Лисья нора