【问题标题】:Apply a vertex shader on a mesh, independently of its position在网格上应用顶点着色器,与其位置无关
【发布时间】:2022-01-02 14:43:13
【问题描述】:

我想使用顶点着色器在我的网格上应用一些运动。我注意到,当我在场景中平移网格时,它也会移动简单正弦波的位置。 即使我在我的场景中平移我的网格,我也希望我的两个网格上都有相同的正弦波。

我在这篇文章中获得了第一个线索:Keep movement of vertexShader despite of its mesh rotation

我试图重现此解决方案,但我遗漏了一些东西。这是我的着色器:

        uniform float uTime;
        
        void main()
        {
            mat4 translate = mat4(1.0);

            vec4 modelPosition = modelMatrix * vec4(position, 1.0);
            
            translate[3].y = sin(uTime * 2. + modelPosition.x *1.);

            vec4 modelPosition2 = modelMatrix * translate * vec4(position, 1.0);

            gl_Position = projectionMatrix * viewMatrix * modelPosition2;
        }

我认为我不应该在 translate[3].y 行上应用我的 modelPosition.x,但我不知道该调用什么。正如你在这个 codepen 上看到的,我的飞机看起来不一样:https://codepen.io/michaelgrc/pen/GRMxYBm

有人看到我错过了什么吗?非常感谢

【问题讨论】:

  • translate[3].y = sin(uTime * 2. + position.x.); ?不过我不知道你的最终目标。

标签: javascript three.js vertex-shader


【解决方案1】:

我需要使用position.x 而不是modelPosition.x 来解决我的问题:

translate[3].y = sin(uTime * 2. + position.x);

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多