Xtreme3D Community
Проблема с шейдером - Версия для печати

+- Xtreme3D Community (https://xtreme3d.ru/forums)
+-- Форум Xtreme3D (https://xtreme3d.ru/forums/forumdisplay.php?fid=3)
+--- Форум Вопросы и ответы (https://xtreme3d.ru/forums/forumdisplay.php?fid=6)
+--- Темы: Проблема с шейдером (/showthread.php?tid=49)



Проблема с шейдером - BANEBYTE - 01-12-2020

Попытался написать шейдер освещения на GLSL. Сделал все как по инструкции, но почему-то на выходе получаю сплошной черный цвет.
Вот код

Вертексный шейдер
Код:
[== Неизвестный ==]
varying vec3 normal;
varying vec3 position;

void main() {
    normal = gl_NormalMatrix * gl_Normal;
    position = (gl_ModelViewMatrix * gl_Vertex).xyz;
    gl_Position = ftransform();
}

Пиксельный шейдер
Код:
[== Неизвестный ==]
varying vec3 normal;
varying vec3 position;

vec3 light_pos;

void main() {
    light_pos = vec3(0.0, 10.0, 0.0);
    vec3 N = normalize(normal);
    vec3 LN = normalize(light_pos - position);
    float L = max(dot(N, LN), 0.0);
    vec3 color = gl_FrontMaterial.diffuse * L;
    gl_FragColor = vec4(color, 1.0);
}



Проблема с шейдером - Gecko - 01-15-2020

light_pos нужно трансформировать в видовое пространство. Правильный шейдер будет выглядеть так:

Код:
[== c++ ==]
varying vec3 normal;
varying vec3 position;
varying vec3 light;
uniform mat4 viewMatrix;

const vec4 light_pos = vec4(0.0, 10.0, 0.0, 1.0);

void main()
{
    normal = gl_NormalMatrix * gl_Normal;
    position = (gl_ModelViewMatrix * gl_Vertex).xyz;
    light = (viewMatrix * light_pos).xyz;
    gl_Position = ftransform();
}

Код:
[== c++ ==]
varying vec3 normal;
varying vec3 position;
varying vec3 light;

void main()
{
    vec3 N = normalize(normal);
    vec3 LN = normalize(light - position);
    float L = max(dot(N, LN), 0.0);
    vec3 color = gl_FrontMaterial.diffuse * L;
    gl_FragColor = vec4(color, 1.0);
}

Соответственно, надо также передать в шейдер видовую матрицу:

Код:
[== c++ ==]
paramViewMatrix = GLSLShaderCreateParameter(shader, 'viewMatrix');
GLSLShaderSetParameterViewMatrix(paramViewMatrix);



Проблема с шейдером - BANEBYTE - 01-15-2020

Спасибо за ответ. Но текстура почему то не отображается. Поверхность просто белого цвета


Проблема с шейдером - Gecko - 01-18-2020

Текстуру надо тоже передавать в шейдер и сэмплировать функцией texture2D, читай внимательнее справку:

Код:
[== c++ ==]
uniform sampler2D diffuseTexture;

void main()
{
    // ...
    vec4 texColor = texture2D(diffuseTexture, gl_TexCoord[0].xy);
    gl_FragColor = vec4(color * texColor.rgb, texColor.a);
}

Код:
[== c++ ==]
paramDiffuseTexture = GLSLShaderCreateParameter(shader, 'diffuseTexture');
GLSLShaderSetParameterTexture(paramDiffuseTexture, '', 0);



Проблема с шейдером - van88268 - 02-02-2020

Дарова всем ) Cool
BANEBYTE , над чем работаешь ? Smile
Gecko , будут ли новости по обновам и дай ссылку на свой проект D .


Проблема с шейдером - BANEBYTE - 02-03-2020

Работаю над редактором для 3д игры. Но сейчас забросил, так как пишу свой двиг с нуля на OpenGL


Проблема с шейдером - van88268 - 02-09-2020

BANEBYTE Написал:Работаю над редактором для 3д игры. Но сейчас забросил, так как пишу свой двиг с нуля на OpenGL
Круто Бро удачи , ссылку или группу на инфу о своем двиге дропни )


Проблема с шейдером - Gecko - 02-22-2020

van88268 Написал:Gecko , будут ли новости по обновам и дай ссылку на свой проект D .

Пока трудно сказать, когда у меня будет время вернуться к разработке, но вроде FireRun работает над версией 3.9, так что все возможно.

Я сейчас пишу свой движок, Dagon, на OpenGL 4: https://github.com/gecko0307/dagon, скоро как раз планирую выпустить очередную версию.

Также смотрю в сторону WebGPU - мне кажется, он имеет все шансы стать стандартным графическим API в будущем, вытеснив OpenGL, причем не только в вебе, но и в нативных приложениях. На каком-то этапе не исключено, что перейду на него, у меня уже есть его привязка для D.