簡體   English   中英

盡管網格旋轉,但仍保持 vertexShader 的移動

[英]Keep movement of vertexShader despite of its mesh rotation

我只是沿着 y 軸移動立方體的頂點。

它工作正常,但是當我開始旋轉我的立方體時,運動保持在全局 y 軸上。 有誰知道如何防止這種行為? 意思是讓我的頂點的旋轉和移動分開?

謝謝

https://codepen.io/michaelgrc/pen/JjrMVPm?editors=0010

        void main()
        {
            vec4 modelPosition = modelMatrix * vec4(position, 1.0);

            float deplacement = sin(uTime) * 2.;
            modelPosition.y += deplacement;

            vec4 viewPosition = viewMatrix * modelPosition;
            vec4 projectedPosition = projectionMatrix * viewPosition;

            gl_Position = projectedPosition;
        }
    

矩陣運算不是可交換的。 你實際做的是在應用modelMatrix后翻譯 model :

v' = translate * modelMatrix * v;

但是,您必須先應用 tranaltion:

v' = modelMatrix * translate * v;

例如:

void main()
{
    mat4 translate = mat4(1.0);
    translate[3].y = sin(uTime) * 2.0;
    vec4 modelPosition = modelMatrix * translate * vec4(position, 1.0);

    gl_Position = projectionMatrix * viewMatrix * modelPosition;
}

請注意,同樣可以使用Group來實現。 必須將旋轉應用於Group並將平移應用於Group中的網格

group = new THREE.Group();
group.add(mesh);
mesh.position.y = offset;
group.rotation.x = angle_x;
group.rotation.y = angle_y;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM