Как бы я изменил этот код шейдера, чтобы изменить ось, вокруг которой он вращается?

Я играю с кодом в этом примере игры 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

Другие вопросы по тегам