Перевод восьмой части руководства по PEAR пакету Image_3D, оригинал http://www.ibm.com/developerworks/opensource/tutorials/os-php-3d/section8.html
Дополнительные драйверы вывода
До сих пор все изображения, которые вы создали, использовали драйвер GD. Вы видели, что этот драйвер производит изображения в формате PNG, но в вашем распоряжении есть ещё четыре дополнительных драйвера: SVG, SVGRotate, ZBuffer, и ASCII.
SVG
Формат файла The Scalable Vector Graphics (SVG) являет собой определение векторов в формате XML, которые собирают 2D изображения. W3C стандартизировало формат в 2001 году, но его использование в интернете было затруднено в связи отсутствия браузеров, которые могут отображать SVG-файлы. В настоящее время все браузеры имеют встроенную поддержку SVG.
Создание SVG-изображений с помощью Image_3D достаточно легкое дело. Просто измените последние две строки кода в листинге 1 следующим образом:
Интересным аспектом файлов SVG является то, что деревом XML, определяющее изображение, можно манипулировать, используя JavaScript и DOM. Представьте себе, манипулирование изображениями в том же порядке, что dHTML используется для управления веб-страниц. Бывает, что драйвер SVGRotate генерирует SVG-файл, который содержит сценарий, необходимый только для этой цели.
Изменение драйвера вывода, опять же, очень простое изменение последних двух строк кода:
Рисунок 15. Драйвер SVGRotate включает в себя элементы управления и сценарии для управления изображением в режиме реального времени
Отметим, что поддержка скриптовых файлов SVG ограничена. Полученный файл работал в Internet Explorer с Adobe SVG плагином, но не правильно отображался в Firefox.
ZBuffer
Для перевода 3D пространства на 2D изображение требуется специальный алгоритм, который может определить, какие объекты наложены и скрыть другие. В 3D моделировании, управление видимостью объектов в 2D пространстве называется Z-буферизация.
Пока ни в одном из ваших примеров не было проблем с объектами наложенными друг на друга. Если вы столкнулись с этой проблемой, лучшим вариантом является изменение вашего драйвера GD на ZBuffer. Драйвер ZBuffer по-прежнему использует GD для получения изображений PNG, но он лучше управляет 3D объектами, поскольку они переведены в 2D растровые изображения.
Используйте код в листинге 13, для умышленного причинении конфликта в Z-буферизации объектов, вы создадите два объекта, которые занимают одно пространство. Сфере задается прозрачность в 150 так что вы можете видеть плоскость, которая проходит через ее центр.
Листинг 13. Четырехсторонняя плоскость рассекает сферу
Рисунок 16. Два перекрывающихся 3D объекта воссозданных отдельно с помощью драйвера GD
Тем не менее, вы знаете исходя из координат плоскости, которую вы создали, что она должна разрезать непосредственно сферу. Изменение драйвера на ZBuffer решит этот вопрос в результирующем PNG файле, как показано ниже.
Рисунок 17. Конфликты между двумя перекрывающимися 3D объектами решены путем применения драйвера ZBuffer
ASCII
Драйвер ASCII не входит в ваши примеры, но цель этого драйвера обеспечение создания изображения, которое будет отображаться в цветном терминале ANSI. Если вы работаете на ПК с ОС Windows® , вывод этого драйвера, вероятно, не будет очень полезным для вас.
Другие части перевода
Перед началом работы (часть 1 из 13)
Расположение в пространстве (часть 2 из 13)
Создание вашего первого мира (часть 3 из 13)
Источники света и цвета (часть 4 из 13)
Изменение объектов и форм (часть 5 из 13)
Дополнительные объекты (часть 6 из 13)
Пользовательские формы и поверхности (часть 7 из 13)
Дополнительные драйверы вывода (часть 8 из 13)
Возвращение к практическим примерам (часть 9 из 13)
Суммарно (часть 10 из 13)
Скачать (часть 11 из 13)
Ресурсы (часть 12 из 13)
Об авторе (часть 13 из 13)
Автор перевода: reket.
Дополнительные драйверы вывода
До сих пор все изображения, которые вы создали, использовали драйвер GD. Вы видели, что этот драйвер производит изображения в формате PNG, но в вашем распоряжении есть ещё четыре дополнительных драйвера: SVG, SVGRotate, ZBuffer, и ASCII.
SVG
Формат файла The Scalable Vector Graphics (SVG) являет собой определение векторов в формате XML, которые собирают 2D изображения. W3C стандартизировало формат в 2001 году, но его использование в интернете было затруднено в связи отсутствия браузеров, которые могут отображать SVG-файлы. В настоящее время все браузеры имеют встроенную поддержку SVG.
Создание SVG-изображений с помощью Image_3D достаточно легкое дело. Просто измените последние две строки кода в листинге 1 следующим образом:
$world->createDriver('svg'); $world->render(400, 400, 'object.svg');Полученный файл изображения должен напоминать первый конус который вы создали.
Интересным аспектом файлов SVG является то, что деревом XML, определяющее изображение, можно манипулировать, используя JavaScript и DOM. Представьте себе, манипулирование изображениями в том же порядке, что dHTML используется для управления веб-страниц. Бывает, что драйвер SVGRotate генерирует SVG-файл, который содержит сценарий, необходимый только для этой цели.
Изменение драйвера вывода, опять же, очень простое изменение последних двух строк кода:
$world->createDriver('svgrotate'); $world->render(400, 400, 'object.svg');Полученный файл, при просмотре в браузере поддерживающим SVG, включает в себя встроенные элементы управления для вращения и масштабирования конуса в режиме реального времени. Скриншот изображения будет показан ниже.
Рисунок 15. Драйвер SVGRotate включает в себя элементы управления и сценарии для управления изображением в режиме реального времени
Отметим, что поддержка скриптовых файлов SVG ограничена. Полученный файл работал в Internet Explorer с Adobe SVG плагином, но не правильно отображался в Firefox.
ZBuffer
Для перевода 3D пространства на 2D изображение требуется специальный алгоритм, который может определить, какие объекты наложены и скрыть другие. В 3D моделировании, управление видимостью объектов в 2D пространстве называется Z-буферизация.
Пока ни в одном из ваших примеров не было проблем с объектами наложенными друг на друга. Если вы столкнулись с этой проблемой, лучшим вариантом является изменение вашего драйвера GD на ZBuffer. Драйвер ZBuffer по-прежнему использует GD для получения изображений PNG, но он лучше управляет 3D объектами, поскольку они переведены в 2D растровые изображения.
Используйте код в листинге 13, для умышленного причинении конфликта в Z-буферизации объектов, вы создадите два объекта, которые занимают одно пространство. Сфере задается прозрачность в 150 так что вы можете видеть плоскость, которая проходит через ее центр.
Листинг 13. Четырехсторонняя плоскость рассекает сферу
$sphere = $world->createObject('sphere', array('r' => 85, 'detail' => 4)); $sphere->setColor(new Image_3D_Color(255, 255, 255, 150)); $plane = $world->createObject('polygon', array( new Image_3D_Point(-120, 0, -120), new Image_3D_Point(-120, 0, 120), new Image_3D_Point( 120, 0, 120), new Image_3D_Point( 120, 0, -120) ) ); $plane->setColor(new Image_3D_Color(255, 255, 255)); $plane->transform($world->createMatrix('Rotation', array(15,15,-10)));Если вы воспроизведете этот объект с помощью драйвера GD, сфера появятся перед плоскостью, как показано на рисунке ниже.
Рисунок 16. Два перекрывающихся 3D объекта воссозданных отдельно с помощью драйвера GD
Тем не менее, вы знаете исходя из координат плоскости, которую вы создали, что она должна разрезать непосредственно сферу. Изменение драйвера на ZBuffer решит этот вопрос в результирующем PNG файле, как показано ниже.
Рисунок 17. Конфликты между двумя перекрывающимися 3D объектами решены путем применения драйвера ZBuffer
ASCII
Драйвер ASCII не входит в ваши примеры, но цель этого драйвера обеспечение создания изображения, которое будет отображаться в цветном терминале ANSI. Если вы работаете на ПК с ОС Windows® , вывод этого драйвера, вероятно, не будет очень полезным для вас.
Другие части перевода
Перед началом работы (часть 1 из 13)
Расположение в пространстве (часть 2 из 13)
Создание вашего первого мира (часть 3 из 13)
Источники света и цвета (часть 4 из 13)
Изменение объектов и форм (часть 5 из 13)
Дополнительные объекты (часть 6 из 13)
Пользовательские формы и поверхности (часть 7 из 13)
Дополнительные драйверы вывода (часть 8 из 13)
Возвращение к практическим примерам (часть 9 из 13)
Суммарно (часть 10 из 13)
Скачать (часть 11 из 13)
Ресурсы (часть 12 из 13)
Об авторе (часть 13 из 13)
Автор перевода: reket.
No comments:
Post a Comment