有关用three js 描绘物体运动的轨迹

      首先,我应当说明,这些项目是我不断看文档,看API,看例子,而后照猫画虎搞出来的,因此首先应当感谢的是three js的官网:http://thrrejs.orghtml

      不重复造轮子的原则是对的,但咱们不该当失去造轮子的能力。数组

      在three js项目中,必须有以下几个元素:app

var scene = new THREE.Scene();//场景dom

var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );//视角函数

var renderer = new THREE.WebGLRenderer(); //渲染器动画

renderer.setSize( window.innerWidth, window.innerHeight ); 渲染器参数设置htm

document.body.appendChild( renderer.domElement );使渲染器在html网页中生效对象

这三种是使画面呈现出来最基本的要素,但仅仅只是有了白纸,眼睛,画笔,并不构成做品,咱们须要在白纸上加点什么,以一个正方体为例。three

var geometry = new THREE.BoxGeometry( 1, 1, 1 ); 几何形状材质的决定文档

var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );外部纹理

var cube = new THREE.Mesh( geometry, material ); 构建一个正方体

scene.add( cube ); 将正方体加入场景中

camera.position.z = 5;决定正方体位置的z坐标、

注意:以上5条代码很是重要!!!全部对象的添加与绘制,都与上面的例子是差很少的模样。

几乎全部的动画效果与上方例子不一样的地方仅在于:

几何形状不一样或依某个函数变化;

外部纹理不一样或依某个函数变化;

构建的时机与加入场景的时机不一样或依某个函数变化;

位置不一样或依某个函数变化;

因此上方正方体的例子就是动画最原始的模样!

当你画完了,须要让它们动起来的时候,就须要以下的函数:

function render() {

requestAnimationFrame( render ); 不断地执行一个叫“render”的函数,等于无限调用本身

renderer.render( scene, camera );渲染器启动,渲染场景与视角

}

render();开始无限调用

渲染器运行函数经过不断地调用本身,使得动画一直存在,假如你把那个无限调用干掉的话,动画将是昙花一现。

我将述说一个需求:使一个物体(假设是小球)不断地运动,而且显示它运动的轨迹。

我愿意告诉大家我最终的想法与作法:

像上方同样,创建三要素,创建一个小球,

【1】使它的position位置的三个坐标都加上一个 -10~10之间的随机数,(发挥你的数学才能让球按必定规律运动)

【2】步骤【1】要在render函数中实现,这样可以使小球不断地运动。(由于每次渲染小球的坐标都在变)

【3】必须创建“线”这一对象,用以描绘运动轨迹。

【4】有关线的创建:

因为是绘制轨迹,应当尽量地准确而平滑,假如咱们直接使用“线”结构,最终只能搞出一堆直线的链接,而three js中有样条曲线的结构(有不少种曲线结构,感兴趣地能够试试别的),使用样条曲线能构造出平滑的曲线,例子以下:

var curve = new THREE.SplineCurve3(

[new THREE.Vector3( -10, 0, 10 ),

new THREE.Vector3( -5, 5, 5 ),

new THREE.Vector3( 0, 0, 0 ),

new THREE.Vector3( 5, -5, 5 ), //设置线通过的坐标

new THREE.Vector3( 10, 0, 10 ) ]

);

var path = new THREE.Path( curve.getPoints( 50 ) ); 决定画线的精度,学过微积分的都知道,这就是不断趋近

var geometry = path.createPointsGeometry( 50 ); 将坐标数组包装入几何性质中

var material = new THREE.LineBasicMaterial( { color : 0xff0000 } ); 纹理,(这里设置的是颜色)

var splineObject = new THREE.Line( geometry, material );//画线

scene.add( splineObject );将对象加入场景

而当咱们将变化的小球坐标不断加入到数组中,再依照上面的方法,天然而然地就画出了小球的轨迹。

相关文章
相关标签/搜索