На правах рекламы:
ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Авторитетность издания

ВАК - К1
RSCI, ядро РИНЦ

Добавить в закладки

Следующий номер на сайте

4
Ожидается:
09 Декабря 2024

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

Realization of a stereo mode for various devices of display in a real-time mode
Статья опубликована в выпуске журнала № 2 за 2010 год.
Аннотация:В статье подробно рассматриваются алгоритмы реализации в реальном времени стереорежима в различных форматах, используемых в устройствах стереоотображения. В число рассмотренных систем и технологий стерео-отображения входят системы с анаглифическими, а также с затворными очками, поляризационные проекционные системы, мониторы с чересстрочной стереотехнологией и автостереоскопические мониторы Philips 3D Solutions.
Abstract:Algorithms of realization of a stereo mode in a real time for the various formats used in different devices of stereo visualization are in detail considered. The number of considered systems and technologies of stereo visualization includes anaglyph systems, shutter-glasses systems, polarizing projective systems, monitors with interlaced technology of stereo and autostereoscopic monitors Philips 3D Solutions
Авторы: Торгашев М.А. (mtorg@mail.ru) - НИИСИ РАН, г. Москва, Москва, Россия, кандидат физико-математических наук
Ключевые слова: стереоформаты, алгоритмы трехмерной визуализации в реальном режиме времени, технологии стереоскопического отображения, стереорежим
Keywords: stereo formats, algorithms of 3D visualization in a real-time mode, technologies of stereoscopic display, stereo mode
Количество просмотров: 11733
Версия для печати
Выпуск в формате PDF (4.97Мб)
Скачать обложку в формате PDF (1.38Мб)

Размер шрифта:       Шрифт:

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

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

Системы с анаглифическими очками

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

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

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

Алгоритм формирования стереоизображения в формате простого цветного анаглифа.

1.   Очищаем экран (буферы глубины и цвета).

2.   Блокируем запись в каналы G и B (в OpenGL с помощью функции glColorMask(1, 0, 0, 0)).

3.   Формируем изображение сцены, соответствующее левому глазу.

4.   Очищаем буфер глубины.

5.   Блокируем запись в канал R (в OpenGL с помощью функции glColorMask(0, 1, 1, 0)).

6.   Формируем изображение сцены, соответствующее правому глазу.

Использование стандартного алгоритма, однако, обеспечивает посредственную цветопередачу. Многие цвета воспринимаются со значительными искажениями либо вовсе теряются, например, такие проблемы возникают для чистого красного и чистого голубого цветов. В [2] предложен метод цветовой фильтрации для распространенных красно-голубых очков, основанный на минимизации среднеквадратической ошибки в цветовом пространстве CIE стандартных LCD-мониторов. Пусть CL – цвет, соответствующий изображению для левого глаза; CR – цвет, соответствующий изображению для правого глаза. Предлагается следующая формула смешивания:

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

!!ARBfp1.0;

# шейдерная программа версии 1.0

TEMP cl, cr, mcl, mcr;

ATTRIB tc = fragment.texcoord[0];

# Цветовая матрица для левого глаза

PARAM ml[3] = {{.4155,.4710,.1670},{-.0458,-.0484,-.0258},

{-.0545,-.0614,-.0128}};

# Цветовая матрица для правого глаза

PARAM mr[3] = {{-.0109,-.0365,-.006},{.3756,-.7333,-.0111},

{-.0651,-.1286,1.2968}};

# Выборка из текстуры 0 цвета cl

TEX cl, TEX0, tc;

# Выборка из текстуры 1 цвета cr

TEX cr, TEX1, tc;

# Умножение вектора цвета cl на матрицу ml

DP3 mcl.r, ml[0], cl;

DP3 mcl.g, ml[1], cl;

DP3 mcl.g, ml[2], cl;

# Умножение вектора цвета cr на матрицу mr

DP3 mcr.r, mr[0], cr;

DP3 mcr.g, mr[1], cr;

DP3 mcr.g, mr[2], cr;

# Вычисляем и записываем цвет как mcl+mcr

ADD result.color.rgb, rcl, rcr;

Результирующий алгоритм формирования стереоизображения в формате оптимизированного анаглифа будет следующим.

Алгоритм формирования стереоизображения в формате оптимизированного анаглифа.

1.   Формируем изображение сцены, соответствующее левому глазу, в текстуру 0.

2.   Формируем изображение сцены, соответствующее правому глазу, в текстуру 1.

3.   Формируем результирующее изображение с использованием приведенной выше шейдерной программы. 

Системы с затворными очками

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

Наиболее простым и распространенным способом построения стереоизображения для этих систем является использование так называемого квадробуфера. Вместо двух буферов вывода – лицевого и заднего используются четыре: задний левый, лицевой левый, задний правый и лицевой правый. Задача системы визуализации состоит только в том, чтобы сформировать в левом и правом задних буферах изображения для левого и правого глаза соответственно, а потом отправить команду на обновление лицевых буферов. Смена изображений правого и левого лицевых буферов на экране производится автоматически драйвером видеокарты, одновременно с этим мигают ЖК-шторки на очках. Алгоритм выглядит следующим образом.

Алгоритм формирования стереоизображения  в формате квадробуфера.

1.   Формируем изображение для левого глаза в левый задний буфер.

2.   Формируем изображение для правого глаза в правый задний буфер.

3.   Отправляем команду на обновление левого и правого лицевых буферов.

  Проекционные системы с линейной поляризацией

Подпись:  
Рис. 2Рассматриваемые системы используют технологии поляризационной сепарации стереопары. Изображения для левого и правого глаза поступают на проекторы, на которых установлены светофильтры, обладающие свойством линейной поляризации света. В результате их воздействия получаются световые волны с некоторым фиксированным углом поляризации (рис. 2). Фильтры на проекторах устанавливаются таким образом, что световые потоки имеют взаимно перпендикулярный угол поляризации. Световой поток проецируется на специальный экран, обладающий свойством сохранения поляризации отражаемого света (для систем с прямой проекцией) или пропускаемого света (для систем с обратной проекцией). Далее световой поток поступает уже в глаза наблюдателя. Для сепарации изображений применяются поляризационные светофильтры, устанавливаемые в очки, имеющие тот же угол поляризации, что и светофильтры на проекторах. В итоге правый и левый глаз пользователя видят только ту часть изображения, которая им предназначена. Преимуществами проекционной поляризационной технологии являются отсутствие цветовых искажений, достаточно высокая степень разделения стереопары, возможность многопользовательского режима наблюдения при использовании больших экранов. Недостатки – относительно высокая стоимость проекционного оборудования, необходимость тщательной юстировки проекторов, а также значительное ухудшение степени сепарации стереопары при вращении головы, что проявляется в эффекте двоения изображения.

Рассматриваемые системы используют формат горизонтальной или вертикальной стереопары (horizontal side-by-side и vertical side-by-side соответственно). Наиболее распространенный подход для построения изображений в данных форматах – применение мультимониторных режимов horison­tal span или vertical span (горизонтального или вертикального расширения рабочего стола на два монитора) или режима dual view (в этом режиме создаются два независимых рабочих стола). Реализация стереорежима в таком формате заключается в формировании в нужных областях рабочего стола изображений, соответствующих левому и правому глазу.

Рассмотрим реализацию формата горизонтальной стереопары с использованием мультимониторного режима горизонтального расширения рабочего стола horisontal span. В этом режиме левая половина рабочего стола отправляется на проектор 1, а правая – на проектор 2.

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

Алгоритм формирования стереоизображения в формате горизонтальной стереопары.

1.   Очищаем экран.

2.   Находим размеры окна визуализации W, H.

3.   Формируем изображение для левого глаза в левую половину окна – вьюпорт (0,0,W/2,H).

4.   Формируем изображение для правого глаза в правую половину окна – вьюпорт (W/2,0,W/2,H).

  Мониторы с чересстрочной технологией стерео

Чересстрочный формат (его также называют line-by-line) организован таким образом, что в четных и нечетных строках попеременно записывается изображение для правого и левого глаза. Примером мониторов с чересстрочным форматом являются мониторы Zalman TriMon, JVC GD-463D10E, Hyundai 3D и др. Для сепарации изображений стереопары в них используется технология круговой поляризации. На дисплей нанесена специальная пленка, преобразующая линейно-поляризованный свет в свет с круговой поляризацией с разным направлением для четных и нечетных строк. Преимуществом рассматриваемых мониторов является достаточно хорошая степень разделения стереопары, которая не ухудшается при вращении головы благодаря технологии круговой поляризации. Недостатками же являются падение эффективного разрешения изображения в два раза, плохое качество отображения (мелькание) мелкого текста, а также малые углы наблюдения стереоэффекта в горизонтальной и вертикальной плоскостях (что сильно ограничивает область комфортного восприятия стерео).

Подпись:  
Рис. 4Алгоритм формирования изображения в чересстрочном формате следующий. На начальном этапе синтезируется изображение сцены для левого и правого глаза в нижнюю и верхнюю половины экрана соответственно (в задний буфер). После этого содержимое окна копируется в текстуру. Затем прорисовываются прямоугольники размером в одну строку с текстурными координатами, соответствующими нужной строке полученной текстуры (рис. 4). Чтобы не было искажения размеров объектов, при формировании изображений для левого и правого глаза необходимо скорректировать соотношение (аспект) для камеры, установив его равным не аспекту области вывода одного глаза (W/(H/2)), а аспекту всего окна (W/H).

Алгоритм формирования стереоизображения в чересстрочном формате.

1.   Очищаем экран.

2.   Находим размеры окна визуализации W, H.

3.   Формируем изображение сцены для левого глаза в нижнюю половину экрана – область вывода (0,0,W,H/2), скорректированное соотношение сторон – W/H. 

4.   Формируем изображение сцены для правого глаза в нижнюю половину экрана – область вывода (H/2,0,W,H/2), скорректированное соотношение сторон – W/H. 

5.   Копируем содержимое экрана в текстуру.

6.   Цикл по строкам экрана i от 0 до H/2-1 (нумерация снизу вверх).  

6.1.     Рисуем прямоугольник  размера (W,1) в четную строку 2*i с текстурными координатами, соответствующими строке i полученной текстуры (в ней содержится изображение для левого глаза).

6.2.     Рисуем прямоугольник  размера (W,1) в нечетную строку 2*i+1 с текстурными координатами, соответствующими строке H/2+i (в ней содержится изображение для правого глаза).

Издержки на копирование окна в текстуру (в шаге 5) могут быть полностью устранены с помощью технологии прямого рендеринга ракурсов в текстуру (в шагах 3 и 4).

  Мониторы Philips 3D Solutions

Подпись:  
Рис. 5Подобные мониторы относятся к классу автостереоскопических, не требующих использования очков при просмотре стереоизображений. Сепарация ракурсов осуществляется с помощью системы вертикальных линз, которые обеспечивают разделение светового потока таким образом, что правый и левый глаз наблюдают только предназначенные для них изображения. Мониторы Philips 3D Solutions являются многоракурсными и позволяют наблюдать стереоэффект не только в фиксированной зоне напротив экрана, но и из нескольких фиксированных положений (рис. 5). В текущем поколении мониторов строится 9 ракурсов.

Рассмотрим алгоритм реализации стереорежима для мониторов Philips 3D. Для получения правильного стереоэффекта необходимо сформировать изображение в  специальном формате, поддерживаемом данным монитором. Рассматриваемые мониторы Philips используют специальный стереоформат WowVx «2D+Depth» [3], который не содержит стереопару, как большинство других форматов, а в дополнение к обычному (2D) изображению хранит информацию о глубине (Depth), на основе которой монитор строит изображения для нескольких ракурсов (рис. 6).

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

Подпись:  
Рис. 6Для активизации стереорежима и задания параметров стереоизображения мониторы Philips используют специальный  заголовок, который интегрируется прямо в изображение в области левого верхнего угла. Монитор постоянно анализирует поступающее изображение и, встретив заголовок, считывает из него параметры стереоформата. Для записи заголовка используется специальное кодирование данных в пиксели цвета, которое практически исключает возможность случайного задания стереоформата в обычном (не  стерео) изображении. При этом дополнительная  информация, относящаяся к заголовку, максимально маскируется за счет особого ее распределения по некоторой области среди цветовой информации. Кодирование заголовка выполняется по следующей формуле: B(2×(7–y)+16×x,0)7=H(x)y, где H(x)y – значение бита y байта x заголовка H; В(a,b)7 – старший (7-й) бит синей компоненты цвета пикселя с координатами (a, b). То есть заголовок кодируется в старшем бите синего канала в пикселях верхней строки изображения.

Информация, описывающая глубину, явным образом размещается в изображении и записывается в виде градаций серого цвета. Значение интенсивности таким образом кодируется восемью битами в диапазоне [0, 255]. Значение 0 соответствует максимально удаленным объектам, которые монитор может воспроизвести в стерео. Значение 128 соответствует объектам, которые при настройках по умолчанию будут восприниматься лежащими в плоскости экрана. Значение 255 кодирует области, максимально выходящие из экрана. Диапазон [0, 128) задает области за экраном, (128, 255] – области перед экраном. Для перевода информации о реальной глубине объектов, которая доступна при 3D-визуализации, в данное представление требуется задать преобразование значения координаты Z пикселей в диапазон [0, 255]. Для реализации такого преобразования существует множество вариантов. Рассмотрим подход, использованный в данной реализации. Он заключается в выделении некоторого диапазона глубины, представляющего наибольший интерес применительно к данной сцене. Этот диапазон задается вручную пользователем с помощью фиксации ближней и дальней плоскостей, ограничивающих интересующую область. Ближней плоскости ставится в соответствие значение 255, дальней – 0. Объекты, располагающиеся в заданном диапазоне глубины, полностью используют диапазон симулируемой монитором глубины стереоэффекта. Для объектов, которые находятся ближе передней плоскости или за дальней плоскостью, стереоэффект не наблюдается. Это вынужденное решение, поскольку точность кодирования невысока и составляет всего 8 бит.

Рассмотрим формулу преобразования значения координаты Z при визуализации и реализацию этого преобразования с помощью шейдерной обработки. Интересующее преобразование можно задать следующей формулой, осуществляющей линейное преобразование диапазона [dnear, dfar] к диапазону [0, 1]:

,                                                    (1)

где d – дальность точки в видовой системе координат; dnear – расстояние до ближней плоскости; dfar – расстояние до дальней плоскости.

Рассмотренное преобразование можно реализовать различными способами. Значение координаты z в видовой системе координат может быть восстановлено из буфера глубины, который можно записать в текстуру прямо на этапе создания основного изображения. Такой подход позволяет отправлять сцену на визуализацию лишь один раз. Однако он имеет свои сложности, заключающиеся в потере точности, которая визуально проявляется в эффекте полосатости (banding-a) результирующего изображения. В предлагаемой реализации для формирования глубины в градациях серого используется отдельный проход рисования сцены. Требуемое преобразование координаты z в градации серого цвета осуществляется с помощью шейдерной обработки. Для этого в рамках графической библиотеки OpenGL используется расширение ARB_FRAGMENT_PROGRAM. Для получения оконных координат во фрагментной программе предусмотрена возможность доступа к фрагментным координатам с помощью конструкции fragment.position. Получаемый вектор имеет следующий вид:

,

где xw, yw, zw – оконные координаты фрагмен- та после выполнения перспективного деления; wp – четвертая координата однородных координат, полученная после проекционного преобразования. В случае перспективного проецирования, а именно оно используется при синтезе стереоэффекта, проекционное преобразование имеет следующий вид:

,

где  – вектор проекционных координат точки;  – вектор видовых координат точки в системе координат наблюдателя.

Отсюда следует, что wp= –zv. Таким образом, можно легко найти интересующую глубину фрагмента d в системе координат камеры с помощью формулы .

Результирующий шейдер состоит лишь из двух операций и имеет следующий вид:

!!ARBfp1.0;

# шейдерная программа версии 1.0

ATTRIB pos = fragment.position;

# pos – позиция фрагмента       

PARAM k = program.local[0];          

# k – входной параметр программы,

# содержащий коэффициенты k1 и k2

TEMP d;                

# Временная переменная

RCP d.z, pos.w;              

# Находим z = 1/w

MAD result.color.rgb, d.z, k.x, k.y;

# Вычисляем и записываем цвет как z*k1+k2

Входной параметр program.local[0], содержащий коэффициенты k1 и k2, задается перед выполнением визуализации. Коэффициенты вычисляются по следующим формулам, которые вытекают из (1):

, .

Рассмотрим полный алгоритм формирования изображения для мониторов Philips 3D Solutions.

Алгоритм формирования изображения в стереоформате WowVx.

1.   Очищаем экран.

2.   Находим размеры окна визуализации W, H.

3.   Формируем обычное изображение сцены в левую верхнюю четверть экрана (размер области W/2, H/2).

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

5.   Копируем верхнюю половину экрана в текстуру.

6.   Цикл по строкам экрана i от 0 до H/2-1.

6.1.     Рисуем прямоугольник размера (W, 1) в строку 2*i с полученной текстурой и текстурными координатами, соответствующими строке i текстуры.

7.   Записываем заголовок изображения поверх полученного изображения с помощью функций glRasterPos2i и glDrawPixels.

Предложенные алгоритмы в полном объеме были реализованы и протестированы в рамках системы визуализации [4]. Это позволяет использовать для демонстрации в стереорежиме широкий спектр устройств стереоотображения и моделировать практически любые виртуальные сцены в реальном режиме времени.

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

Набор тестовых сцен включал:

·     высокополигональную сцену c большим количеством треугольников, с малым объемом текстур и небольшой пространственной сложностью – для ее визуализации требуется в первую очередь высокая производительность геометрического процессора;

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

·     сбалансированную сцену со средним количеством треугольников, текстур и эффектов – дает сбалансированную нагрузку на геометрическую и пиксельную части графического конвейера.

Результаты исследования представлены в таблице.

Режим

Падение скорости

Простой анаглиф

1.5

Оптимизированный анаглиф

2.2

Затворные очки, квадробуфер

1.5

Поляризационная проекционная система, режим horizontal span

1.5

Чересстрочный формат

2.2

Формат WowVx для мониторов Philips 3D Solutions

2

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

1.   Хураськин И.А., Михайлюк М.В. Моделирование объемного видения в системах виртуального окружения: сб. тр. НИИСИ РАН. 2007.

2.   Computing Anaglyphs using Least Squares Approximation in CIE Color Space. URL: http://research.csc.ncsu.edu/stereo­graphics/LS.pdf (дата обращения: 01.11.2009).

3.   3D Interface Specifications White Paper. Philips 3D Solutions. Website: URL: www.philips.com/3dsolutions (дата обращения: 01.11.2009). 

4.   Михайлюк М.В., Торгашев М.А. и др. Система GLView визуализации трехмерных виртуальных сцен: сб. трудов НИИСИ РАН. 2007.


Постоянный адрес статьи:
http://swsys.ru/index.php?id=2504&like=1&page=article
Версия для печати
Выпуск в формате PDF (4.97Мб)
Скачать обложку в формате PDF (1.38Мб)
Статья опубликована в выпуске журнала № 2 за 2010 год.

Возможно, Вас заинтересуют следующие статьи схожих тематик: