今天来给大家分享一个自定义曲线绘制的demo,这个demo主要是结合鼠标在三维空间点击的焦点获取、new THREE.CatmullRomCurve3()对象等。

  1. 我们需要在三维的scene内,监听鼠标的点击事件,绘制曲线的前提,需要一个平面,所以我们先在三维场景构建一个看不见的虚拟平面:

    // 创建平面
    let normal = new THREE.Vector3(0, 1, 0); // 构建向量
    let VirtualPlane = new THREE.Plane(normal, 0); // 虚拟平面
    
  2. 创建好平面后,就是需要获取当前鼠标点击的位置,即鼠标点击与虚拟平面的交点:

    /*** 获取射线与平面相交的交点* @param {*} event:鼠标点击事件event* @returns*/
    function getIntersects(event) {let mouse = new THREE.Vector2();mouse.x = (event.clientX / window.innerWidth) * 2 - 1;mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;let normal = new THREE.Vector3(0, 1, 0);// 创建平面let VirtualPlane = new THREE.Plane(normal, 0);// 从相机发出一条射线经过鼠标点击的位置raycaster.setFromCamera(mouse, camera);// 获取射线let ray = raycaster.ray;// 计算相机到射线的对象,可能有多个对象,返回一个数组,按照距离相机远近排列let intersects = ray.intersectPlane(VirtualPlane);// 返回向量return intersects;
    }
    
  3. 拿到鼠标点击的焦点,存入对应的数组,然后绘制曲线:

    let pointsArray = [];
    pointsArray.push(intersects);
    if (pointsArray.length < 2) return; // 两点成线,少于两个点时不作绘制
    // 绘制曲线
    let curve = new THREE.CatmullRomCurve3(pointsArray);
    curve.curveType = 'chordal'; // 曲线类型
    curve.closed = false; // 曲线是否自动闭环
    let ponits = curve.getPoints(50); // 分段值,数值越大,曲线越圆滑
    let line = new THREE.Line(new THREE.BufferGeometry().setFromPoints(ponits), new THREE.LineBasicMaterial({ color: 0x0cc7d8 })); // 构建三维曲线
    scene.add(line); // 加入场景
    

以上就是三维场景中,常见的曲线自定义绘制,根据上述的思路,可以在平面绘制任意图案,如线段、道路等等,同时结合new THREE.Shape()对象的使用,可以绘制任意形状,还可以利用自定义的曲线,运用到智慧城市的发光的车流线绘制,如有需要,可以私聊,本人已经写好完整的案例。

欢迎大家提意见或者建议,相互学习!!!!!!

THREEJS - 自定义曲线绘制相关推荐

  1. R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis)

    R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis) 我们可能使用别的语言获得了机器学习模型以及对应的预测概率和标签,我们想直接使用这些信息进行DCA曲线的 ...

  2. 自定义view实战(10):贝塞尔曲线绘制小红点

    前言 上一篇文章用扇形图练习了一下安卓的多点触控,实现了单指旋转.二指放大.三指移动,四指以上同时按下进行复位的功能.今天这篇文章用很多应用常见的小红点,来练习一下贝塞尔曲线的使用. 需求 这里想法来 ...

  3. Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

    Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...

  4. ST_Curve --- 一个专业的曲线绘制控件

    一:什么是ST_Curve?   ST_Curve是一个专业的曲线绘制控件,只要是xy坐标系的曲线,都可绘制,纵坐标只能显示为值,横坐标可以显示为值或者时间(如果你愿意为控件提供插件,则坐标可显示任意 ...

  5. android运动轨迹怎么画,Android 利用三阶贝塞尔曲线绘制运动轨迹的示例

    本篇文章主要介绍了Android 利用三阶贝塞尔曲线绘制运动轨迹的示例,分享给大家,具体如下: 实现点赞效果,自定义起始点以及运动轨迹 效果图: xml布局: xmlns:tools="ht ...

  6. android动画框架,GitHub - azhengyongqin/CustomAnimationFramework: Android自定义曲线路径动画框架...

    Android自定义曲线路径动画框架 最近在一个项目中需要一个像QQ打开个人爱好那样的动画效果如下图: 可以看出每个小球都是以顺时针旋转出来的,说明像这样的曲线动画用Android中自带的平移动画是很 ...

  7. Python-Matplotlib可视化(3)——自定义样式绘制精美统计图

    Python-Matplotlib可视化(3)--自定义样式绘制精美统计图 前言 控制线条样式和线宽 线条样式 线宽 控制填充样式 控制标记样式 控制标记大小 创建自定义标记 总结--对标记进行更精细 ...

  8. Python 科赫曲线绘制

    科赫曲线绘制 #科赫曲线绘制 import turtle import time def koch(size, n):if n == 0:turtle.forward(size)else:for an ...

  9. (一)QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)QCustomPlot常见属性设置.多曲线绘制.动态曲线绘制.生成游标.矩形放大等功能实现 第二章: (二)QCustomPlot ...

最新文章

  1. safari快捷图标不见了_Win7桌面图标不见了怎么办?附解决办法
  2. 0x34.数学 - 矩阵乘法
  3. Mybatis一级缓存,二级缓存的实现就是这么简单
  4. Java11正式发布了,我们该怎么办?
  5. C# 实体类几种深拷贝的方法——解决关于对象赋值,A=B,A改变,B也改变问题
  6. 零垃圾创建数百万个对象
  7. 选定用户与用户组启动流程(学习笔记)
  8. structs2 result type介绍
  9. 红旗与火狐携手打造优质开源体验,推出红旗Linux专版火狐浏览器
  10. 从0开始搭建基于Zookeeper的Spark集群
  11. sps2013安装错误
  12. CSS基础part1
  13. Linux下硬盘分区详解
  14. 由我国科学家研制的计算机,由我国科学家研制的系列超级计算机综合技术处于国际领先水平,2015年11月,全球超级计算机...
  15. 怎么卸载脚手架_安装卸载流程 · 广联达BIM模板脚手架设计软件帮助文档 · 看云...
  16. 【小程序】快来开发你的第一个微信小游戏(详细流程)
  17. KDD2020|字节联合密歇根州立大学提出推荐广告联合训练框架RAM(已开源)
  18. 搜狗新闻语料文本分类实践
  19. CSS — 导航栏篇(一)
  20. recover 没有捕获异常_Golang学习笔记之错误处理error、panic (抛出错误),recover(捕获错误...

热门文章

  1. CentOS 7中 rsync 备份数据使用实例
  2. 动态分配IP之dhcp服务
  3. ubuntu中make出错
  4. struts validator 基本知识 之 【出现错误信息的条数】。
  5. Eclipse 中 去掉控制台最大行数限制
  6. 圆弧周长公式_钢板和钢管的理论重量计算公式居然不一样?
  7. 【Flume】举例分析如何配置Flume
  8. 【Oracle】配置客户端监听
  9. 解决PRINT函数UTF-8问题
  10. Sublime Text 3 注册码失效(被移除)解决方法