zoukankan      html  css  js  c++  java
  • 假倒影

    基本思路 
        多一个pass把某型转到想要的位置重绘一次,根据距离模型原点的位置改透明度
        倒影翻转了一个轴 导致面正反被翻转 剔除要改为前面剔除
       
    效果
        
     
    shader多的那个pass    
    //倒影
    Pass
    {
    	//倒影翻转了一个轴 导致面正反被翻转
    	Cull Front
    
    	CGPROGRAM
    	#pragma vertex vert
    	#pragma fragment frag
    	#include "UnityCG.cginc"
    
    	
    	sampler2D _MainTex;
    	float4 _MainTex_ST;
    
    	fixed _AlphaScale;
    	fixed4x4 _MT;
    
    	struct appdata
    	{
    		float4 vertex : POSITION;
    		float2 uv : TEXCOORD0;
    	};
    
    	struct v2f
    	{
    		float4 vertex : SV_POSITION;
    		float2 baseuv : TEXCOORD0;
    		float project : TEXCOORD1;
    	};
    
    	//计算某个点在某平面的法向量上的投影
    	fixed Projection2PlaneNormal(fixed3 planePoint, fixed3 normal, fixed3 pos)
    	{
    		fixed3 dis = pos - planePoint;
    
    		return dot(dis, normal);
    	}
    	
    	v2f vert (appdata v)
    	{
    		v2f o;
    		o.baseuv = TRANSFORM_TEX(v.uv, _MainTex);
    
    		//坐标转换				
    		float4 pos = mul(_MT, v.vertex);
    
    		//局模型中心点距离 测试写死 这条鱼的投影在模型空间的x轴
            //或者是在世界坐标下计算可以不用考虑模型被旋转
    		o.project = Projection2PlaneNormal(fixed3(0,0,0), fixed3(1,0,0), pos);
    
    		o.vertex = mul(UNITY_MATRIX_MVP, pos);
    
    		return o;
    	}
    	
    	fixed4 frag (v2f i) : SV_Target
    	{
    		fixed3 baseCol = tex2D(_MainTex, i.baseuv);
    		fixed alpha = 1 - saturate(i.project * _AlphaScale);
    		return fixed4(baseCol, alpha);
    	}
    	ENDCG
    }

    坐标转换的矩阵有u3d函数简单生成 = =
    Quaternion q = Quaternion.Euler(EulerAngle);
    Matrix4x4 mt = Matrix4x4.TRS(posOffSet, q, Scale);
    
    Renderer[] rds = GetComponentsInChildren<Renderer>();
    for (int i = 0; i < rds.Length; ++i)
    {
        for (int j = 0; j < rds[i].materials.Length; ++j)
        {
            rds[i].materials[j].SetMatrix("_MT", mt);
        }
    }


  • 相关阅读:
    模拟最烂的网速
    TableView编辑状态下跳转页面的崩溃处理
    Swift的Optional类型
    autolayout之后获取uiview的frame
    Swift中的闭包(Closure)[转]
    Swift1.2与Xcode6.3 beta
    python技巧31[python中使用enum][转]
    Python初学者的捷径[译]
    tornado+bootstrap急速搭建你自己的网站
    Windows下nginx+tomcat实现简单的负载均衡、动静分离等
  • 原文地址:https://www.cnblogs.com/Hichy/p/7454034.html
Copyright © 2011-2022 走看看