unity3d gl 画线 粗细 3d gl怎么设置线的宽度

unity 3d gl怎么设置线的宽度_百度知道扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 2028|回复: 10
Unity3d GL画线
本帖为抢楼帖,欢迎抢楼!&
85889/10000排名9昨日变化主题帖子积分
常驻蛮牛, 积分 5889, 距离下一级还需 4111 积分
常驻蛮牛, 积分 5889, 距离下一级还需 4111 积分
蛮牛币6428
在线时间498 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
GL图像库绘制图像的时候需要使用GL.LoadOrtho()方法来将图形映射到平面中。
所有绘制相关的内容都必须写在OnPostRender()方法中。
有关GL图像库的脚本需要绑定到Camera上,否则无法显示绘制的图像。
GL坐标系:GL坐标系原点位于屏幕左下方,X轴最大值为1,Y轴最大值为1。特别要注意换算。
下面是一段代码,实现了自由画线:
& & [AppleScript] 纯文本查看 复制代码//绘制线段材质
private Dictionary&int,List&Vector3&& dicOfL
List&Vector3& tempL//临时线的点列表
int index =-1;
void Start()
dicOfLine = new Dictionary&int,List&Vector3&&();
void OnGUI()
GUILayout.Label(&当前鼠标x轴位置:&+ Input.mousePosition.x);
GUILayout.Label(&当前鼠标y轴位置:&+ Input.mousePosition.y);
void Update()
if(Input.GetMouseButtonDown(0))
tempList = new List&Vector3&();//每次点击鼠标的时候都要实例化一个新的列表
if(Input.GetMouseButton(0))
//将每次鼠标改变的位置存储进链表
tempList.Add(Input.mousePosition);
if(Input.GetMouseButtonUp(0))
if(tempList.Count&2)//少于两个点的不添加
dicOfLine.Add(index, tempList);
void OnPostRender()
if(!material)
material.SetPass(0);
GL.LoadOrtho();
GL.Begin(GL.LINES);
int size = dicOfLine.C
for(int i = 0; i & i++)//绘制之前画的线
List&Vector3& list = dicOfLine[i];
int listLength = list.C
for(int j = 0; j & listLength - 1; j++)
Vector3 start = list[j];
Vector3 end = list[j + 1];
DrawLine2D(start.x, start.y,end.x, end.y);
if(tempList!=null)//绘制当前正在画的内容
int currentLength = tempList.C
for(int l = 0; l & currentLength-1; l++)
Vector3 start = tempList[l];
Vector3 end = tempList[l + 1];
DrawLine2D(start.x, start.y,end.x, end.y);
void DrawLine2D(float x1, float y1, float x2, floa ty2)
GL.Vertex(new Vector3(x1 / Screen.width, y1 / Screen.height,0));
GL.Vertex(new Vector3(x2 / Screen.width, y2 / Screen.height,0));
下面代码实现画线的橡皮条效果:
[AppleScript] 纯文本查看 复制代码public class XPTLine: MonoBehaviour{
public Material lineM
Vector3[] tempL
Dictionary&int, Vector3[]& dicOfL
bool startDraw =
// Use this forinitialization
void Start() {
index = -1;
dicOfLine = new Dictionary&int,Vector3[]&();
// Update iscalled once per frame
void Update()
if(Input.GetMouseButtonDown(0))
if(!startDraw)
startDraw =
if(startDraw)
tempLine=new Vector3[2];
tempLine[0].x = Input.mousePosition.x;
tempLine[0].y = Input.mousePosition.y;
if(Input.GetMouseButton(0))
if(startDraw)
tempLine[1].x = Input.mousePosition.x;
tempLine[1].y = Input.mousePosition.y;
if(Input.GetMouseButtonUp(0))
if(startDraw)//一条线绘制完毕
if(tempLine.Length==2)
dicOfLine.Add(index,tempLine);
void OnPostRender()
if(!lineMaterial)
lineMaterial.SetPass(0);
GL.LoadOrtho();
GL.Begin(GL.LINES);
int size = dicOfLine.C
for(inti = 0; i & i++)
Vector3[] line = dicOfLine[i];
int listLength = line.L
Vector3 start = line[0];
Vector3 end = line[1];
DrawLine2D(start.x, start.y, end.x,end.y);
if(tempLine != null)
Vector3 start = tempLine[0];
Vector3 end = tempLine[1];
DrawLine2D(start.x, start.y, end.x,end.y);
void DrawLine2D(float x1, float y1, float x2, float y2)
GL.Vertex(new Vector3(x1 / Screen.width, y1 / Screen.height,0));
GL.Vertex(new Vector3(x2 / Screen.width, y2 / Screen.height,0));
每日推荐:
最近百度对文件链接审查比较严格,如果遇到链接失效情况,可以加管理员QQ,我将更新链接,补还蛮牛币,还请谅解。
下载解压包遇到密码一般为:tinytimes
19/50主题帖子积分
注册看看, 积分 9, 距离下一级还需 41 积分
注册看看, 积分 9, 距离下一级还需 41 积分
在线时间1 小时
感谢楼主分享!!{:87:}{:87:}{:87:}
每日推荐:
72681/5000排名10昨日变化主题帖子积分
日久生情, 积分 2681, 距离下一级还需 2319 积分
日久生情, 积分 2681, 距离下一级还需 2319 积分
蛮牛币9967
在线时间419 小时
好教程,楼主辛苦了,{:87:}{:87:}{:87:}{:87:}{:87:}
每日推荐:
5948/1000排名<font color="#FF昨日变化6主题帖子积分
熟悉之中, 积分 948, 距离下一级还需 52 积分
熟悉之中, 积分 948, 距离下一级还需 52 积分
蛮牛币2852
在线时间225 小时
请问GL绘的图像可以转换成Texture2D 或sprite 吗?
每日推荐:
4323/500排名<font color="#FF昨日变化4主题帖子积分
四处流浪, 积分 323, 距离下一级还需 177 积分
四处流浪, 积分 323, 距离下一级还需 177 积分
在线时间90 小时
你好,想请教一下GL画线怎么调节线的粗细?我查了下找不到相关的方法。
每日推荐:
114/50排名<font color="#FF昨日变化15主题帖子积分
注册看看, 积分 14, 距离下一级还需 36 积分
注册看看, 积分 14, 距离下一级还需 36 积分
在线时间0 小时
你好 请教下 这个如果只执行一次 为什么这线条会没掉了。。
每日推荐:
4495/500排名<font color="#FF昨日变化3主题帖子积分
四处流浪, 积分 495, 距离下一级还需 5 积分
四处流浪, 积分 495, 距离下一级还需 5 积分
在线时间142 小时
你好,想请教一下GL画线怎么调节线的粗细?我查了下找不到相关的方法。
请问同学你找到方法了没
每日推荐:
4323/500排名<font color="#FF昨日变化4主题帖子积分
四处流浪, 积分 323, 距离下一级还需 177 积分
四处流浪, 积分 323, 距离下一级还需 177 积分
在线时间90 小时
请问同学你找到方法了没
我之前项目太赶,只能在画一条线时,将位置飘移x个单位的若干条线一起画那样来达到“加粗”的效果。。。这个方法有瑕疵的。之后也没怎么研究了。帮不了你
每日推荐:
2127/150排名<font color="#FF昨日变化4主题帖子积分
初来乍到, 积分 127, 距离下一级还需 23 积分
初来乍到, 积分 127, 距离下一级还需 23 积分
在线时间45 小时
看看再说,,,,,,,
每日推荐:
4424/500排名<font color="#FF昨日变化4主题帖子积分
四处流浪, 积分 424, 距离下一级还需 76 积分
四处流浪, 积分 424, 距离下一级还需 76 积分
在线时间136 小时
请问楼主,使用GL.Vertex(Vector3 v)画的是一个个点,然后连接成为一条线的,还是画两个点之间的线段,然后连接成为一条线的呢呢?求解答
每日推荐:
4424/500排名<font color="#FF昨日变化4主题帖子积分
四处流浪, 积分 424, 距离下一级还需 76 积分
四处流浪, 积分 424, 距离下一级还需 76 积分
在线时间136 小时
请问楼主,使用GL.Vertex(Vector3 v)画的是一个个点,然后连接成为一条线的,还是画两个点之间的线段,然后连接成为一条线的呢呢?求解答
每日推荐:
连续签到30天
原创精华达人
原创精华帖子总数量 ≥ 100
论坛建议之星
为论坛提出建设性的建议并被多数被采纳,必须采纳5条以上
突出贡献奖
宣传论坛,介绍更多的朋友加入≥50人
累积数量达到100000蛮牛币
游戏蛮牛QQ群会员
加入游戏蛮牛官方QQ群
在“新人报到 ”版块发过自己的照片1853人阅读
Unity3D(89)
using UnityE
using System.C
public class Script_07_17 : MonoBehaviour
//可用材质
public Material mat0;
public Material mat1;
public Material mat3;
void OnPostRender() {
//绘制正四边方形
DrawRect(100,100,100,100,mat0);
DrawRect(250,100,100,100,mat1);
//绘制无规则四边形
DrawQuads(15,5,10,115,95,110,90,10,mat3);
绘制正四边形
float x :X轴起始坐标
float y :Y轴起始坐标
float width :正四边形的宽
float height :正四边形的高
void DrawRect(float x,float y,float width,float height,Material mat)
GL.PushMatrix();
mat.SetPass(0);
GL.LoadOrtho();
//绘制类型为四边形
GL.Begin(GL.QUADS);
GL.Vertex3(x/Screen.width, y/Screen.height, 0);
GL.Vertex3(x/Screen.width, (y + height)/Screen.height, 0);
GL.Vertex3((x+ width)/Screen.width, (y + height)/Screen.height, 0);
GL.Vertex3((x+ width)/Screen.width,y/Screen.height, 0);
GL.PopMatrix();
绘制无规则四边形
float x1 :起始点1,X1坐标
float y1 :起始点1,Y1坐标
float x2 :起始点2,X2坐标
float y2 :起始点2,X2坐标
float x3 :起始点3,X3坐标
float y3 :起始点3,X3坐标
float x4 :起始点4,X4坐标
float y4 :起始点4,X4坐标
void DrawQuads(float x1,float y1,float x2,float y2,float x3,float y3,float x4, float y4,Material mat)
GL.PushMatrix();
mat.SetPass(0);
GL.LoadOrtho();
//绘制类型为四边形
GL.Begin(GL.QUADS);
GL.Vertex3(x1/Screen.width, y1/Screen.height, 0);
GL.Vertex3(x2/Screen.width, y2/Screen.height, 0);
GL.Vertex3(x3/Screen.width, y3/Screen.height, 0);
GL.Vertex3(x4/Screen.width, y4/Screen.height, 0);
GL.PopMatrix();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:645071次
积分:11234
积分:11234
排名:第924名
原创:478篇
转载:22篇
评论:131条
QQ群:(iOS开发)
阅读:3803
阅读:16408
(1)(3)(1)(5)(1)(2)(5)(1)(1)(1)(4)(1)(5)(11)(10)(8)(10)(3)(8)(4)(21)(25)(12)(12)(18)(6)(18)(19)(29)(33)(143)(85)画任意线(GL方式高级应用)
画任意线(GL方式高级应用)
[摘要:道理图 后果图:(代码正在最上面) # pragma strict private var origPoints : Vector2 []; var numberOfPoints = 31 ; var lineColor = Color . var lineWidth = 3 ; var drawLines = var i = 0 ; private var lineMaterial : Ma]
原理图&效果图:(代码在最下面)&&&&&#pragma strict
private var origPoints : Vector2[]; &var numberOfPoints = 31; var lineColor = Color. var lineWidth = 3; var drawLines = true; var i = 0; private var lineMaterial : Material; private var linePoints : Vector2[]; private var cam : Camera; & function Awake () {
lineMaterial = new Material( "Shader "Lines/Colored Blended" {" +
"SubShader { Pass {" +
" & BindChannels { Bind "Color",color }" +
" & Blend SrcAlpha OneMinusSrcAlpha" +
" & ZWrite Off Cull Off Fog { Mode Off }" +
lineMaterial.hideFlags = HideFlags.HideAndDontS
lineMaterial.shader.hideFlags = HideFlags.HideAndDontS
cam = } & function Start () {
linePoints = new Vector2[numberOfPoints];
origPoints = new Vector2[numberOfPoints]; &
// Plot points on a circle
var radians : float = 360.0/(numberOfPoints-1)*Mathf.Deg2R
var p = 0.0;
for (i = 0; i & numberOfP i++) {
linePoints[i] = Vector2(.5 + .25*Mathf.Cos(p), .5 + .25*Mathf.Sin(p));
origPoints[i] = linePoints[i];
} } & function Update () {&
for (i = 0; i & linePoints.L i++) {
if (i%2 == 0) {var m = .4; var t = 1.0;}
else {m = .5; t = .5;}
linePoints[i] = (origPoints[i]-Vector2(.5, .5))*(Mathf.Sin(Time.time*t)+Mathf.PI*m)+Vector2(.5, .5);
& function OnPostRender () {
if (!drawLines || !linePoints || linePoints.Length & 2) {return;} &
var nearClip = cam.nearClipPlane + .00001; // Add a bit, else there's flickering when the camera moves
var end = linePoints.Length - 1;
var thisWidth = 1.0/Screen.width * lineWidth * .5; &
lineMaterial.SetPass(0);
GL.Color(lineColor); &
if (lineWidth == 1) {
GL.Begin(GL.LINES);
for (i = 0; i & i++) {
GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i].x, linePoints[i].y, nearClip)));
GL.Vertex(cam.ViewportToWorldPoint(Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip)));
GL.Begin(GL.QUADS);
for (i = 0; i & i++) {
var perpendicular = (Vector3(linePoints[i+1].y, linePoints[i].x, nearClip) -
Vector3(linePoints[i].y, linePoints[i+1].x, nearClip)).normalized * thisW
var v1 = Vector3(linePoints[i].x, linePoints[i].y, nearClip);
var v2 = Vector3(linePoints[i+1].x, linePoints[i+1].y, nearClip);
GL.Vertex(cam.ViewportToWorldPoint(v1 - perpendicular));
GL.Vertex(cam.ViewportToWorldPoint(v1 + perpendicular));
GL.Vertex(cam.ViewportToWorldPoint(v2 + perpendicular));
GL.Vertex(cam.ViewportToWorldPoint(v2 - perpendicular));
GL.End(); } & function OnApplicationQuit () {
DestroyImmediate(lineMaterial); } & @script RequireComponent(Camera)
感谢关注 Ithao123iOS频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言
Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
IThao123周刊Unity中画线的问题_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:55,608贴子:
Unity中画线的问题收藏
想做一个背景,要画很多的线,如下图: 选择了几种方式:LineRender这个一旦线多,性能超级差,只好放弃Vectrosity 这个没法设置宽度在 1f以下,不然显示会有问题,而且画3D的线,控制颜色失效。。。GL,这个效果倒是挺好,就是也没法控制线的宽度... 所以无解了,求助。。。
unity是iOS排行榜上超过50款知名APP的广告变现首选,中国领先的iOS移动广告平台unity收益高,用户体验好,不扣量,擅长在提供出色用户体验的同时带来更高的广告收入
放一张画好线的背景图
直接拿一个一像素的图片去拉伸
一个个的小格子平起来也不错,可以自定义地图大小~
很简单,一张64×64的贴图贴在Plane上,Tiling重复几十次就可以达到这个效果了。
用mesh或者UGUI 创建顶点画线
直接找个网格图片作为材质文理,然后贴到一个plane上就行吧
预备三张足够宽,高度1/3差不多。当镜头往上快超越镜头范围就把最低已经看不见的图移动到最上面
猫喜欢吃鱼,可猫不会游泳。鱼喜欢吃蚯蚓,可鱼又不能上岸。上帝给了你很多诱惑,却不让你轻易得到。但是,总不能流血就喊痛,怕黑就开灯,想念就联系。今天再大的事,到了明天就是小事;今年再大的事,到了明年就是故事。我们最多也就是个有故事的人,所以,人生就像蒲公英,看似自由,却身不由己。有些事,不是不在意,而是在意了又能怎样。自己尽力了就好,人生没有如果,只有后果和结果。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 unity3d gl 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信