关闭

使用unity shader画线,画圆

标签: unity shader画线画圆
2160人阅读 评论(0) 收藏 举报
分类:

原文链接 : http://www.manew.com/thread-98632-1-1.html


基于unity 5.4.1, 因为部分的代码只有5.4.1的API里面有


Shader "Custom/Draw" 
{  
    Properties  
    {  
        _Point1("Point1",vector) = (100,100,0,0)  
        _Point2("Point2",vector) = (200,200,0,0)  
        _LP1("linePoint1",vector) = (300,100,0,0)  
        _LP2("linePoint2",vector) = (600,400,0,0)  
        _LineWidth("LineWidth",range(1,20)) = 2.0  
       
    }  
    SubShader  
    {  
        Pass  
        {  
            CGPROGRAM  
            #pragma vertex vert  
            #pragma fragment frag  
              
            #include "UnityCG.cginc"  
   
            struct appdata  
            {  
                float4 vertex : POSITION;  
            };  
   
            struct v2f  
            {  
                float4 vertex : SV_POSITION;  
            };  
            float4 _Point1;  
            float4 _Point2;  
            float4 _LP1;  
            float4 _LP2;  
            float _LineWidth;         
               
            v2f vert (appdata v)  
            {  
                v2f o;  
		//5.4.1以上的API才有的代码
                o.vertex = UnityObjectToClipPos(v.vertex);  
                return o;  
            }  
               
            fixed4 frag (v2f i) : SV_Target  
            {  
                //绘制圆形,此处半径使用了固定值1000和500,当然大家也可以把他们写成可调的参数  
                if( pow((i.vertex.x- _Point1.x ),2) + pow((i.vertex.y- _Point1.y ),2) <1000   )  
                {  
                    return fixed4(0,1,0,1);  
                }  
                if( pow((i.vertex.x- _Point2.x ),2) + pow((i.vertex.y- _Point2.y ),2) <500   )  
                {  
                    return fixed4(1,0,0,1);  
                }  
   
                //绘制直线上两点  
                if( pow((i.vertex.x- _LP1.x ),2) + pow((i.vertex.y- _LP1.y ),2) <100   )  
                {  
                    return fixed4(0,0,1,1);  
                }  
                if( pow((i.vertex.x- _LP2.x ),2) + pow((i.vertex.y- _LP2.y ),2) <100   )  
                {  
                    return fixed4(0,0,1,1);  
                }  
   
                //计算点到直线的距离  
                float d = abs((_LP2.y-_LP1.y)*i.vertex.x + (_LP1.x - _LP2.x)*i.vertex.y +_LP2.x*_LP1.y -_LP2.y*_LP1.x )/sqrt(pow(_LP2.y-_LP1.y,2) + pow(_LP1.x-_LP2.x,2));  
                //小于或者等于线宽的一半时,属于直线范围  
                if(d<=_LineWidth/2)  
                {  
                    return fixed4(0.8,0.2,0.5,1);  
                }  
   
                //绘制网格直线  
                if( (unsigned int)i.vertex.x% (unsigned int)(0.25*_ScreenParams.x)==0 )  
                {  
                    return fixed4(0,0,1,1);  
                }  
                if( (unsigned int)i.vertex.y% (unsigned int)(0.1*_ScreenParams.x)==0 )  
                {  
                    return fixed4(0,0,1,1);  
                }  
                //默认返回白色  
                return fixed4(1,1,1,1);  
   
            }  
            ENDCG  
        }  
    }  
}


0
0
查看评论

【ShaderToy】基础篇之谈谈点、线的绘制

写在前面写前面一篇的时候,发现还是不够基础。因此打算增加几篇基础篇,从点线面开始,希望可以更好理解。其实用Pixel Shader的过程很像在纸上绘画的过程。屏幕上的每一个像素对应了纸上的一个方格,如果你愿意,你甚至可以一个个判断像素的位置,从而画出任何你想画的图像,也的确有爱好者这么做过。但往往,...
  • candycat1992
  • candycat1992
  • 2015-03-14 23:22
  • 15839

【Unity】Unity 几种画线方式

转载地址:http://blog.sina.com.cn/s/blog_471132920101gxzf.html 【前言】 图形化调试可以加速开发。 例如在战斗中,可能需要知道所有单位的仇恨值,如果这些信息全打log的话,很难有直观感受, 而如果在Scene窗口里,...
  • ldy597321444
  • ldy597321444
  • 2017-09-19 16:11
  • 3572

Opengl Shader发光线条实例

转发请保持地址:http://blog.csdn.net/stalendp/article/details/21993227 这篇文章主要分析一个Shader,从而感受shader的魅力,并学习相关shader的函数的用法。 先看Shader运行的效果: 下面是代码: ...
  • dongtinghong
  • dongtinghong
  • 2017-03-15 17:04
  • 1093

Unity GL 绘制图形

using UnityEngine; using System.Collections; public class Script_07_17 : MonoBehaviour { //可用材质 public Material mat0; public Material mat1; pub...
  • qqMCY
  • qqMCY
  • 2013-07-12 17:01
  • 3488

unity使用GL库画线

不记得在哪里看到的代码,效果很简单,修改了一下,可以用,还是有一定的参考价值 using UnityEngine; using System.Collections; public class joint{ public Vector3 org; public Vector3 end;...
  • dzyi_
  • dzyi_
  • 2014-04-01 14:15
  • 10714

Unity3D笔记十八 GL图像库

作者:PEPE  出处:http://pepe.cnblogs.com/  1、绘制2D图像的时需要使用GL.LoadOrtho()方法来将图形映射到平面中。   2、所有绘制相关的内容都要写在OnPostRender()方法中。   3、有关...
  • u010832643
  • u010832643
  • 2016-09-26 15:55
  • 1927

Unity&Shader基础篇-绘图2D图形

一、闲言碎语唠叨两句 原文转载请注明出处点击打开链接 有了前面的几章的基础,接下来我们就可以编写一些案例来训练和强化Shader编程。本章和接下来的几章都会是在屏幕上绘制2D的图像,因此需要建立一个绘制的平面,类似于UI系统的一个Panel。代码如下:using UnityEngine; using...
  • zhangxiao13627093203
  • zhangxiao13627093203
  • 2016-10-25 21:06
  • 3526

Unity中画实线与虚线

以前用过Vectrosity来画过线,但时间久了忘记怎么用了,也忘记能不能画虚线了。试了一下Unity的LineRenderer加上一个材质来画虚线,但是它是把我们的贴图给拉伸覆盖创建出来的mesh的,忘记保存我的实验效果了。。。可能改改Shader还可以用吧。针扎一番后决定自己用GL写,由于Uni...
  • Cheng624
  • Cheng624
  • 2016-11-24 14:58
  • 2336

图形化调试 - unity使用GL库画线

图形化调试可以加速开发。 例如在战斗中,可能需要知道所有单位的仇恨值,如果这些信息全打log的话,很难有直观感受, 而如果在Scene窗口里,单位头顶有一个球,越红表示仇恨越高,越暗表示仇恨越低,那么调试起来比打log直观多了。   【一 图形化调试】 Uni...
  • laipixiaoxi
  • laipixiaoxi
  • 2016-12-23 16:44
  • 3780

【OpenGL】Shader实例分析(八)- 彩色光圈

研究了一个彩色光圈效果,感觉挺不错的,分享给大家,效果如下:
  • stalendp
  • stalendp
  • 2014-11-01 23:56
  • 9524
    个人资料
    • 访问:172874次
    • 积分:3076
    • 等级:
    • 排名:第13396名
    • 原创:108篇
    • 转载:76篇
    • 译文:14篇
    • 评论:11条
    最新评论