1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Blend blend

Автор: Kristobal Hozevich Hunta · 16 янв 2013 · ·
  1. Значит, что происходит, когда 4-ый движок встречает такую decal-текстурку (рис № 1):

    1. За ее обработку перед выводом в frame buffer (FB ну т.е. на экран) отвечает такой фрагмент в decals.mtr:

    {
    blend gl_zero, gl_one_minus_src_color
    map textures/decals/blue_on_black_d.tga // (по смыслу это типа кровь, но почему голубая? См. далее)
    }

    2. Общая формула для обработки:

    .tga -> src*(blend parm1) + dst*(blend parm2) -> FB

    .tga имеет разрядность 24bit, т.е. три канала (RGB ) по 8bit каждый.

    3. Значения:

    gl_zero = 0 (константа)

    gl_one_minus_src_color = FFh - R(x), FFh - G(y), FFh - B(z),

    где:

    gl_one_ = FFh = 255
    _src_color (голубой) = R(x), G(y), B(z) = R(103), G(248), B(248)
    _src_color (черный) = R(x), G(y), B(z) = R(0), G(0), B(0)

    Таким образом:

    gl_one_minus_src_color (для голубого) = R(152), G(7), B(7) - это бордовый.
    gl_one_minus_src_color (для черного) = R(255), G(255), B(255) - это белый.

    4. Подстановка:

    .tga -> src*(blend parm1) + dst*(blend parm2) -> FB

    .tga -> src*(gl_zero) + dst*(gl_one_minus_src_color) -> FB

    .tga -> src*(0) + dst*(255 - src_color) -> FB

    .tga -> dst*(R(152), G(7), B(7)) -> FB - этот пискель инвертирован из голубого в бордовый и перемножен с пикселом из FB (dst)

    .tga -> dst*(R(255), G(255), B(255)) -> FB - этот пискель инвертирован из черного в белый и перемножен с пикселом из FB (dst)

    5. Результирующая картинка для вывода - см. рис. № 2.

    Т.е. обычная инверсия 8-битного цвета с использованием FFh (вспомни цикличность в ZX Spectrum).

    N.B. В GIMP достигается путем подготовки нужной картинки (рис.2), затем "Цвет" - "Инвертировать". На выходе - рис.1.

    N.B.-2: Сквозь это пятно будут просвечивать элементы поверхности, на которую оно наносится. Как - см. "Умножение цветов RGB".

    [​IMG][​IMG]

Комментарии

  1. Kristobal Hozevich Hunta
    Умножение цветов RGB на примере R:

    R(230)*R(130) = R(117).

    Как это получается:

    R(230)*R(130) = R(90%)*R(51%), где 100%=255.

    Т.е. R(230) = R((100%/255)*230) = R(90,1%) = R(90%). После запятой отбрасываем.
    Соответственно для R(130).

    R(90%)*R(51%) = R(0,9)*R(0,51) = R(0,459)= R(45,9%).

    R(45,9%) = R((255/100%)*45,9%) = R(117). Дробную часть отбрасываем.

    Умножение, где один из цветов - черный (белый):

    1. Черный умножить на любой: R(0)*R(x) = 0 (всегда черный).

    2. Белый умножить на любой: R(100%)*R(x) = 1*R(x) = R(x) (второй цвет без изменений).


    В GIMP: создать два слоя, выделить верхний, в выпадающем меню "Режим" диалога "Слои" выбрать "Умножение".
Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление