Вы не вошли.
Страницы 1
Попытался написать шейдер освещения на 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);
}
Редактировался BANEBYTE (2020-01-12 14:42:13)
Offline
light_pos нужно трансформировать в видовое пространство. Правильный шейдер будет выглядеть так:
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();
}
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);
}
Соответственно, надо также передать в шейдер видовую матрицу:
paramViewMatrix = GLSLShaderCreateParameter(shader, 'viewMatrix');
GLSLShaderSetParameterViewMatrix(paramViewMatrix);
Offline
Спасибо за ответ. Но текстура почему то не отображается. Поверхность просто белого цвета
Offline
Текстуру надо тоже передавать в шейдер и сэмплировать функцией texture2D, читай внимательнее справку:
uniform sampler2D diffuseTexture;
void main()
{
// ...
vec4 texColor = texture2D(diffuseTexture, gl_TexCoord[0].xy);
gl_FragColor = vec4(color * texColor.rgb, texColor.a);
}
paramDiffuseTexture = GLSLShaderCreateParameter(shader, 'diffuseTexture');
GLSLShaderSetParameterTexture(paramDiffuseTexture, '', 0);
Offline
Offline
Работаю над редактором для 3д игры. Но сейчас забросил, так как пишу свой двиг с нуля на OpenGL
Offline
Работаю над редактором для 3д игры. Но сейчас забросил, так как пишу свой двиг с нуля на OpenGL
Круто Бро удачи , ссылку или группу на инфу о своем двиге дропни )
..//(((
(((•.•))) YOU TUBE இ}~ڿڰۣ-ڰۣ~—
..◢█◣
_./..I
Offline
Gecko , будут ли новости по обновам и дай ссылку на свой проект D .
Пока трудно сказать, когда у меня будет время вернуться к разработке, но вроде FireRun работает над версией 3.9, так что все возможно.
Я сейчас пишу свой движок, Dagon, на OpenGL 4: https://github.com/gecko0307/dagon, скоро как раз планирую выпустить очередную версию.
Также смотрю в сторону WebGPU - мне кажется, он имеет все шансы стать стандартным графическим API в будущем, вытеснив OpenGL, причем не только в вебе, но и в нативных приложениях. На каком-то этапе не исключено, что перейду на него, у меня уже есть его привязка для D.
Offline
Страницы 1