Выберите язык
English : Russian
Desktop multi language  
Aston Shell Desktop manager and Shell replacement AltDesk virtual desktops aston desktop
Top main menuГлавнаяСкачатьКупитьТех.поддержка 
Продукция
Aston
  • О продукте
  • Темы
  • Живые обои
  • Док-я по скинам
  • Aston 1.x
  • Aston2 Menu
  • О продукте
  • Скины
  • Aston Secure Desktop
  • О продукте
  • AltDesk
  • О продукте
  • FAQ
  • Создать скин
  • Скины
  • Star Blaze
  • О продукте
  • FAQ
  • Star Blaze2
  • О продукте

  • Services
  • Добавить тему
  • Рассылка
  • Линки
    MrBiotech's site

    adni18 site
    Freeware
  • Bred 2
  • Bred 3
  • Охота на лис
  • c2pas32

  • Поиск

    3D объекты

     
     

    3D объекты

    Aston может рисовать полигональные 3D объекты. Для активации режима 3D используйте специальный атрибут render="scene3d" в секции paint:

    ...
      <skin name="background">
        <paint render="scene3d">
          <object3d model="teapot1.3ds"/>
          <object3d model="teapot2.3ds"/>
          <object3d model="teapot3.3ds"/>
        </paint>
      </skin>
    ...
    

    Как вы можете видеть в данном примере, секция paint включает секции objet3d в данном случае. Подробно рассмотрим типичный objet3d:

    ...
      <skin name="background">
          <object3d model="pot.3ds">
              <material/>
              <render_option/>
              <camera/>
              <transform/>
              <light/>
          </object3d>
      </skin>
    ...
    

    Атрибут model содержит имя файла для объекта в стандартном формате 3DS. Также, Aston поддерживает встроенный объект model="*QUAD*".
    Секция material содержит описание материала объекта:

    ...
      <skin name="background">
          <object3d model="pot.3ds">
              <material visible_face="cw"
                        light_mode="none"
                        diffuse_source="map"
                        diffuse_color="0xFF007700"
                        diffuse_image="flower.jpg"
                        diffuse_uv="vertex"
                        diffuse_op="replace"
                        reflection_source="map"
                        reflection_color="0"
                        reflection_image="reflection.jpg"
                        reflection_uv="chrome ball"
                        reflection_op="add"
              />
              <render_option/>
              <camera/>
              <transform/>
              <light/>
          </object3d>
      </skin>
    ...
    

    Атрибут visible_face задает видимость каждой стороны полигона. Допустимые значения:
    • visible_face="cw" - только сторона, которая обходится по часовой стрелке
    • visible_face="ccw" - только сторона против часовой стрелки
    • visible_face="both" - обе стороны
    Атрибут light_mode используется для динамического освещения. Допустимые значения:
    • light_mode="none" - нет динамического освещения
    • light_mode="flat" - высчитать свет для каждой поверхности
    • light_mode="gouround" - линейная интерполяция с каждой вершины (не подерживается в текущей версии Aston)
    Теперь рассмотрим группу атрибутов для первого прохода прорисовки материала.

    Атрибут diffuse_source задает источник цвета по пикселям в первом проходе прорисовки материала:
    • diffuse_source="none" - пропустить данный проход прорисовки материала
    • diffuse_source="const" - заполнить все полигоны одним цветом
    • diffuse_source="face" - каждый полигон отдельным цветом
    • diffuse_source="vertex" - линейная интерполяция между цветами вершин
    • diffuse_source="map" - взять с изображения текстуры (в соответствии с текстурными координатами)
    Атрибут diffuse_color задает постоянный цвет когда diffuse_source="const"
    Атрибут diffuse_image задает имя файла текстуры в случае, когда diffuse_source="map".
    Атрибут diffuse_uv задает источник координат текстуры:
    • diffuse_uv="vertex" - из информации о вершине, обычно читает из файла 3DS
    • diffuse_uv="chrome ball" - высчитывает в процессе координаты текстуры для эффекта хромного отражения
    Атрибут diffuse_op подразумевает математическую операцию над пикселями рисуемомго объекта(src) и предыдущими пикселями на экране (dst):

    diffuse_op="replace" dst = srcрисует новые пиксели поверх старых
    diffuse_op="blend" dst = dst * (1 - alpha) + src * alphaсмешать на значение альфа
    diffuse_op="add" dst = dst + srcдобавление
    diffuse_op="modulate"dst = dst * srcумножение

    Здесь представлены две группы атрибутов для первого и второго проходов прорисовки материала:

    первый проход второй проход
    diffuse_source reflection_source
    diffuse_color reflection_color
    diffuse_image reflection_image
    diffuse_uv reflection_uv
    diffuse_op reflection_op

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

    • diffuse_op="replace"
    • diffuse_uv="vertex"
    • reflection_op="add"
    • reflection_uv="chrome ball"

    Рассмотрим секцию render_options. Секция material в этом примере сокращена:

    ...
      <skin name="background">
          <object3d model="pot.3ds">
              <material/>
              <render_option zsort="ranging"
                             rbuffer_size="20000"
                             flush_cache="0"
                             mag_filter="nearest"
                             z_adjust="best"
              />
              <camera/>
              <transform/>
              <light/>
          </object3d>
      </skin>
    ...
    

    Атрибут zsort дает возможность соритровки полигонов по глубине (по оси Z):
    • zsort="none" - нет сортировки. Это быстро, но может получиться неправильное изображение (например, если цветовая операция "replace" или "blend").
    • zsort="ranging" - наиболее быстрое решение, но накладывает ограничения на 3D модели
    • zsort="z-buffer" - наиболее точный способ, но медленный с прорисовкой программного обеспечения (не используется в текущей версии Aston).
    Атрибут rbuffer_size задает размер буфера ранжирования (используется, когда zsort="ranging"). Сортировка по z-ранжированию может некорректно работать, если это значение меньше общего количества полигонов в сцене.
    Атрибут flush_cacheиспользуется для сортировки полигонов нескольких 3D объектов. Установите flush_cache="0" если object3d не последний в сцене.
    Атрибут mag_filter назначает фильтр увеличения тукстуры.
    • mag_filter="nearest" - 'nearest neighbour' (ближайший сосед) - быстрый, не точный
    • mag_filter="linear" - би-линейная фильтрация, наилучший, но медленный
    Атрибут z_adjust дает возможность коррекции перспективы:
    • z_adjust="none" - быстрый, но результат прорисовки может быть искажен
    • z_adjust="y_only" - корректирует только по оси Y, достаточно быстр
    • z_adjust="full" - точен, но медленный
    • z_adjust="fast" - наиболее быстрый метод
    • z_adjust="best" - наиболее оптимальный метод
    • z_adjust="quality" - наиболее точный метод

    Следующая секция camera:

    ...
      <skin name="background">
          <object3d model="pot.3ds">
              <camera fov="1" aspect="1.25"/>
              ...
              ...
          </object3d>
      </skin>
    ...
    

    Атрибут fov задает поле угла зрения. Рекомендуемые значения принадлежат интервалу (0.5 - 2.0).
    Атрибут aspect задает отношения ширина/высота для поля зрения 3D-прорисовки. Например, если сцена ббыла нарисована на обоях с разрешением 1024x768, тогда соотношение размеров будет 1024 / 768 = 1.25

    Теперь рассмотрим, как разместить 3D-объект перед виртуальной камерой. Для этого нам нужно трансформировать координаты объекта. Основные трансформации: передвинуть (move), масштабировать (sceale) и повернуть (rotate). Типичная последовательность трансформаций выглядит так:

    ...
      <skin name="background">
          <object3d model="pot.3ds">
              ...
              ...
              <transform op="scale" x="zoom" y="zoom" z="zoom"/>
              <transform op="rotate" x="90"/>
              <transform op="rotate" y="alpha"/>
              <transform op="move" z="25"/>
          </object3d>
      </skin>
    ...
    

    В данном примере присутствуют следующие трансформации:
    • масштабирование по анимационной переменной "zoom"
    • поворот на 90o по оси X
    • поворот по анимационной переменной "alpha" по оси Y
    • смещение вдоль оси Z на 25 условных единиц (поместить перед виртуальной камерой)
    Анимационные переменные используются для интерактивности и анимационных эффектов.
    Например, рассмотрим объявление переменной "alpha":

    ...
      <skin name="background">
          <anim_vars name="a">
              <frame alpha="0"/>
              <frame alpha="360"/>
              <sequence name="anim_Spawn">
                  <loop/>
                  <frame render="0" fps="0.1"/>
                  <frame render="1" fps="0"/>
              </sequence>
          </anim_vars>
      </skin>
    ...
    

    Это выглядит как объявление анимации для изображений. Секция anim_vars содержит список кадров и список последовательностей. Атрибут name="a" должен задавать уникальное имя для каждой секции anim_vars (это имя - название контекста анимации, а не переменная!) Каждый frame (кадр) содержит список имен переменных как атрибут с его значениями. Последовательности, объявленные таким же образом, как и для случая анимации изображения.
    Посмотрите на пример этого индикатора для виджета Часы:

    ...
      <skin name="face">
          <anim_vars name="1">
              <frame a_hour="0"/>
              <frame a_hour="720"/>          
              <indicator name="hour"/>
          </anim_vars>
          
          <anim_vars name="2">
              <frame a_minute="0"/>
              <frame a_minute="360"/>          
              <indicator name="minute"/>
          </anim_vars>
      </skin>
    ...
    

    Как вы уже догадались, "a_hour" и "a_minute" могут быть использованы как анимационные переменные для углов поворота стрелок часов.

    И наконец, рассмотрим метод задания освещения динамически освещаемых объектов (когда light_mode="flat"):

    ...
      <skin name="background">
          <object3d model="pot.3ds">
              <material light_mode="flat" diffuse_source="none"/>
              <light type="ambient" color="0xFF111111"/>
              <light type="directional" dir_x="-1" dir_y="-3" dir_z="3" color="0xFF017eff"/>
              <light type="directional" dir_x="1"  dir_y="3"  dir_z="3" color="0xFF002266"/>
              ...
              ...
              ...
          </object3d>
      </skin>
    ...
    

    Список источников света объявлен в секциях light. Атрибут type задает тип света:

    • type="ambient" для рассеяного света
    • type="directional" для направленного источника освещения
    Направление освещения задается через dir_x, dir_y и dir_z (когда type="directional").

    back


     
         
    Copyright © 1999-2023 Gladiators Software