04.03.2024 • C3D Modeler

С выходом ревизии 117978 в C3D Modeler изменен атрибут для хранения информации о цвете и оптических свойствах геометрических объектов

В предыдущих версиях геометрического ядра C3D Modeler информация о цвете тела и дочерних топологических объектах (гранях, ребер, вершин) сохранялась в атрибуте MbColor. В данном атрибуте возможно хранение четырех компонентов цвета в модели RGBA. Однако для визуализации объекта в 3D-приложениях используется больше параметров и при их отсутствии используются значения по умолчанию, что в некоторых случаях приводит к различию получаемых цветов при открытии модели в разных программах.

Для сохранения всех необходимых для визуализации данных теперь будет использоваться только атрибут MbVisual, который содержит в себе подробную информацию о каждом компоненте визуализации.

  1. Цвет общего фона (ambient) в формате RED, GREEN, BLUE и коэффициент общего фона в диапазоне 0.0–1.0 (0–255 в uint8).
  2. Цвет диффузного отражения (diffuse) в формате RED, GREEN, BLUE и коэффициент диффузного отражения в диапазоне 0.0–1.0 (0–255 в uint8).
  3. Цвет зеркального отражения (specular) в формате RED, GREEN, BLUE и коэффициент зеркального отражения света в диапазоне 0.0–1.0 (0–255 в uint8).
  4. Цвет излучения (emission) в формате RED, GREEN, BLUE и коэффициент излучения в диапазоне 0.0–1.0 (0–255 в uint8).
  5. Показатель степени в законе зеркального отражения (shininess) в диапазоне 0–128 (uint8).
  6. Коэффициент непрозрачности (коэффициент суммарного отражения — opacity) в диапазоне 0.0–1.0 (0–255 в uint8).
  7. Коэффициент зеркального отражения объектов в диапазоне 0.0–1.0 (0–255 в uint8).

Для хранения компонентов 1–4 используется тип MbRGBA, в котором в полях rgb хранится значение цвета, а в поле alpha — коэффициент использования.

В код геометрического ядра C3D были внесены следующие изменения по работе с цветом объекта.

  1. При задании цвета для тела (грани, ребра, вершины) методом MbAttributeContainer::SetColor( int iR, int iG, int iB ) получается атрибут MbVisual, если его нет, то он создается. В компонент _diffuse записывается цвет RGB, в альфа-канал записывается 255 (1.0, 100%).
  2. При получении цвета методом uint32 MbAttributeContainer::GetColor() const
    Получаем атрибут MbVisual, если его нет — возвращается цвет по умолчанию (MB_C3DCOLOR). Если атрибут есть, берем цвет из компонента _diffuse (RGB).
  3. При чтении файла, где есть только MbVisual (новая версия), все атрибуты цвета и коэффициенты смешивания используются как описано в спецификации MbVisual.
  4. При чтении файла предыдущих версий, где содержится только MbColor, создается новый атрибут MbVisual, в компонент _diffuse записывается цвет из MbColor, в альфа канал записывается 255 (1.0, 100%). Атрибут MbColor удаляется.
  5. При чтении файла предыдущих версий, содержащего MbColor и MbVisual, где в MbVisual в каждом компоненте (RGB) содержится коэффициент смешивания — предыдущий вариант использования атрибута MbVisual, а в MbColor сохранен основной цвет, выполняются следующие действия.
    1. Создается новый атрибут MbVisual. Во все компоненты (_ambient, _diffuse, _specularity и _emission) записывается основной цвет из прочитанного MbColor.
    2. В альфа-канал каждого из компонентов записывается значение из прочитанного из файла MbVisual.
    3. Прочитанные атрибуты MbColor и MbVisual удаляются, остается только новый атрибут MbVisual.
  6. При сохранении файла C3D для старой версии создается атрибут MbColor, в который записываем цвет из _diffuse нового атрибута MbVisual, далее создается еще один атрибут MbVisual, в который записываются коэффициенты из альфа-каналов компонентов имеющегося атрибута MbVisual. Атрибут MbVisual, который был в модели (новый вариант), удаляется и записывается файл в старом формате.
  7. Класс MbColor — помечен как устаревший и не рекомендуется к использованию. Вместо него необходимо использовать атрибут MbVisual.
Максим Кулагин, руководитель отдела технической поддержки, C3D Labs
Максим Кулагин
Руководитель отдела технической поддержки
C3D Labs
Поделиться материалом
Вверх