Pass
{
Cull Back
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float _FloatAngle;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float4 tangent : TANGENT;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
float angle=_Time.z;
float xx=v.vertex.x*cos(angle)+sin(angle)*v.vertex.z;
float zz=-v.vertex.x*sin(angle)+cos(angle)*v.vertex.z;
v.vertex.x=xx;
v.vertex.z=zz;
v.vertex.xyzw+=v.tangent*_FloatAngle;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
fixed2 tmp=i.uv;
tmp.y+=_Time.x;
fixed4 col = tex2D(_MainTex, tmp);
// just invert the colors
//col.rgb = 1 - col.rgb;
return col;
}
ENDCG
}
```
在用编写物体围绕自身y轴自转的时候,一开始只有一个Cube,其原始位置是(0,0,0),其自转是正确的;
之后将Cube移出一点位置,使其脱离坐标原点,效果也是正常;
但是!在拥有2个及两个以上Cube的时候,两个Cube的自转都是围绕着世界的原点进行旋转;
这里有一个疑问,为什么一个可以,而多个之后就要围绕着世界轴旋转?
而且我将材质添加到Sphere的时候,无论有几个Sphere都是围绕着自身的y轴旋转
这里有另外一个疑问,为什么Sphere和Cube会出现两种不同的结果?
关于Shader2.0中物体自转的问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-07 12:30关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
Shader2.0中物体自转的原因分析
Shader2.0中物体自转时,实际上是通过一种称为“世界变换”(World Transformation)的方法来实现的。这种变换包括了对象相对于视图中心的平移、缩放以及旋转。问题解决方法
如果你想要控制多个对象绕自身轴旋转,你需要确保所有这些对象都共享相同的“世界变换”。这意味着你不能只是改变其中一个对象的旋转参数,因为这会影响到其他所有对象的旋转。
要解决这个问题,你可以:
-
创建一个全局旋转矩阵:首先定义一个全局旋转矩阵,这个矩阵包含了所有对象的旋转信息。例如:
float4x4 worldRotationMatrix = float4x4.identity; // 初始化为单位矩阵 -
更新全局旋转矩阵:当有新的对象被添加或删除时,都需要更新全局旋转矩阵。这可以通过遍历所有对象,并对它们的旋转信息进行加权平均操作完成。例如:
for (int i = 0; i < objectCount; i++) { Vector3 rotation = objects[i].rotation; Vector3 newRotation = worldRotationMatrix * rotation; objects[i].SetRotation(newRotation); } -
应用全局旋转矩阵:最后一步是将全局旋转矩阵应用到所有对象上,以达到预期的效果。这通常通过使用
worldMatrix * objectMatrix或者worldMatrix * transform等操作来实现。例如:foreach (Transform objectTransform in objects) { objectTransform.worldMatrix = worldMatrix; }
注意:这种方法适用于单体立方体或球体等简单几何形状的情况,对于复杂的多边形场景可能无法直接做到精确控制。在处理复杂场景时,可能需要考虑使用更高级的渲染技术或工具,比如
Raycast系统来模拟物理碰撞和动态运动。关于物体自转与材质的关系
不同类型的材质可能会对物体的自转行为产生影响。例如,金属材质(Metal)可能会增加物体的摩擦力,导致其移动速度减慢,从而限制了物体的旋转范围。因此,在某些情况下,即使没有启用材质的自旋选项,也可能看到物体围绕自身轴旋转的现象。
总结来说,
Shader2.0中的物体自转是由全局旋转矩阵决定的,而旋转的方向取决于物体的相对位置关系。为了获得理想的结果,需要合理管理和调整各个对象的旋转信息。解决 无用评论 打赏 举报-