0

我正在玩这个 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);
4

1 回答 1

0

事实上,这很简单。您还需要修改 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);

在此处输入图像描述

于 2019-02-13T08:33:33.340 回答