Показать сообщение отдельно
Старый 27.11.2013, 10:57   #77
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Clear Engine (Понятный движок)

Заметил такую вещь. Исследовал модели освещения и юзал примеры шейдеров. Так вот что означает glModelViewMatrix? Это view_matrix * model_matrix или только model_matrix? Потому что если заюзать view_matrix * model_matrix, то изображение становится не правильное...

Еще: почему такой странный эффект может быть? Чем дальше двигаем свет, тем ярче светит O_o
http://rutube.ru/video/7f47e12f23b3c...c964c7730847c/

const std::string NORMAL_VS =
        
"varying vec3 l;\n"
        "varying vec3 v;\n"
        "varying vec3 n;\n"
        "attribute vec4 POSITION;\n"
        "attribute vec3 NORMAL;\n"
        "attribute vec2 TEXCOORD;\n"
        "attribute vec3 TANGENT;\n"
        "attribute vec3 BINORMAL;\n"
        "uniform vec3 LIGHTS_POSITION[8];\n"
        "uniform vec3 CAMERA_POSITION;\n"
        "uniform mat4 MODEL_VIEW_PROJ_MATRIX;\n"
        "uniform mat4 MODEL_MATRIX;\n"
        "uniform mat4 VIEW_MATRIX;\n"
        "uniform mat3 NORMAL_MATRIX;\n"
        "varying vec2 texcoord;\n"
        "void main(void){\n"
        "    vec3 p = vec3(MODEL_MATRIX * POSITION);\n"
        "    l = normalize(vec3(LIGHTS_POSITION[0]) - p ); \n"
        "    v = normalize(vec3(CAMERA_POSITION) - p );\n"
        "    n = normalize(NORMAL_MATRIX * NORMAL);\n"
        "    //mat3 tbn = mat3(TANGENT, BINORMAL, NORMAL);\n"
        "    //l = tbn * l;\n"
        "    gl_Position = MODEL_VIEW_PROJ_MATRIX * POSITION;\n"
        "    texcoord = TEXCOORD;\n"
        "}\n"
;

const 
std::string NORMAL_FS =
        
"uniform sampler2D TEXTURE_DIFFUSE;\n"
        "uniform sampler2D TEXTURE_NORMAL;\n"
        "uniform vec4 LIGHTS_DIFFUSE[8];\n"
        "uniform vec4 LIGHTS_SPECULAR[8];\n"
        "varying vec3 l;\n"
        "varying vec3 v;\n"
        "varying vec3 n;\n"
        "varying vec2 texcoord;\n"
        "void main (void)\n"
        "{\n"
        "    vec4 diffc = texture2D(TEXTURE_DIFFUSE, texcoord);\n"
        "    vec4 bumpc = texture2D(TEXTURE_NORMAL, texcoord);\n"
        "    vec3 bumpn = normalize((bumpc.rgb * 2.0 - 1.0) * vec3(1.0, 1.0, 1.0));"
        "    vec3 h = normalize(v + l);\n"
        "    const float specPower = 20.0;\n"
        "    vec3 n2   = normalize ( -n );\n"
        "    vec3 bn2  = normalize ( -bumpn );\n"
        "    vec3 l2   = normalize ( l );\n"
        "    vec3 h2   = normalize ( h );\n"
        "    vec4 diff = LIGHTS_DIFFUSE[0] * max ( dot ( n2, l2 ), 0.0 );\n"
        "    vec4 diffn = LIGHTS_DIFFUSE[0] * max ( dot ( bn2, l2 ), 0.0 );\n"
        "    vec4 spec = LIGHTS_SPECULAR[0] * pow ( max ( dot ( n2, h2 ), 0.0 ), specPower );\n"
        "    gl_FragColor = diff * diffc + spec;\n"
        "}\n"


Последний раз редактировалось pozitiffcat, 27.11.2013 в 14:07.
(Offline)
 
Ответить с цитированием