1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Не работает шейдер.

Тема в разделе "Mental Ray", создана пользователем Trofimm, 13 дек 2012.

Модераторы: Alex Kras
  1. Trofimm

    Trofimm Знаток

    С нами с:
    05.12.2005
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    22
    Всем привет.
    Компилю шейдер для нормалмапа по книжке. Решил добавить гамма-коррекцию. Но на рендере шейдер белый, рулька "Programm_gamma" не влияет на результат. Если в коде, вместо "gamma" ставлю своё число - работает.

    Почему не передаётся значение от сюда?:
    gamma = *mi_eval_scalar (&params->Programm_gamma);

    _________________________________________________________________________

    #include "shader.h"
    #include "math.h"


    struct Normals_as_color
    {
    miColor color;
    miScalar Programm_gamma;
    };


    extern "C"
    {
    DLLEXPORT int TM_Normals_as_color_version(void)
    {
    return (1);
    }

    DLLEXPORT miBoolean TM_Normals_as_color (
    miColor *result, miState *state, struct Normals_as_color *params )
    {
    miScalar gamma, current_gamma_r, current_gamma_g, current_gamma_b;
    miVector normal;
    mi_vector_to_object (state, &normal, &state->normal);
    mi_vector_normalize (&normal);

    gamma = *mi_eval_scalar (&params->Programm_gamma);

    current_gamma_r = normal.x / 2.0 + 0.5;
    current_gamma_g = normal.y / 2.0 + 0.5;
    current_gamma_b = normal.z / 2.0 + 0.5;

    result->r = pow (current_gamma_r, gamma);
    result->g = pow (current_gamma_g, gamma);
    result->b = pow (current_gamma_b, gamma);

    result->a = 1.0;

    return miTRUE;
    }
    }
     
Модераторы: Alex Kras

Поделиться этой страницей