您的位置:首页 > 移动开发 > Unity3D

Unity一个旋转的Sharder

2015-11-13 21:08 549 查看
如果有看不懂的参数,请参看http://blog.csdn.net/u011244737/article/details/49819751

将Wrap Mode调整成Clamp



应用到的数学知识











Shader "Custom/Simple"

{

//------------------------------------【属性值】------------------------------------

Properties

{

//主颜色

_Color("Color", Color) = (1,1,1,1)

//主纹理

_MainTex("Base (RGB)", 2D) = "white" {}

_RSpeed("RotateSpeed" ,Range(1,100))=30

}

SubShader

{

//渲染队列为透明 渲染类型为透明 忽略投影

Tags{"Queue" = "Transparent" "RenderType"="Transparent" "IgnoreProjector"="True"}

//alpha混合

Blend SrcAlpha OneMinusSrcAlpha

Pass

{

//正反面均可显示

Name "Simple"

Cull off

CGPROGRAM

//顶点处理器

#pragma vertex vert

//片断处理器

#pragma fragment frag

#include "UnityCG.cginc"

float4 _Color;

sampler2D _MainTex;

float _RSpeed;

struct v2f

{

float4 pos:POSITION;

float4 uv:TEXCOORD0;

};

v2f vert(appdata_base v)

{

v2f o;

//mul HLSL内置函数 返回输入矩阵的积

o.pos = mul(UNITY_MATRIX_MVP,v.vertex);

o.uv = v.texcoord;

return o;

}

half4 frag(v2f i):COLOR

{

//将中心点设置为(0.5,0.5)

float2 uv=i.uv.xy - float2(0.5,0.5);

float2 rotate=float2(cos(_RSpeed * _Time.x),sin(_RSpeed * _Time.x));

//逆时针旋转

uv=float2(uv.x * rotate.x - uv.y * rotate.y,uv.x * rotate.y + uv.y * rotate.x);

//顺时针旋转 uv=float2(uv.x * rotate.x + uv.y * rotate.y,uv.x * rotate.y - uv.y * rotate.x);

uv += float2(0.5,0.5 );

//tex2D 2D纹理的查询

half4 c= tex2D(_MainTex,uv) * _Color;

return c;

}

ENDCG

}

}

FallBack "Diffuse"

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: