unity GL画线

对某篇文章加以修改。把这个脚本挂到相机下,才能显示。

using UnityEngine;

using System.Collections;

public class joint{

public Vector3 org;

public Vector3 end;

}

public class Drawline : MonoBehaviour {

private Vector3 orgPos;

private Vector3 endPos;

private bool canDrawLines  = false;

ArrayList posAL;

ArrayList temppos;

public Material lineMaterial;

void Start()

{

temppos=new ArrayList();

posAL=new  ArrayList();

}

void Update()

{

if (Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began))

{

Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)

{

orgPos=Input.mousePosition;

endPos=Input.mousePosition;

}

}

else if (Input.GetMouseButton(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Moved))

{

Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)

{

canDrawLines = true;

endPos=Input.mousePosition;

temppos.Add(Input.mousePosition);

GLDrawLine(orgPos,endPos);

orgPos=Input.mousePosition;

}

}

else if(Input.GetMouseButtonUp(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Ended))

{

Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)

{

endPos=Input.mousePosition;

}

}

}

void GLDrawLine(Vector3 beg ,Vector3 end )

{

if(!canDrawLines)

return;

GL.PushMatrix ();

GL.LoadOrtho ();

beg.x=beg.x/Screen.width;

end.x=end.x/Screen.width;

beg.y=beg.y/Screen.height;

end.y=end.y/Screen.height;

joint tmpJoint = new joint();

tmpJoint.org=beg;

tmpJoint.end=end;

posAL.Add(tmpJoint);

lineMaterial.SetPass( 0 );

GL.Begin( GL.LINES );

GL.Color( new Color(1,1,1,0.5f) );

for(int i= 0;i<posAL.Count;i++)

{

joint tj  =(joint)posAL[i];

Vector3 tmpBeg  = tj.org;

Vector3 tmpEnd=tj.end;

GL.Vertex3( tmpBeg.x,tmpBeg.y,tmpBeg.z );

GL.Vertex3( tmpEnd.x,tmpEnd.y,tmpEnd.z );

}

GL.End();

GL.PopMatrix ();

}

public void ClearLines()

{

canDrawLines = false;

if(posAL != null)

posAL.Clear();

}

void OnPostRender() {

GLDrawLine(orgPos,endPos);

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 19:59:24

unity GL画线的相关文章

unity3d GL画线/物体跟随/坐标系转换

看见标题的人是不是在想... 一个小小的GL画线难吗? 一个小小的物体跟随难吗? 嗯,的确,一点不难.... 我一开始也是像你们那样想的,但是实际操作起来,还是和理论有区别的 写这个demo起因是这样的: 面试到了一家虚拟现实的公司,因为没有去公司 网上直接谈的,谈妥了hr估计是想看看我能不能胜任 给了我一张效果图,让我去实现画线的功能 咳咳,要求还是比较细致的,这里我们后面说 废话不多说,老规矩,先上效果图,然后直接进入主题 第一张是hr给我的图,第二张是我自己实现的 需求如下: 1.模型是旋

Unity GL画折线

新建一个脚本,这个物体得挂在有摄像机组件的物体上才能生效 OnPostRender() 这个函数才会被自动调用(类似生命周期自动调用) 然后就可以代码画线了,原理是openGL的画线 using UnityEngine; using System.Collections; using System.Collections.Generic; /// <summary> /// GL画图 /// </summary> public class GLDraw : UnityNormalS

Unity GL 画圆

Unity下GL没有画圆的函数,只能自己来了. 如果能帮到大家,我也很高兴. 虽然没有画圆的函数,但是能画直线,利用这一点,配合微积分什么的,就可以画出来了.反正就是花很多连在一起的直线,每条直线足够短的时候,就足够圆了 1 void DrawCircle(float x, float y, float z, float r, float accuracy) 2 { 3 GL.PushMatrix (); 4 //绘制2D图像 5 GL.LoadOrtho (); 6 7 float strid

Unity实现绘制线断二-----用GL画矩形线框

今天有点时间,才记起来上一次写的画线框,接着上一节画线,我们这节来看一下GL画线 直接上代码 using UnityEngine; using System.Collections; using System.Collections.Generic; public class joint{       public Vector3 org;       public Vector3 end;   }   public class example : MonoBehaviour {     Eve

Unity之屏幕画线

using UnityEngine;using System.Collections; public class DrawRectangle : MonoBehaviour { public Color rectColor = Color.green; private Material rectMat = null;//画线的材质 不设定系统会用当前材质画线 结果不可控 // Use this for initialization void Start () { rectMat = new Ma

unity3d 使用GL 方式画线

这个是画线部分 private Vector3[] linePoints; public int m_LineCount; public int m_PointUsed; public void RenderPath() { GL.Begin(GL.LINES); for (int i = 0; i < m_LineCount - 1; ++i) { GL.Vertex(GetPoint(i)); GL.Vertex(GetPoint(i + 1)); } GL.End(); } 但是这个画线部

用GL画出人物的移动路径

注意:用Debug画的线会存在穿透问题 没啥好解释的,直接看代码: using UnityEngine; using System.Collections; using System.Collections.Generic; /* * 找不到设置线宽的方法,目前的解决方法就是用画矩形代替画线来实现线的粗细 */ /// <summary> /// 必须将此脚本放在摄影机上才能看到绘画内容,DebugDraw可以不用,但DebugDraw画的内容 /// 只能在编辑模式下看得到. /// <

OpenGL进阶示例1——动态画线(虚线、实线、颜色、速度等)

用OpenGL动态绘制线段,其实很简单,但到现在为止,网上可参考资料并不多.于是亲自动手写一个函数,方便动态绘制线段.代码如下: #include<GL/glut.h> //OpenGL实用工具包 #include <Windows.h> /*所遇问题: 1.系统API函数Sleep()不听话,睡眠时快时慢(可能跟我计算机当前运行程序有关吧) 解决方案:重写Sleep()函数,实质为空循环.仅用于Debug下,Release会将其优化 2.动态画直线,朝某些方向画线时出现块状 解决

Unity实现绘制线断一 ————利用LineRenderer组件划线的两种方式

这几天,做项目的时候需要用到绘制线的功能,我之前做过划线的功能,总体来说就是三种方式,一种是LineRenderer组件,第二种是GL绘制线,第三种就是Vectrosity插件,他可以绘制各种各图形, 1.首先来说一下LineRenderer组件划线的方式,他需要添加LineRenderer组件,也就需要创建空对象,还的创建Plane,在Plane上画线. 第一种方式:  #region  ---- 划线     GameObject line;     LineRenderer wire;