纳金网
标题:
一个显示物体截面的效果shader
[打印本页]
作者:
晃晃
时间:
2011-9-2 08:21
标题:
一个显示物体截面的效果shader
这个shader做讲解时可以用的到,可以方便的将物体以截面形式显示。
看下效果:
这个
下面是代码:
// 2 Pass Edition
Shader "cross_section_v004a"
{
Properties
{
section_depth ("section depth (x, y, z, depth)", vector) = (0,0,0,0.15)
section_color ("section color", color) = (0.5,0.1, 0.1, 1)
color_map ("color map", 2D) = "white" {}
}
SubShader
{
Pass
{
CULL OFF
CGPROGRAM //--------------
//#pragma target 3.0
#pragma vertex vertex_shader
#pragma fragment fragment_shader
#include "UnityCG.cginc"
uniform float4 section_depth;
uniform float4 section_color;
uniform sampler2D color_map;
float4x4 rotate(float3 r)
{
float3 c, s;
sincos(r.x, s.x, c.x);
sincos(r.y, s.y, c.y);
sincos(r.z, s.z, c.z);
return float4x4( c.y*c.z, -s.z, s.y, 0,
s.z, c.x*c.z, -s.x, 0,
-s.y, s.x, c.x*c.y, 0,
0, 0, 0, 1 );
}
s***ct a2v
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD;
float3 normal : NORMAL;
};
s***ct v2f
{
float4 position : POSITION;
float2 texcoord : TEXCOORD0;
float4 normal : TEXCOORD1;
float4 vertex : TEXCOORD2;
float4 mask : TEXCOORD3;
};
v2f vertex_shader( a2v IN )
{
v2f OUT;
float4x4 r = rotate(radians(section_depth.xyz) +_SinTime.xyz);
float4 c = float4(IN.vertex.xyz,1);
OUT.mask = mul(r, c);
OUT.position = mul(glstate.matrix.mvp, IN.vertex);
OUT.texcoord = IN.texcoord;
r *= float4x4( 1,-1,-1, 0,
-1, 1,-1, 0,
-1,-1, 1, 0,
0, 0, 0, 1 ); // the section_depth.xyz need to be inverted !
OUT.normal = mul(r, float4(1,0,0,1));
OUT.vertex = IN.vertex;
return OUT;
}
void fragment_shader( v2f IN,
out float4 finalcolor : COLOR)
{
if(IN.mask.x > section_depth.w)
discard;
float3 N = IN.normal.xyz;
N = mul(glstate.matrix.invtrans.modelview[0], float4(N, 1));
float diffuse = saturate(dot(glstate.light[0].position, N));
finalcolor = float4(0,0,0,1);
finalcolor.xyz = section_color *(diffuse *0.6 +0.4);
}
ENDCG //--------------
} // Pass
//---------------------------------------------------------------------------------
Pass
{
CULL BACK
CGPROGRAM //--------------
#pragma vertex vertex_shader
#pragma fragment fragment_shader
#include "UnityCG.cginc"
uniform float4 section_depth;
uniform float4 section_color;
uniform sampler2D color_map;
float4x4 rotate(float3 r)
{
float3 c, s;
sincos(r.x, s.x, c.x);
sincos(r.y, s.y, c.y);
sincos(r.z, s.z, c.z);
return float4x4( c.y*c.z, -s.z, s.y, 0,
s.z, c.x*c.z, -s.x, 0,
-s.y, s.x, c.x*c.y, 0,
0, 0, 0, 1 );
}
s***ct a2v
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD;
float3 normal : NORMAL;
};
s***ct v2f
{
float4 position : POSITION;
float2 texcoord : TEXCOORD0;
float3 normal : TEXCOORD1;
float4 vertex : TEXCOORD2;
float4 mask : TEXCOORD3;
};
v2f vertex_shader( a2v IN )
{
v2f OUT;
float4x4 r = rotate(radians(section_depth.xyz) +_SinTime.xyz);
float4 c = float4(IN.vertex.xyz,1);
OUT.mask = mul(r, c);
OUT.position = mul(glstate.matrix.mvp, IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.normal = IN.normal;
OUT.vertex = IN.vertex;
return OUT;
}
void fragment_shader( v2f IN,
out float4 finalcolor : COLOR)
{
if(IN.mask.x > section_depth.w)
discard;
float3 N = IN.normal;
N = mul(glstate.matrix.invtrans.modelview[0], float4(N, 1));
float diffuse = saturate(dot(glstate.light[0].position, N));
finalcolor = float4(0,0,0,1);
finalcolor.xyz = tex2D(color_map, IN.texcoord).xyz *(diffuse *0.6 +0.4);
}
ENDCG //--------------
} // Pass
} // SubShader
} // Shader
作者:
难骑
时间:
2011-9-3 08:01
提示:
作者被禁止或删除 内容自动屏蔽
作者:
晃晃
时间:
2012-2-14 23:21
有意思!学习了!
作者:
菜刀吻电线
时间:
2012-4-14 23:26
真不错,全存下来了.
作者:
菜刀吻电线
时间:
2012-6-28 23:24
响应天帅号召,顶
作者:
奇
时间:
2012-7-24 23:24
好可爱的字,学习了
作者:
C.R.CAN
时间:
2012-8-8 23:55
已阵亡的 蝶 随 风 舞 说过 偶尔按一下 CTRL A 会发现 世界还有另一面
作者:
晃晃
时间:
2012-8-10 00:07
百度的叫度娘,网易的叫易娘,新浪内部还在为是叫新娘还是浪娘而争论不休!……不管你们是企鹅的额娘,豆瓣的伴娘,还是华为的伪娘,都要记得,淘宝才是你们的亲娘啊!亲!!
作者:
奇
时间:
2012-9-22 23:27
好`我顶``顶顶
作者:
奇
时间:
2012-9-28 23:18
再看一看,再顶楼主
作者:
C.R.CAN
时间:
2012-10-13 23:22
不错哦,顶一下......
作者:
晃晃
时间:
2012-10-26 23:22
很经典,很实用,学习了!
作者:
菜刀吻电线
时间:
2012-12-9 23:18
水……生命之源……灌……
作者:
菜刀吻电线
时间:
2013-2-17 23:47
发了那么多,我都不知道该用哪个给你回帖了,呵呵
作者:
C.R.CAN
时间:
2013-2-21 23:30
很经典,很实用,学习了!
作者:
C.R.CAN
时间:
2013-3-19 23:20
不错 非常经典 实用
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5