Curve Bezier
2016-04-04 20:09
267 查看
using UnityEngine; using System.Collections; using System.Collections.Generic; public class DrawLine : MonoBehaviour { // Use this for initialization private List<Vector3> list; private bool IsDraw = false; private LineRenderer lineRenderer; void Start () { lineRenderer = GetComponent<LineRenderer>(); } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { if (list == null) list = new List<Vector3>(); list.Clear(); IsDraw = true; lineRenderer.SetVertexCount(0); } if (Input.GetMouseButton(0))//记录划线点 { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 1000)) { Vector3 point = hit.point; if (!hit.collider.name.Equals("Terrain")) { return; } list.Add(point); print(list.Count); } } if (Input.GetMouseButtonUp(0)) { IsDraw = false; } drawBezierCurve(); // drawInputPointCurve(); } private void drawBezierCurve() { if(IsDraw&&list.Count>0){ List<Vector3> bcList; BezierCurve bc= new BezierCurve(); bcList = bc.CreateCurve(list);// 通过贝塞尔曲线 平滑划线点 lineRenderer.SetVertexCount(bcList.Count); //maxVertices < 65536 && maxIndices < 65536*3 点的密度 可以降低 太多会超过可设顶点数 for (int i = 0; i < bcList.Count; i++) { Vector3 v = bcList[i]; v += new Vector3(0, 0.5f, 0); lineRenderer.SetPosition(i, v); } } } private void drawInputPointCurve() { if (IsDraw && list.Count > 0) { lineRenderer.SetVertexCount(list.Count); for (int i = 0; i < list.Count; i++) { Vector3 v = list[i]; v += new Vector3(0, 0.5f, 0); lineRenderer.SetPosition(i, v); } } } }
相关文章推荐
- function&bind原理总结。
- HDOJ 1859 最小长方形
- Java进阶03 IO基础
- 第六周上机实践项目-项目4-静态成员应用
- jsp常用指令
- Android学习系列(三)四大组件之Service详解
- java中修饰符的分类及其可修饰范围
- CCF认证-出现次数最多的数
- 解决 mysql 启动报错--发现系统错误2,系统找不到指定的文件
- 深入理解Java内存模型——volatile
- 最大子数组问题及其变形
- 斐波那契数列
- JS 事件深入
- MySQL数据库端字符集设置
- Java @Override注解
- 单链表的应用3(链表排序输出)
- java集合汇总-Map-Set-HashMap等的区别与联系<未完待续>
- CodeForces 19A World Football Cup
- maven搭建springmvc+spring+mybatis实例
- 大话设计模式—享元模式