首页 > 其他分享 >simpread-(131 条消息) ThreeJS 使用 Curve 曲线让物体沿轨迹运动_xyphf_和派孔明的博客 - CSDN 博客_threejs curve

simpread-(131 条消息) ThreeJS 使用 Curve 曲线让物体沿轨迹运动_xyphf_和派孔明的博客 - CSDN 博客_threejs curve

时间:2022-11-16 16:36:21浏览次数:68  
标签:xyphf ThreeJS Vector3 曲线 THREE 博客 顶点 var new

创建几何体的顶点数据可以手动定义,可以自定义一个函数创建,也可使用 three.js 提供的函数创建,本节课主要讲解一些 2D 或 3D 线条的构造函数及其方法属性, 如何通过这些构造函数获得一系列曲线上的顶点数据。

three.js中的曲线类型

线性曲线(直线)

LineCurve
 LineCurve3

圆弧、椭圆弧

EllipseCurve

样条曲线

SplineCurve

三维样条曲线

CatmullRomCurve3

贝塞尔曲线

QuadraticBezierCurve(二次贝塞尔曲线)
QuadraticBezierCurve3(三维二次贝塞尔曲线)
CubicBezierCurve(三次贝赛尔曲线)
CubicBezierCurve3(三维三次贝赛尔曲线)

样条曲线

在三维空间中设置 5 个顶点,输入三维样条曲线 CatmullRomCurve3 作为参数,然后返回更多个顶点,通过返回的顶点数据,构建一个几何体,通过 Line 可以绘制出来一条沿着 5 个顶点的光滑样条曲线。

var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry
// 三维样条曲线 Catmull-Rom算法
var curve = new THREE.CatmullRomCurve3([
    new THREE.Vector3(-50, 20, 90),
    new THREE.Vector3(-10, 40, 40),
    new THREE.Vector3(0, 0, 0),
    new THREE.Vector3(60, -60, 0),
    new THREE.Vector3(70, 0, 80)
]);
//getPoints是基类Curve的方法,返回一个vector3对象作为元素组成的数组
var points = curve.getPoints(100); //分段数100,返回101个顶点
// setFromPoints方法从points中提取数据改变几何体的顶点属性vertices
geometry.setFromPoints(points);
//材质对象
var material = new THREE.LineBasicMaterial({
    color: 0x000000
});
//线条模型对象
var line = new THREE.Line(geometry, material);
scene.add(line); //线条对象添加到场景中

通过调用 threejs 样条曲线或贝塞尔曲线的 API,你可以输入有限个顶点返回更多顶点,然后绘制一条光滑的轮廓曲线。

贝塞尔曲线

贝塞尔曲线和样条曲线不同,多了一个控制点概念。
二次贝赛尔曲线的参数 p1、p3 是起始点,p2 是控制点,控制点不在贝塞尔曲线上。

var p1 = new THREE.Vector3(-80, 0, 0);
var p2 = new THREE.Vector3(20, 100, 0);
var p3 = new THREE.Vector3(80, 0, 0);
// 三维二次贝赛尔曲线
var curve = new THREE.QuadraticBezierCurve3(p1, p2, p3);

三次贝赛尔曲线的参数 p1、p4 是起始点,p2、p3 是控制点,控制点不在贝塞尔曲线上。

var p1 = new THREE.Vector3(-80, 0, 0);
var p2 = new THREE.Vector3(-40, 100, 0);
var p3 = new THREE.Vector3(40, 100, 0);
var p4 = new THREE.Vector3(80, 0, 0);
// 三维三次贝赛尔曲线
var curve = new THREE.CubicBezierCurve3(p1, p2, p3, p4);

getPoints

代码中的样条曲线执行方法 getPoints,会返回一系列的顶点数据构成的数组,顶点颜色样条函数曲线分布,返回的顶点数由方法 getPoints 的参数细分数决定。 可以更改细分数的值来查看线条的渲染效果,细分数越大,曲线的渲染效果越好。比如设置 5,你可以明显的看到 5 段直线段,把线条渲染模式更,改为点渲染模式,你会看到 6 个顶点。

point = spline.getPoint(0.5);//A position on the curve. Must be in the range [0, 1 ].

原文地址 blog.csdn.net

标签:xyphf,ThreeJS,Vector3,曲线,THREE,博客,顶点,var,new
From: https://www.cnblogs.com/zhuoss/p/16896374.html

相关文章

  • Github的基本功能教程_F_hawk189_新浪博客
    今天在知乎上看到的一个介绍,虽然不是特比详细,但是生动易懂,看完之后,大概就知道怎么用了Repository:你和我一起做“知乎首页”,“知乎首页”就是Repository,即项目或者”未......
  • decorator的用法及原理_F_hawk189_新浪博客
    060、概念什么叫装饰器,其实也可以叫做包装器。即对于一个既有的函数func(args),在调用它之前和之后,我们希望都做一些事情,把这个函数包装起来。python中的装饰器分为两类:函数......
  • python爬取智联招聘信息_F_hawk189_新浪博客
    分享今天写的一个爬取智联招聘信息的爬虫,使用了requests和re模块,没有写注释,但是代码都比较简单,不是太难,这是爬取的信息:​​​​​​以下是源码部分:复制过来又没......
  • python中同时迭代对个iterable对象_F_hawk189_新浪博客
    题外话:最近因为课程需要开始深入了解Python语言。因为以前一直用的Java、C++等强类型的静态语言,现在突然使用Python确实感受到了很大的不同。直观感觉就是,在Python中总是......
  • 我背着偷偷记录了大半年我博客数据[手动狗头]
    作为一个数据控+一个有追求的技术博主,总是希望自己能知道自己博客历史每日粉丝数量、阅读量、积分、评论……的数据,然而官方博客管理后台给展示的数据太少了,只有每日访问量......
  • QT客户端与Java服务端进行https通信_F_hawk189_新浪博客
    网上也有一部分教程,不过我还是踩了许多的坑,所以整理了一下网上看到的和自己的一些收获。首先:,Tomcat.truststore(包含信任库),首先说明一下这个两个文件   cl......
  • virtviewerUsbredirUSB重定向_F_hawk189_新浪博客
    编译virtviewer之前执行的configure命令,是没有使能usb-redir相关的功能,virtviewer是否支持usbredir是完全依赖于spice-gtk的。virtviewer对spice-gtk的依赖关系,可以从vi......
  • 我的第一个博客
    一级标题二级标题三级标题斜体是一个星号粗体是两个星号删除线是两个波浪  引用小石子绊不倒大象,也堵不住洪流 分割线图片 超链接点击跳转  ......
  • 从博客园与51CTO同步文章的说明?
    1.收到51CTO博客的邀请,只需要同步文章即可多个平台发布自己的文章,希望帮助更多的人,我把操作过程分享给大家,时间查收的可能晚了一点,但是回复了。下面是我加了一下小姐姐的......
  • simpread-(130 条消息) js 中常见的导入导出方式_AntyCoder 的博客 - CSDN 博客_js 导
    常见的导出方式创建文件foo.js//设置常量constname='tom';constage=20;consthello=function(age){console.log('张三今年'+age)}方式一exportc......