unity gl绘制线段的gl画线可以延长线段吗

不记得在哪里看到的代码,效果很简单,修改了一下,可以用,还是有一定的参考价值
using UnityE
using System.C
public class joint{
public Vector3
public Vector3
public class example : MonoBehaviour {
private Vector3 orgP
private Vector3 endP
private bool canDrawLines
ArrayList posAL;
public Material lineM
void Start()
temppos=new ArrayList();
ArrayList();
void Update()
if(Input.GetMouseButton(0))
canDrawLines =
if(e.type!=null &canDrawLines)
if(e.type == EventType.MouseDown)
orgPos=Input.mouseP
endPos=Input.mouseP
if(e.type==EventType.MouseDrag)
endPos=Input.mouseP
//鼠标位置信息存入数组
temppos.Add(Input.mousePosition);
GLDrawLine(orgPos,endPos);
orgPos=Input.mouseP
print(temppos.Count);
if(e.type==EventType.MouseUp)
// orgPos=Input.mouseP
endPos=Input.mouseP
void GLDrawLine(Vector3 beg ,Vector3 end )
if(!canDrawLines)
GL.PushMatrix ();
GL.LoadOrtho ();
beg.x=beg.x/Screen.
end.x=end.x/Screen.
beg.y=beg.y/Screen.
end.y=end.y/Screen.
joint tmpJoint = new joint();
tmpJoint.org=
tmpJoint.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.Ci++)
=(joint)posAL[i];
Vector3 tmpBeg
Vector3 tmpEnd=tj.
GL.Vertex3( tmpBeg.x,tmpBeg.y,tmpBeg.z );
GL.Vertex3( tmpEnd.x,tmpEnd.y,tmpEnd.z );
GL.PopMatrix ();
void OnGUI()
e = Event.
if(GUI.Button(new
Rect(150,0,100,50),&End Lines&))
ClearLines();
void ClearLines()
canDrawLines =
posAL.Clear();
void OnPostRender() {
GLDrawLine(orgPos,endPos);
本文已收录于以下专栏:
相关文章推荐
图形化调试可以加速开发。
例如在战斗中,可能需要知道所有单位的仇恨值,如果这些信息全打log的话,很难有直观感受,
而如果在Scene窗口里,单位头顶有一个球,越红表示仇恨越高,越暗表示仇...
最近由于闲来无事,无意中看到vectrosity这个画线插件,就想研究一下,下载下来之后发现导入到unity里之后出现错误,由于自己是蠢新所以改了一通也没改对,所以就放弃了,大家需要插件的话待会我会上...
private var cur : int = 0;
private var orgP
private var endP
static var lineMat...
本文永久地址:/article/77.aspx,【文章转载请注明出处!】
在前两篇中,我们使用了 Graphics(查看详情)以及 Line Rend...
这个是画线部分
private Vector3[] lineP
public int m_LineC
public int m_PointU
Unity中的曲线绘制(一)——直线
  让我们从创建一条简单的直线开始。两点成线,我们需要一个起始点p0,以及终点p2;
  现在我们可以创建一个游戏对象...
LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意L...
using UnityE
using System.C
public class Line : MonoBehaviour
public Materia...
使用lineRender的时候需要在摄像机上加上组件linerender 可以调节粗细颜色之类
可以简单下面方法测试
void Start () {
lineRenderer = gameOb...
using UnityE
using System.C
public class DrawLine : MonoBehaviour ...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)[转载]unity3D调用GL任意画线
为什么画不上?
此文是对某位大神文章的翻译,忘记从哪摘抄的了 原文使用js写的
我把它改成C#。此文存在一个问题,当屏幕上有texture的话,貌似texture上画不上。期待高手一块解决。另外当快速拖动鼠标时,发现画的曲线不够平滑,正在尝试用贝塞尔解决,期待高手一块探讨。
using UnityE
using System.C
public class joint{
& public Vector3
& public Vector3
public class example : MonoBehaviour {
Event e& ; &
&&& private
Vector3 orgP &
&&& private
Vector3 endP &
&& &private bool
canDrawLines& = &
&& &ArrayList
&& &ArrayList
&Material lineM
&temppos=new ArrayList();
&posAL=new& ArrayList();
&if(Input.GetMouseButton(0))
& canDrawLines = &
&if(e.type!=null &canDrawLines)
if(e.type == EventType.MouseDown) &
&&&&&&&&&&&&
orgPos=Input.mouseP &
&&&&&&&&&&&&
endPos=Input.mouseP &
&&&&&&&&&&&&&
if(e.type==EventType.MouseDrag) &
&&&&&&&&&&&&
endPos=Input.mouseP &
&temppos.Add(Input.mousePosition);
x1=(((Vector3)temppos[0])-((Vector3)temppos[3]));
&&&&&&&&&&&&
GLDrawLine(orgPos,endPos); &
&&&&&&&&&&&&
orgPos=Input.mouseP &
&print(temppos.Count);
if(e.type==EventType.MouseUp) &
&&&&&&&&&&&
// orgPos=Input.mouseP &
&&&&&&&&&&&&
endPos=Input.mouseP &
GLDrawLine(Vector3 beg ,Vector3 end ) &
//print("GLDrawLine???"); &
if(!canDrawLines) &
GL.PushMatrix (); &
&&& GL.LoadOrtho
beg.x=beg.x/Screen. &
end.x=end.x/Screen. &
beg.y=beg.y/Screen. &
end.y=end.y/Screen. &
joint tmpJoint = new joint(); &
tmpJoint.org= &
tmpJoint.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.Ci++) &
joint tj& =(joint)posAL[i];
Vector3 tmpBeg& = tj. &
Vector3 tmpEnd=tj. &
GL.Vertex3( tmpBeg.x,tmpBeg.y,tmpBeg.z ); &
GL.Vertex3( tmpEnd.x,tmpEnd.y,tmpEnd.z ); &
&&& GL.End();
&&& //print("beg
is:"+beg+"end is:"+end); &
&&& GL.PopMatrix
//Debug.DrawLine(beg,end); &
&& &void OnGUI()
if(GUI.Button(new& Rect(150,0,100,50),"End
Lines")) &
ClearLines(); &
ClearLines() &
&&& canDrawLines
posAL.Clear(); &
OnPostRender() { &
GLDrawLine(orgPos,endPos); &
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求助用unity gl划动态曲线,如何给曲线一个光照效果,这是代码【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:76,872贴子:
求助用unity gl划动态曲线,如何给曲线一个光照效果,这是代码收藏
static var lineMaterial : Mstatic function CreateLineMaterial() {if( !lineMaterial ) {lineMaterial = new Material( &Shader \&Lines/Colored Blended\& {& +&SubShader { Pass { & +&
Blend SrcAlpha OneMinusSrcAlpha & +&
ZWrite Off Cull Off Fog { Mode Off } & +&
BindChannels {& +&
Bind \&vertex\&, vertex Bind \&color\&, color }& +&} } }& );lineMaterial.hideFlags = HideFlags.HideAndDontSlineMaterial.shader.hideFlags = HideFlags.HideAndDontS}}function OnPostRender() {CreateLineMaterial();// set the current materiallineMaterial.SetPass( 0 );GL.Begin( GL.LINES );GL.Color( Color(1,1,1,0.5) );GL.Vertex3( 0, 0, 0 );GL.Vertex3( 1, 0, 0 );GL.Vertex3( 0, 1, 0 );GL.Vertex3( 1, 1, 0 );GL.Color( Color(0,0,0,0.5) );GL.Vertex3( 0, 0, 0 );GL.Vertex3( 0, 1, 0 );GL.Vertex3( 1, 0, 0 );GL.Vertex3( 1, 1, 0 );GL.End();}
登录百度帐号推荐应用程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
围观66614次
编辑日期: 字体:
一眨眼学习Unity3D 也有一段时间了,基本已经拿下了这套游戏引擎,回过头来想想以前写的RPG 游戏引擎,越来越发现以前写的就是垃圾。人果然是要不断学习与不断进步,好好学习,天天向上。哇咔咔~ 加油!!
最近做一个项目须要去绘制线与绘制面,那么把这两天的学习笔记整理一下,一是给自己留作备忘,二是方便初学者学习。
任何一个无规则曲线它都是有若干个线段组成,及时是圆形它也是又若干个线段组成的,也就是说将若干个线段拼接起来就是我们须要的无规则曲线~那么在3D 的世界中我们须要知道 X Y Z 三个点来确定一条3D线段。
首先先使用Unity编辑器的方式来添加一条线~
Unity -& GameObject -& Create Empty 创建一个空的对象,我命名为line。然后点击 Component -& Miscellaneous -& Line Renderer 给line添加一个线渲染器的属性,Line Renderer是非常中的属性,下面我会详细的说明。
Create -& Material 创建一个材质,做来这个线段的贴图,下面我们看看Line Renderer的一些重要参数。
Cast Shadows: 是否投射阴影。
Receive Shadows: 是否接收阴影。
Materials :设置材质,这里可以设置多个材质, line就是上面我们创建的材质,这里我给line这个材质涂上了红颜色。
Positions:这个属性就比较重要了,它是专门设置线段在3D 世界中的点的坐标,size 设置点的数量 为3 那么将会有3个点,Element 0
Element 1 Element 2
这三个点将确定这条曲线分为两段,第一段是(0,0,1) 到
(0,0,2) ,第二段是 (0,0,2) 到(0,0,4)。
Paramerters
StartWidth :设置起点的宽度
设置终点的宽度 ,这两项数值默认为1,但是现实起来很宽,所以一般都设置为0.几~
Start Color: 设置起点颜色
Start Color: 设置终点颜色
Use World Space 使用世界坐标系
大家看看效果,清楚的可以看到曲线分为两部分,第一部分较短 第二部分较长。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
using UnityEngine;using System.Collections;using System.Threading;&public class Main : MonoBehaviour {& //游戏对象,这里是线段对象 private GameObject LineRenderGameObject;& //线段渲染器 private LineRenderer lineRenderer;& //设置线段的个数,标示一个曲线由几条线段组成 private int lineLength = 4;& //分别记录4个点,通过这4个三维世界中的点去连接一条线段 private Vector3 v0 = new Vector3(1.0f,0.0f,0.0f); private Vector3 v1 = new Vector3(0.0f,1.0f,0.0f); private Vector3 v2 = new Vector3(0.0f,0.0f,1.0f); private Vector3 v3 = new Vector3(1.0f,0.0f,0.0f);& void Start(){&
//通过之前创建的对象的名称,就可以在其它类中得到这个对象,
//这里在main.cs中拿到line的对象
LineRenderGameObject = GameObject.Find ("line");&
//通过游戏对象,GetComponent方法 传入LineRenderer
//就是之前给line游戏对象添加的渲染器属性
//有了这个对象才可以为游戏世界渲染线段
lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer");&
//设置线段长度,这个数值须要和绘制线3D点的数量想等
//否则会抛异常~~
lineRenderer.SetVertexCount(lineLength);& } & void Update() {&
//在游戏更新中去设置点
//根据点将这个曲线链接起来
//第一个参数为 点的ID
//第二个 参数为点的3D坐标
//ID 一样的话就标明是一条线段
//所以盆友们须要注意一下!&
lineRenderer.SetPosition (0, v0);
lineRenderer.SetPosition (1, v1);
lineRenderer.SetPosition (2, v2);
lineRenderer.SetPosition (3, v3);& }&}
通过上面代码的设置,运行游戏,发现全新的一个三角形曲线赫然的映入我们的眼帘,有了上面的方法我们就可以组合的绘制出各种各样的3D 游戏曲线了,这里MOMO使用的是颜色,大家也可以添加一个贴图~
绘制面的话~,因为3D世界中游戏面全都是用三角形来拼起来的(出于效率的考虑),所以大家所看到的面其实都是用三角面拼接起来的。那么下面我们看看在Unity3D 中如何绘制三角形平面。先创建一个GameObject对象,我命名为face,然后给这个对象添加两个Mesh属性, 添加MeshFilter(网格过滤器)与mesh Renderer(网格渲染器)属性,这样子就可以绘制网格面了。
1234567891011121314151617181920212223242526272829303132333435363738
using UnityEngine;using System.Collections;&public class Main : MonoBehaviour {& // Update is called once per frame void Update () {&
//通过object对象名 face 得到网格渲染器对象
MeshFilter meshFilter = (MeshFilter)GameObject.Find("face").GetComponent(typeof(MeshFilter));&
//通过渲染器对象得到网格对象
Mesh mesh = meshFilter.mesh;& &&&&//API中写的不是提清楚,我详细的在说一遍& &&&&//设置顶点,这个属性非常重要 &&&&//三个点确定一个面,所以Vector3数组的数量一定是3个倍数 &&&&//遵循顺时针三点确定一面 &&&&//这里的数量为6 也就是我创建了2个三角面 &&&&//依次填写3D坐标点
mesh.vertices = new Vector3[] {new Vector3(5, 0, 0), new Vector3(0, 5, 0), new Vector3(0, 0, 5),new Vector3(-5, 0, 0), new Vector3(0, -5, 0), new Vector3(0, 0, -5)};&
//设置贴图点,因为面确定出来以后就是就是2D
//所以贴纸贴图数量为Vector2
//第一个三角形设置5个贴图
//第二个三角形设置一个贴图
//数值数量依然要和顶点的数量一样
mesh.uv = new Vector2[] {new Vector2(0, 0), new Vector2(0, 5), new Vector2(5, 5),new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)};&
//设置三角形索引,这个索引是根据上面顶点坐标数组的索引
//对应着定点数组Vector3中的每一项
//最后将两个三角形绘制在平面中
//数值数量依然要和顶点的数量一样
mesh.triangles= new int []{0,1,2,3,4,5};& }}
Build and Run
运行效果后清楚的可以看到两个三角形。MOMO提醒大家 善用三角平面可以绘制出各种各样的游戏面出来噢~哇咔咔~
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,总的来说这一章还是比较简单的,不过也是非常重要的一章。代码我就不上传了。哇咔咔~ MOMO愿和 大家好好学习,大家一起进步哈~!!!
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!
Pingback 引用通告:GL 绘制线 能否设置线宽度。
我用GL 绘制3D线,线的宽度怎么设置,是否只有通过材质渲染可以设置。第一次做,求大侠指点。
要评论请先&或者&
GL的线渲染模式没有设置线宽的这个功能和属性,请使用其它方式代替。
:GL的线渲染模式没有设置线宽的这个功能和属性,请使用其它方式代替。 还可以用其他方式画线吗?
:还可以用其他方式画线吗? linerender
linerender
:linerender 谢谢!

我要回帖

更多关于 unity gl画线 的文章

 

随机推荐