Logo    
Продукты, технологии Проекты, внедрения Новости мира IT Форумы Курилка Новые публикации Учебный центр
CitForum    CITForum на CD Море(!) аналитической информации! :: CITFORUM.RU   
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware HOWTO

23.05.2004

Google
WWW CITForum.ru

Новости мира IT:


21.05 - Колонка Айдара Богданова: информационная безопасность на президентском уровне
  • 21.05 - Путин подписал указ о создании нового Министерства информационных технологий и связи РФ во главе с Рейманом
  • 21.05 - Региональные GSM-операторы нашли способ конкурентной борьбы с гигантами рынка
  • 21.05 - Новая цифровая 5-ти мегапиксельная фотокамера для российских пользователей
  • 21.05 - Apple разделяется
  • 21.05 - Домашний ПК с экстремальными возможностями
  • 21.05 - Червь Lovegate научился отвечать на письма
  • 21.05 - Microsoft объявила об альянсе с Oracle
  • 21.05 - Компания «Никита» — лучший партнер ОАО «ВымпелКом».
  • 21.05 - Компания «Никита» — лучший партнер ОАО «ВымпелКом».
  • 21.05 - Panda Software предупреждает о появлении двух новых версий червя Bobax
  • 21.05 - Группа компаний «Формоза» открывает свой двухсотый магазин
  • 21.05 - IBS Поставила сервер IBM REGATA в Центральный Банк РФ
  • 21.05 - CSBI получает западные инвестиции
  • 21.05 - Коробочный Mandrakelinux - впервые в России
  • 21.05 - Wi-Fi инициатива IBM, Intel и AT&T провалилась
  • 21.05 - CTR в почте растет
  • 21.05 - Российский рынок ИТ: +20,3%
  • 21.05 - Краснодарский край уже год торгует в интернете
  • 21.05 - INTEL вдвое увеличит штат своих российских сотрудников, занимающихся исследованиями и разработками
  • 21.05 - Компания «Голден Лайн» подключила к корпоративной сети «Копейка» 50-й магазин
  • 20.05 - IBM открыла европейский центр вычислений на заказ
  • 20.05 - Google случайно увеличила емкость почтовых ящиков до терабайта
  • 20.05 - Путин подписал антихакерский указ
  • 20.05 - Подробности о процессоре VIA Esther
  • 20.05 - Google вынашивает тайные планы
  • 20.05 - Microsoft представил русскую версию Visual Basic .NET 2003
  • 20.05 - Учебный центр DIAMOND Communications становится авторизованным центром обучения Cisco Systems
  • 20.05 - Вимком на выставке «Связь-Экспокомм’2004»
  • 20.05 - Инлайн представляет кулер нового поколения
  • 20.05 - Впервые в России: уникальный программно-аппаратный комплекс от СТИНС КОМАН и «ФОРС- Центр разработки»
  • 19.05 - Вышла версия 5.0.6. системы контент-менеджмента OpenCMS, соответствующая международному стандарту WAI
  • 19.05 - Apple хочет запатентовать прозрачные окна
  • 19.05 - Очередной альтернативный офисный пакет
  • 19.05 - Новая версия Linux-дистрибутива Fedora
  • 19.05 - Троян Bobax превращает компьютер в прокси-сервер
  • 19.05 - Microsoft выпускает Office 2004 для Mac
  • 19.05 - Yahoo выпустил новый почтовый стандарт для борьбы со спамом
  • 19.05 - В Казахстане открылось представительство Intel
  • 19.05 - Cisco и IBM объединились на ниве IP-телефонии

    Архив новостей >>>


  • Объекты, строящиеся по набору вершин

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

    PointSet (набор точек)

    Описание:

    PointSet {
    coord NULL
    color NULL }
    

    Поскольку по умолчанию coord=color=NULL, то вставка в код узла PointSet без аргументов не приведет ни к чему, не будет создано ни одной точки.

    Количество записей в разделе color должно точно соответствовать количеству точек, описанных в разделе coord!

    Мне лично такой узел кажется бесполезным, но с его помощью можно сотворить что-нибудь такое:

    Просмотр. Текст кода. Надеюсь, Вы рассмотрели чередующиеся красные, зеленые и синие точки на экране.

    IndexedLineSet (линии по набору точек)

    Описание:

    IndexedLineSet {
    color NULL
    coord NULL
    colorIndex []
    colorPerVertex TRUE
    coordIndex []
    }
    

    Схема использования этого узла заключается в следующем: в разделе coord описывается набор точек, а в разделе coordIndex приводятся последовательности точек (их номера в списке раздела coord), которые соединяются отрезками. Конец последовательности обозначается приведением после номера последней точки значения -1.

    Для этого узла важно разобраться со способами раскраски отрезков. Если у Вас ничего не прописано в разделе color, то ничего не увидите, т.к. отрезки не окрашены (хотя можно при этом воспользоваться emissiveColor в разделе appearance (об этом см далее))

    Если colorPerVertex TRUE, то цвет из списка в разделе color приписывается ВЕРШИНАМ, а отрезки, соединяющие их окрашиваются с градиентом от цвета одной вершины к цвету другой.

    Вот, например, "знак Зорро" :)

    Просмотр. Текст кода.

    Если colorPerVertex FALSE, то цвета из списка в разделе color приписывается КАЖДОЙ ПОЛИЛИНИИ, а не каждому ОТРЕЗКУ!

    Вот тот же код, только с colorPerVertex FALSE. Как видно, всей полилинии из вершин 1 0 3 2 приписан красный цвет, первым описанный в color. Тогда оставшиеся зеленый, синий и белый цвета просто не нужны. Проверьте vorlon'ом.

    Просмотр. Текст кода.

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

    Просмотр. Текст кода.

    IndexedFaceSet (грани по набору точек)

    Описание:

    IndexedFaceSet {
    coord NULL
    color NULL
    normal NULL
    texCoord NULL
    ccw TRUE
    colorIndex []
    colorPerVertex TRUE
    convex TRUE
    coordIndex
    creaseAngle 0
    normalIndex []
    normalPerVertex TRUE
    solid TRUE
    texCoordIndex []
    }
    

    Вот он! Вот он! Узел, которым можно заменить все остальные узлы, связанные с описанием граней. Все люди, использующие экспорт в VRML код из какого-нибудь 3D моделлера, получают файл, набитый только IndexedFaceSet. Принцип работы узла очень похож на IndexedLineSet: описан набор координат точек (coord) и указано, какие из них должны образовать грань (coordIndex).

    Для того, чтобы получить что-то вразумительное, должны выполняться три условия:

    1. каждая грань должна состоять как минимум из трех несовпадающих вершин
    2. вершины должны задавать ПЛОСКИЙ многоугольник
    3. многоугольник должен быть несамопересекающимся

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

    Раскраска объектов в этом узле происходит так же, как и в IndexedLineSet:
    при colorPerVertex TRUE цвет приписывается ВЕРШИНАМ, а грань заливается градиентом между всеми вершинами, которыми грань создана.
    при colorPerVertex FALSE цвет приписывается каждой ГРАНИ в порядке, соответствующем порядку цветов в разделе color

    Создадим для примера кубик без одной грани средствами узла IndexedFaceSet и раскрасим, пользуясь colorPerVertex TRUE

    Просмотр. Текст кода.

    А теперь переключитесь в режим просмотра wireframe: видите, хотя мы описали КВАДРАТНЫЕ грани, броузер все равно представляет их, как состоящие из треугольников, так же, как и все остальные объекты, так что узел IndexedFaceSet - это по определению основная форма представления объектов в VRML.

    В разделе "Инструменты" я упоминал о программах визуализации трансляционно-симметричных структур.

    Вот, посмотрите несколько примеров использования узла IndexedFaceSet

    Просмотр.
    Просмотр.
    Просмотр.

    "Фи" - кто-то скажет, - "примитив". Верно, но даже в VRML редакторе (а уж ручками...) Вам придется попотеть, прописывая кучу раз USE. А если я скажу, что при создании этих примеров входные данные для программы составили 2-3 строчки?! И при этом можно построить объектов, сколько хочется: не 4x4x4, как в приведенных примерах, а 1000x1000x1000. Вот то-то же :). Правда, все-таки, использование подобных геометрически правильных объектов довольно ограничено. Но если Вас такое интересует, плиз в мыло: хочется познакомится с такими героями :)

    Extrusion (экструзия, выдавливание)

    писание:

    Extrusion {
    beginCap TRUE
    ccw TRUE
    convex TRUE
    creaseAngle 0
    crossSection [1 1, 1 -1, -1 -1, -1 1, 1 1]
    endCap TRUE
    orientation 0 0 1 0
    scale 1 1
    solid TRUE
    spine [0 0 0, 0 1 0]
    }
    

    Узел Extrusion - это основное орудие борьбы с IndexedFaceSet, позволяющее сильно сократить объем файла. Работает узел очень просто: сначала описывается МНОГОУГОЛЬНИК в плоскости с Y=0 (поэтому в разделе crossSection="сечение" только две координаты) и траектория его движения в пространстве (раздел spine). Разделы beginCap и endCap определяют, будут ли грани-"крышки" на торцах Вашего объекта. Я плохо понимаю, для чего по умолчанию solid выставлен TRUE: в спецификации написано, что значением этого раздела регулируется, будут ли видны одна или обе стороны многоугольника одновременно, в общем поиграйтесь с FALSE/TRUE, поймете сами.

    В каждой точке траектории многоугольник можно:

    • масштабировать (раздел scale). Обратите внимание, количество значений шкального множителя должно либо 1 (тогда масштабируется исходное сечение crossSection и далее не изменяется - это дурацкий случай, легче сразу было задать правильное сечение), либо совпадать с количеством точек в траектории (spine). Если количество значений в разделе scale больше единицы, но МЕНЬШЕ количества значений в разделе spine, то результат спецификацией VRML не определен (обычно получается бредовый объект). Если количество значений в разделе scale больше единицы, и БОЛЬШЕ количества значений в разделе spine, то лишние игнорируются.

      Просмотр. Текст кода.

      Благодаря масштабированию можно делать также всякие остроконечности - нужно только задать "scale ... ,0 0, ..."

      Просмотр. Текст кода.

      Это, конечно, не шедевр, но чего Вы хотели от неархивированного кода в 0.28кб ? :). Посмотрите в профиль на схождение на нет "заточки" "меча"...

    • вращать (раздел orientation). Задается направление оси вращения (первые три числа) и угол в радианах. Вращать можно как по часовой стрелке, так и против (знак угла). Количество значений в разделе orientation определяется так же, как и для масштабирования.

      Просмотр. Текст кода.

      Непонятно, что это, но имхо красиво и, что важнее, короче, чем через IndexedFaceSet.

      Да, так по поводу борьбы с IndexedFaceSet. Наглядный ПРИМЕР:

      понадобился мне тор. Не желая делать лишней работы, залезаю в архив wrl-файлов, скачанных из сети. Нахожу (хотя и в формате VRML1), ничего себе размер - 14.6кб. Просмотр. Естественно, сделано через IndexedFaceSet, небось экспортировано откуда-нибудь. Почесав в затылке, делаю свой - через extrusion. Просмотр. Вот он - 0.48кб. Хороша разница - в 30 раз!. Переключитесь-ка в режим wireframe: а мой-то и покачественней! Надеюсь, убедительно.

    ElevationGrid (рельеф по набору точек)

    Описание:

    ElevationGrid {
    color NULL
    normal NULL
    texCoord NULL
    height []
    ccw TRUE
    colorPerVertex TRUE
    creaseAngle 0
    normalPerVertex TRUE
    solid TRUE
    xDimension 0
    xSpacing 1.0
    zDimension 0
    zSpacing 1.0
    }
    

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

    Вы задаете количество ячеек по X и Z (разделы xDimension и zDimension) и для каждой точки пересечения "волокон" задаете ее "высоту"-координату по Y. Размеры всего объекта и его пропорции вытекают из величины зазоров между "волокнами" (разделы xSpacing и zSpacing). Вот, вкратце, и все.

    Просмотр. Текст кода.

    Довольно гладко выглядит, хотя всего 28x28 ячеек! Те, кто работал с программами от Golden Software, наверное, даже узнали функцию, выставленную по умолчанию в Grid...->Function... :)

    Назад | Содержание | Вперед

     

    Подписка на новости библиотеки:

    Новые поступления в on-line библиотеку:

    20 мая

  • Оперативная интеграция данных на основе XML: системная архитектура BizQuery
  • Математика криптологии
  • Использование USB Flash под Linux
  • Мониторинг материнских плат в Linux
  • Работа с последовательными портами
  • Три письма на Perl

    18 мая

  • Xabre 600: GPU с претензиями
  • Linux: укрощение мыши и монитора
  • Семь вещей, которые нужно знать о VMWare и VirtualPC
  • BlueJ: учебная оболочка или полноценная среда разработки?
  • Inferno - виртуальный пост-Unix в кармане
  • CVS - система управления версиями

    12 мая

  • Бесполезный Perl и общая теория улучшения мира
  • Как подружить Olympus c ПК?
  • Шесть правил ухода за монитором
  • Веб-сервер своими руками
  • Поддержка MS-макросов в DELPHI
  • Интеграция Tomcat с Apache. Развертывание веб-приложений Java2 на Linux-платформе
  • Экстремальное программирование: новые возможности

    29 апреля

  • Linux на работе и дома
  • Автоматическая установка Windows
  • Гостевая книга из Perl'овки
  • HTML Help ActiveX control: всплывающие окна
  • NQL: твои агенты в Сети

    27 апреля

  • Материалы конференции "Корпоративные базы данных-2004"
  • Практическая реализация DNS
  • Shell Extensions и как с ними бороться
  • BI для массового использования:
    Барьеры, которые нужно преодолеть:: Поиск наилучшего способа реализации:: Расчет окупаемости вложений в BI-проект
  • SOAP 1.2 и запрос GET

    22 апреля

  • Обзор XML-стандартов
  • Windows и Delphi на защите секретов
  • Один в поле не воин: межсетевые экраны и антивирусы - братья навеки!
  • Все будет Samba!
  • ISPMail-HOWTO v.2.0

    20 апреля

  • Семейство алгоритмов ARIES
  • Русификация OpenBSD

    19 апреля

  • Как правильно задавать вопросы
  • Сжатие данных в целях экономии места и ускорения работы
  • Концепции построения ERP-систем на предприятии

    15 апреля

  • XML-схема. Часть 0: пример (Рекомендации W3C)
  • Сжатие таблиц в СУБД Oracle9i release 2: анализ эффективности
  • Как правильно деинсталлировать СУБД Informix на платформе Windows
  • Как написать драйвер принтера в BeOS

    13 апреля

  • Наиболее интересные новшества в стандарте SQL:2003
  • Новый взгляд на ноутбуки
  • Статистическая информация уровня сегмента в событии 10046 Oracle 9.2
  • Сколько стоит update?
  • Формирование хранимых шаблонов в Oracle 9
  • Стабилизация плана оптимизатора в Oracle 8i/9i
  • Понимание индексов на основе битовых карт
  • Oracle_trace - лучшее встроенное средство диагностики?

    8 апреля

  • Анализ рынка средств защиты от копирования и взлома программных средств
  • Аутентификация и авторизация пользователей между Web-сервером и сервером приложения в .NET
  • Особенности в проектировании и практической разработке медицинской информационной системы
  • Настройка доменов контроля доступа в JBoss 3.х.х
  • Сборка сервера JBoss 3.x из исходного кода
  • Развертывание приложения с помощью Java Web Start

    6 апреля

  • FreeBSD 5.2. Первые впечатления
  • FreeBSD 5.2: файловая система устройств
  • Примеры использования IPF
  • Настройка Ethernet Bridge
  • Управление непрерывностью вашего бизнеса
  • Веб-сервисы как вариант основы информационной инфраструктуры предприятия

    5 апреля

  • Примеры использования IPF
  • Настройка Ethernet Bridge

    1 апреля

  • ORACLE и коммерческая GRID
  • Открытые программы в Linux и их платные конкуренты в Windows
  • Windows&Fonts
  • Правильный снос Windows

    30 марта

  • Учебный курс Основы операционной системы UNIX
  • Иерархия защиты веб-серверов
  • На перекрестке дорог (сравнение стандартов памяти DDR II и RDRAM)
  • IT-планирование: новые перспективы

    25 марта

  • Новый раздел - Операционная система BeOS

  • Учебник Основы конструирования компиляторов

    Обзоры журнала Computer:

  • Диета для компьютеров
  • Бедным тоже нужны электронные услуги

    Все новости >>>



  • IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware HOWTO

    Реклама на IT-портале citforum.ru

    Нестандартные PR-акции - pr@citforum.ru
    Пресс-релизы и информация в каталог компаний - manager@citforum.ru
    Комментарии: mailto:info@citforum.ru?Subject='From bottom of CIT FORUM' Rambler's Top100 TopList This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2004 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.