Shader|坐标系

一、二维笛卡尔坐标系

Shader|坐标系

二、三维笛卡尔坐标系
  • 左手坐标系
  • 右手坐标系
  1. 大拇指、食指、中指分别对应了X、Y、Z轴;
  2. 通过左手法则与右手法则可以得知:在左手坐标系中,正方向为顺时针方向;在右手坐标系中,正方向为逆时针方向。
Shader|坐标系 Shader|坐标系 Shader|坐标系

三、Unity中的坐标系
  1. 在模型空间与世界空间中,unity使用左手坐标系;
  2. 在观察空间中Unity使用的是右手坐标系;

    观察空间:以摄像机为原点的坐标系。在这个坐标系中,摄像机的前方为Z轴的负向,Z轴坐标的减少意味着场景深度的增加,离摄像机越远。

例:在世界空间中,摄像机的坐标为(0,0,-5),球的坐标为(0,0,2),则在摄像机的观察空间下,摄像机的前方为负方向,该球的Z值为-7;在摄像机的模型空间下,该球的Z值为7。

四、相关软件中的坐标系

  1. 3ds Max中为右手坐标系。
  2. maya中为右手坐标系。






### 极坐标在Shader中的应用 #### 使用极坐标转换实现径向渐变效果 为了在着色器中利用极坐标系,可以将笛卡尔坐标 (x, y) 转换成极坐标 (r, θ),其中 r 表示半径距离而 θ 是角度。这种变换对于创建基于中心点辐射的效果非常有用。 ```hlsl float2 cartesianToPolar(float2 uv){ float angle = atan2(uv.y - 0.5, uv.x - 0.5); float radius = length(uv - 0.5); return float2(radius, angle); } ``` 上述代码片段展示了如何通过 `atan2` 函数计算给定点相对于屏幕中心的角度,并使用 `length()` 来获取该点到中心的距离[^1]。 #### 创建漩涡效果 当涉及到更复杂的视觉特效时,比如漩涡效果,则可以通过调整 UV 坐标的旋转来模拟物体围绕某一点打转的现象。这通常涉及到了时间变量 t 的引入以及对原始坐标的偏移操作: ```hlsl // 时间参数t用于控制动画速度 half timeOffset = _Time * speed; // 将UV映射至[-1,1]区间内方便处理 float2 centeredUV = input.uv.xy * 2 - 1; // 计算当前像素位置对应的极角并加上随时间变化的相位差 float theta = atan2(centeredUV.y ,centeredUV.x ) + timeOffset; // 根据新的θ重新计算xy分量从而形成扭曲后的纹理采样坐标 outputColor.rgb = tex2D(_MainTex,float2(cos(theta),sin(theta))*.5+.5).rgb; ``` 这段 HLSL 代码实现了基本的漩涡变形逻辑,它会随着渲染帧数增加不断改变图像上各点的位置,最终呈现出一种被吸入黑洞般的动态感[^2]。 #### 利用噪声函数增强自然度 为了让生成的结果看起来更加真实随机,在某些情况下还可以结合 Perlin 或 Simplex 这样的经典算法所提供的伪随机数值作为扰动因子加入进来,使得整个过程不再那么机械刻板: ```c // 添加Perlin Noise干扰项让漩涡边缘显得不那么生硬 float noiseValue = snoise(input.worldPos.xyz *_NoiseScale ); theta += noiseValue*_Strength ; ``` 这里运用了空间噪波技术(如 simplex noise),并通过调节强度系数 `_Strength` 和尺度比例 `_NoiseScale` 参数来自定义所期望达到的具体外观特征[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值