![](/img/trans.png)
[英]Controlling Webgl Mesh Rotation with the camera movement. [three.js]
[英]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.