unity/shader 小结

周末把自己关于shader的知识做了一个总结 梳理 

关于CG语言/shader 基础我就不再多做赘述

 有需要的同学可以去看浅墨的UNITY学习网      传送门 http://www.unity.5helpyou.com/2367.html

一 only--vertex/-shader.shader   只有顶点渲染shader

算法是08年一位歪果仁大兄弟的  逻辑我也没完全理解透(因为在火星时代做一个VR游戏孵化 需要一个科技感强的虚拟三维地图   )

var lineColor : Color;


var backgroundColor : Color;


var ZWrite = true;


var AWrite = true;


var blend = true;





private var lines : Vector3[];


private var linesArray : Array;


private var lineMaterial : Material;


private var meshRenderer : MeshRenderer;





function Start ()


{


meshRenderer = GetComponent(MeshRenderer);


if(!meshRenderer) meshRenderer = gameObject.AddComponent(MeshRenderer);


meshRenderer.material = new Material("Shader \"Lines/Background\" { Properties { _Color (\"Main Color\", Color) = (1,1,1,1) } SubShader { Pass {" + (ZWrite ? " ZWrite on " : " ZWrite off ") + (blend ? " Blend SrcAlpha OneMinusSrcAlpha" : " ") + (AWrite ? " Colormask RGBA " : " ") + "Lighting Off Offset 1, 1 Color[_Color] }}}");





lineMaterial = new Material("Shader \"Lines/Colored Blended\" { SubShader { Pass { Blend SrcAlpha OneMinusSrcAlpha ZWrite Off Cull Front Fog { Mode Off } } } }");





lineMaterial.hideFlags = HideFlags.HideAndDontSave;


lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;





linesArray = new Array();


var filter : MeshFilter = GetComponent(MeshFilter);


var mesh = filter.mesh;


var vertices = mesh.vertices;


var triangles = mesh.triangles;





for (i = 0; i < triangles.length / 3; i++)


{


linesArray.Add(vertices[triangles[i * 3]]);


linesArray.Add(vertices[triangles[i * 3 + 1]]);


linesArray.Add(vertices[triangles[i * 3 + 2]]);


}





lines = linesArray.ToBuiltin(Vector3);


}








function OnRenderObject()


{ 


meshRenderer.material.color = backgroundColor;


lineMaterial.SetPass(0);





GL.PushMatrix();


GL.MultMatrix(transform.localToWorldMatrix);


GL.Begin(GL.LINES);


GL.Color(lineColor);





for (i = 0; i < lines.length / 3; i++)


{


GL.Vertex(lines[i * 3]);


GL.Vertex(lines[i * 3 + 1]);





GL.Vertex(lines[i * 3 + 1]);


GL.Vertex(lines[i * 3 + 2]);





GL.Vertex(lines[i * 3 + 2]);


GL.Vertex(lines[i * 3]);


}





GL.End();


GL.PopMatrix();


}
// http://forum.unity3d.com/threads/wireframe-3d.8814/  
//unity 官方论坛一位歪果仁大兄弟 08年就实现了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值