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

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

0 голосов
/ 13 февраля 2019

На самом деле это очень просто.Вам также необходимо изменить значение x.

            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);

enter image description here

...