Как бы я изменил этот код шейдера, чтобы изменить ось, вокруг которой он вращается?
Я играю с кодом в этом примере игры Unity, чтобы узнать, как преобразовать объекты с помощью шейдеров. В игре используются шейдеры, чтобы изогнуть мир, и один из этих шейдеров также заставляет объекты вращаться вокруг своей оси Y. Я хотел бы изменить его, чтобы вместо этого вращать объект вокруг его оси z.
Я пытался поменять местами оси z и y, но хотя он и заставляет цилиндр, который я использую для этого эксперимента, вращаться вокруг оси z, он также вызывает растяжение цилиндра. Только изменение rotVert.z на rotVert.y заставляет цилиндр вращаться на своей стороне под углом 45 градусов. Может кто-нибудь сказать мне, где я иду не так?
Вот код, который заставляет объект вращаться вокруг оси Y:
float4 rotVert = v.vertex;
rotVert.z = v.vertex.z * cos(_Time.y * 3.14f) - v.vertex.x * sin(_Time.y * 3.14f);
rotVert.x = v.vertex.z * sin(_Time.y * 3.14f) + v.vertex.x * cos(_Time.y * 3.14f);
o.vertex = UnityObjectToClipPos(rotVert);
1 ответ
На самом деле это очень просто. Вам также необходимо изменить значение х.
float4 rotVert = v.vertex;
rotVert.y = v.vertex.y * cos(_Time.y * 3.14f) - v.vertex.x * sin(_Time.y * 3.14f);
rotVert.x = v.vertex.y * sin(_Time.y * 3.14f) + v.vertex.x * cos(_Time.y * 3.14f);
o.vertex = UnityObjectToClipPos(rotVert);
https://stackru.co m/images/55ece4754480d32baf00d9f6ddbf0a51e13cb662.gif