使用Laya的 PixelLineSprite3D 像素线渲染精灵,画出来的线条不能调整粗细。目前想到的是通过,多画一些线条,使看起来的线条变粗。最终解决办法是,将线段的起点和线段的终点,扩城圆。用生活的例子举例,就是,拿个圆环在沙子上拖,最终拖出来的效果。画出来的效果如下图所示。

源码

/**

* 圆形画笔(适用用于 X Z平面)

* by leo

*/

export default class CirclePaint {

/**线段数组 */

private _lineSprite3Ds: Array<Laya.PixelLineSprite3D> = null;

/**线段起点 */

private _starVec3: Laya.Vector3 = null;

/**线段终点 */

private _endVec3: Laya.Vector3 = null;

/**加宽线数量 */

private _lineNum: number = 100;

/**笔刷半径 */

private _paintRadius: number = 0;

/**每条线 的最大线段数量 */

private _perLineMaxCount: number = 0;

/**圆上 两点之间的间隔角度 */

private _perAngle: number = 0;

/**

* 销毁函数

*/

public destroy(): void {

if (this._lineSprite3Ds) {

for (let piexlSprite3D of this._lineSprite3Ds) {

if (piexlSprite3D) {

piexlSprite3D.clear();

piexlSprite3D.removeSelf();

piexlSprite3D.destroy();

piexlSprite3D = null;

}

}

this._lineSprite3Ds.splice(0, this._lineSprite3Ds.length);

this._lineSprite3Ds = null;

}

}

/**

* 设置画笔

* @param parent 线段父对象

* @param lineNum 加宽线数量

* @param perLineMaxCount 每条线,最大线段数量

* @param radius 笔刷半径

*/

public setPaint(parent: Laya.Sprite3D, lineNum: number, perLineMaxCount: number, radius: number): void {

this._paintRadius = radius;

this._lineNum = lineNum;

this._perLineMaxCount = perLineMaxCount;

this._perAngle = 360 / lineNum;

this._lineSprite3Ds = new Array<Laya.PixelLineSprite3D>();

for (let i = 0; i < this._lineNum; i++) {

let pixelSprite3D = new Laya.PixelLineSprite3D(perLineMaxCount);

parent.addChild(pixelSprite3D);

this._lineSprite3Ds.push(pixelSprite3D);

}

this._starVec3 = new Laya.Vector3();

this._endVec3 = new Laya.Vector3();

}

/**

* 画线

* @param lastVec3 线段起点

* @param nextVec3 线段结束点

* @param color 颜色

*/

public drawLine(lastVec3: Laya.Vector3, nextVec3: Laya.Vector3, color: Laya.Color): void {

if (this._lineSprite3Ds) {

for (let index = 0; index < this._lineSprite3Ds.length; index++) {

let line = this._lineSprite3Ds[index];

if (line != null) {

this.setCircleVec3(lastVec3, this._starVec3, index);

this.setCircleVec3(nextVec3, this._endVec3, index);

// 项目需要限制高度,遮挡,去掉无影响

this._starVec3.y = 0.04;

this._endVec3.y = 0.04;

line.addLine(this._starVec3, this._endVec3, color, color);

}

}

}

}

/**

* 清理画线

*/

public clearLine(): void {

if (this._lineSprite3Ds) {

for (let piexlSprite3D of this._lineSprite3Ds) {

if (piexlSprite3D) {

piexlSprite3D.clear();

}

}

}

}

/**

* 线段数量是否超过限制

*/

public isMaxLineCount(): boolean {

let lineSp = this._lineSprite3Ds[0];

if (lineSp && lineSp.lineCount >= lineSp.maxLineCount) {

return true;

}

return false;

}

/**

* 最大线段数量

*/

public get maxLineCount(): number {

return this._perLineMaxCount;

}

/**

* 圆上的点

* @param centerVec3 中心点

* @param tagetVec3 圆上的点,

* @param index 下标

*/

private setCircleVec3(centerVec3: Laya.Vector3, tagetVec3: Laya.Vector3, index: number) {

let angle = this._perAngle * index * Math.PI / 180;

let xdis = Math.sin(angle) * this._paintRadius;

let zdis = Math.cos(angle) * this._paintRadius;

tagetVec3.x = centerVec3.x + xdis;

tagetVec3.y = centerVec3.y;

tagetVec3.z = centerVec3.z + zdis;

}

}

Laya 3D 画线相关推荐

  1. 【巨人的肩膀上制造世界】——10——Unity3D实用插件之Vectrosity,轻松便捷的实现2D/3D画线功能

    [巨人的肩膀上制造世界]--10--Unity3D实用插件之Vectrosity,轻松便捷的实现2D/3D画线功能 目录 1.博客介绍 2.内容 (1)编辑器预制线条 (2)编辑器修改线条 (3)线条 ...

  2. Unity画线(Vectrosity5.6.1插件)

    一个好的插件,会让你事半功倍,在Unity这个如此成熟的生态圈里,几乎常用的功能,都会有对应的插件帮助速简化开发工作,以最低的时间成本达到目的.接下来要介绍的是Unity的一款功能强大的画线插件:Ve ...

  3. vue使用高德地图小demo(标记点,画线,3D,叠加图片图层)

    vue使用高德地图小demo(标记点,画线,3D) 这个模式是3D的,可以看到地图是带有一定的倾角的. 注意:3D模式下,是不能够将进行画线的,不能使用PathSimplifier,改成2D可以正常使 ...

  4. Unity实用案例之——屏幕画线和线框渲染

    游戏里经常会遇到各种画线的需求,今天我们利用GL来实现其中的两个画线功能. 一.屏幕画线 屏幕画线是一种很好的用户交互方式,通过屏幕画线可以控制游戏中的各种元素,Unity提供了UnityEnige. ...

  5. 物理画线“救救小鸡”,支持自建关卡!技术教程分享

    引言:Cocos 微店 12.12 ~ 12.14 双12特惠来袭,5.x 折优惠 + 店铺公开优惠券(每天100张).如果你错过了双11,请不要再错过双12啦! 今天给大家推荐的是一款抖音爆款&qu ...

  6. 基于Android studio开发高德地图之连续定位、标点、画线

    目录 获取key值 创建地图 layout文件 Activity 源码:https://github.com/zzjdreams/gaode_map_track 截图:(这个是我叫我弟截图的,所以不是 ...

  7. 百度地图坐标点轨迹画线php,百度地图绘制轨迹点

    没有后台获取事实信息 都是伪数据- -轨迹信息做不到事实导航. 控件可以根据自己的需求添加 位置通过offset:new BMAP.Size(x,y)进行微调 事实路况信息需要通过引没有后台获取事实信 ...

  8. 百度地图MapV实现海量数据画线、点聚合等功能

    前言 MapVGL,是一款基于WebGL的地理信息可视化库,可以用来展示大量基于3D的地理信息点线面数据.设计初衷主要是为了解决大数据量的三维地理数据展示问题及一些炫酷的三维效果. 官网地址:MapV ...

  9. 3D车道线检测:Gen-LaneNet

    3D车道线检测:Gen-LaneNet Gen-LaneNet: A Generalized and Scalable Approach for 3D Lane Detection 论文链接:http ...

最新文章

  1. 解决安装mysql的”A Windows service with the name MySQL already exists.“问题
  2. Android(java)学习笔记158:多线程断点下载的原理(JavaSE实现)
  3. GitHub, Google Code, and other
  4. 动手造轮子:基于 Redis 实现 EventBus
  5. ​【文末有福利】揭秘阿里中台!一文看懂阿里推荐业务的两项利器
  6. 微软ping程序源代码完整版(附详细的注释)
  7. 人口简史:我们曾经差一点就彻底没了
  8. AngularJS-demo - 常用命令、内置服务、自定义服务、继承
  9. iPhone 12明天凌晨发布,有望推动苹果市值超过2.2万亿美元
  10. 使用Python,为图片添加水印
  11. linux安装 soapui_SOAP测试工具-SoapUI For Linux下载V5.2.1免费版-西西软件下载
  12. Win10应用商店下载应用速度非常缓慢的原因和解决方法
  13. 100行代码搞定Python做OCR识别身份证,文字各种字体!
  14. 映美精(IMAGINGSOURCE)相机与OPENCV库(包含工程源码)
  15. 生猪价格matlab,2447教务处.doc
  16. wsyy应用程序中的服务器错误,wsYY的博客
  17. 公共场合的wifi 靠不住
  18. Nature重磅:AI直接从大脑中合成脑电波
  19. 你还在用二分法求2个鸡蛋100层楼的问题吗?
  20. 数据库高并发和高可用方案

热门文章

  1. 小学计算机学校教学计划,小学计算机教学计划.doc
  2. 关于图片防盗链 - 图片加载报错403,但可以单独打开图片链接
  3. Spring Clound项目打包发布到centos7
  4. 硬件加速 | 常用电路设计之CRC校验码产生器的设计
  5. 几种时间序列的(不)相关性度量
  6. 在WPS中利用wordVBA实现批量识别题目数量和自动生成序号,方便在导航窗格中进行拖动排序
  7. 使用docker搭建redis集群
  8. 本地mac配置ssh免密登录远程linux服务器
  9. AI绘图—对中文拟合度很高,值得一试
  10. 全球速卖通优化技巧是什么?