В предыдущих версиях геометрического ядра C3D Modeler информация о цвете тела и дочерних топологических объектах (гранях, ребер, вершин) сохранялась в атрибуте MbColor. В данном атрибуте возможно хранение четырех компонентов цвета в модели RGBA. Однако для визуализации объекта в 3D-приложениях используется больше параметров и при их отсутствии используются значения по умолчанию, что в некоторых случаях приводит к различию получаемых цветов при открытии модели в разных программах.
Для сохранения всех необходимых для визуализации данных теперь будет использоваться только атрибут MbVisual, который содержит в себе подробную информацию о каждом компоненте визуализации.
- Цвет общего фона (ambient) в формате RED, GREEN, BLUE и коэффициент общего фона в диапазоне 0.0–1.0 (0–255 в uint8).
- Цвет диффузного отражения (diffuse) в формате RED, GREEN, BLUE и коэффициент диффузного отражения в диапазоне 0.0–1.0 (0–255 в uint8).
- Цвет зеркального отражения (specular) в формате RED, GREEN, BLUE и коэффициент зеркального отражения света в диапазоне 0.0–1.0 (0–255 в uint8).
- Цвет излучения (emission) в формате RED, GREEN, BLUE и коэффициент излучения в диапазоне 0.0–1.0 (0–255 в uint8).
- Показатель степени в законе зеркального отражения (shininess) в диапазоне 0–128 (uint8).
- Коэффициент непрозрачности (коэффициент суммарного отражения — opacity) в диапазоне 0.0–1.0 (0–255 в uint8).
- Коэффициент зеркального отражения объектов в диапазоне 0.0–1.0 (0–255 в uint8).
Для хранения компонентов 1–4 используется тип MbRGBA, в котором в полях rgb хранится значение цвета, а в поле alpha — коэффициент использования.
В код геометрического ядра C3D были внесены следующие изменения по работе с цветом объекта.
- При задании цвета для тела (грани, ребра, вершины) методом MbAttributeContainer::SetColor( int iR, int iG, int iB ) получается атрибут MbVisual, если его нет, то он создается. В компонент _diffuse записывается цвет RGB, в альфа-канал записывается 255 (1.0, 100%).
- При получении цвета методом uint32 MbAttributeContainer::GetColor() const
Получаем атрибут MbVisual, если его нет — возвращается цвет по умолчанию (MB_C3DCOLOR). Если атрибут есть, берем цвет из компонента _diffuse (RGB). - При чтении файла, где есть только MbVisual (новая версия), все атрибуты цвета и коэффициенты смешивания используются как описано в спецификации MbVisual.
- При чтении файла предыдущих версий, где содержится только MbColor, создается новый атрибут MbVisual, в компонент _diffuse записывается цвет из MbColor, в альфа канал записывается 255 (1.0, 100%). Атрибут MbColor удаляется.
- При чтении файла предыдущих версий, содержащего MbColor и MbVisual, где в MbVisual в каждом компоненте (RGB) содержится коэффициент смешивания — предыдущий вариант использования атрибута MbVisual, а в MbColor сохранен основной цвет, выполняются следующие действия.
- Создается новый атрибут MbVisual. Во все компоненты (_ambient, _diffuse, _specularity и _emission) записывается основной цвет из прочитанного MbColor.
- В альфа-канал каждого из компонентов записывается значение из прочитанного из файла MbVisual.
- Прочитанные атрибуты MbColor и MbVisual удаляются, остается только новый атрибут MbVisual.
- При сохранении файла C3D для старой версии создается атрибут MbColor, в который записываем цвет из _diffuse нового атрибута MbVisual, далее создается еще один атрибут MbVisual, в который записываются коэффициенты из альфа-каналов компонентов имеющегося атрибута MbVisual. Атрибут MbVisual, который был в модели (новый вариант), удаляется и записывается файл в старом формате.
- Класс MbColor — помечен как устаревший и не рекомендуется к использованию. Вместо него необходимо использовать атрибут MbVisual.
Максим Кулагин
Руководитель отдела технической поддержки
C3D Labs