Проблемы с добавлением шейдера - PullRequest
0 голосов
/ 13 февраля 2019

Я написал шейдер и хочу проверить его на codepen.Теперь у меня нет ошибок в консоли, но все равно не работает.Что я делаю не так?

Вот мой вершинный шейдер.

<script id="vertexShader" type="shader">

void main() {
  vUv = (uModel * vec3(position.xy, 1.)).xy;
    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
} 

И фрагментный шейдер

<script id="fragmentShader" type="shader">
uniform vec2 uResolution;
uniform sampler2D uTexture1;
varying vec2 vUv;
  uniform mat3 uModel;
  varying vec2 vUv;

void main() {
    vec2 position = gl_FragCoord.xy / uResolution;

    float ratio = 0.3;
    float progress = .3;

    float layer1L = abs(step(.3, position.x) - 1.);
    float layer1R = step(.7, position.x);
    float layer2L = abs(step(.1, position.x) - 1.);
    float layer2R = step(.9, position.x);
    float layer3L = abs(step(.06, position.x) - 1.);
    float layer3R = step(.94, position.x);
    float layer4L = abs(step(.02, position.x) - 1.);
    float layer4R = step(.98, position.x);

    // texture A
    float dx1 = 0.;
    dx1 += layer1L * .5 * ratio;
    dx1 -= layer1R * .5 * ratio;
    dx1 += layer2L * .25 * ratio;
    dx1 -= layer2R * .25 * ratio;
    dx1 += layer3L * .1 * ratio;
    dx1 -= layer3R * .1 * ratio;
    dx1 += layer4L * .06 * ratio;
    dx1 -= layer4R * .06 * ratio;

    vec4 texA = texture2D(uTexture1, vec2(vUv.x + dx1, vUv.y));

    vec4 fcolor = texA;

    gl_FragColor = fcolor;
}
</script>

https://codepen.io/nadjakoroleva/pen/Vgdjdx

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема в том, что вы создаете Mesh с двумя материалами.

var mesh = new THREE.Mesh( geometry, material2, material );

Третий аргумент material практически ничего не делает, поэтому все, что вы делаете в вершинных и фрагментных шейдерах, не отображается.Вам нужно передать только ваш ShaderMaterial в конструктор Mesh, чтобы увидеть результаты:

var mesh = new THREE.Mesh( geometry, material );

...