博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
three.js 专题
阅读量:6883 次
发布时间:2019-06-27

本文共 3638 字,大约阅读时间需要 12 分钟。

wagner的作用已经被three集成

参看D:\npmwork\three.js-master\examples\js中的shaderspostprocessing文件夹

关于提示找不到OrbitControls

OrbitControls已经从新版three.js中剥离,需要单独引入

添加场景背景,或vr背景

  1. 固定背景: scene.background = new THREE.TextureLoader().load( url );
  2. vr背景: scene.background = new THREE.CubeTextureLoader().load( [ 'px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg' ] );
    vr背景中由六个图拼成一个六边型,相机处于这个六边形的中心,

矩阵详解

镜头控制

//OrbitControlsvar controls = new THREE.OrbitControls( camera );复制代码

辅助线

var axesHelper = new THREE.AxesHelper( 5 );scene.add( axesHelper );复制代码

球体图片

球体图片应该是比例2:1的图片,不然会造成图像失真 下边这个库中有太阳系行星的素材

让对象以指定轴(非xyz轴)旋转

skybox.rotation.x/y/z 是球体绕自身圆形旋转

@.rotateOnAxis

@.setRotationFromEuler

第一点 物体的rotation的旋转属性是相对与该物体的本身坐标系而言的,物体的rotation就是Euler欧拉角,但是会存在万向节死锁的问题。

第二点 three.js中提供了相关的方法rotateOnAxis(axis,angle),该方法需要注意的是angle是相对于物体之前状态的旋转角度,也就是增加角度;另外一点需要注意的是axis参数向量是相对物体本身坐标系的,且为单位向量,通过调用.normalize()得到单位向量;rotateOnAxis方法其实也就是调用Quaternion对象的setFromAxisAngle方法

第三点 构建旋转矩阵,方法有:1、makeRotationAxis(axis,angle)方法生成绕任意轴转angle弧度的旋转矩阵 2、new THREE.Matrix4().makeBasis(axisX, axisY, axisZ).setPosition(point);构建矩阵 之后将物体的quaternion应用setFromRotationMatrix

How to rotate a 3D object on axis three.js?

引用:

CommunityTony Han提出了一个问题:How to rotate a 3D object on axis three.js?,或许与您遇到的问题类似。

回答者PeterCory Gross给出了该问题的处理方式:

Here are the two functions I use. They are based on matrix rotations. and can rotate around arbitrary axes. To rotate using the world’s axes you would want to use the second function rotateAroundWorldAxis().

// Rotate an object around an arbitrary axis in object spacevar rotObjectMatrix;function rotateAroundObjectAxis(object, axis, radians) {    rotObjectMatrix = new THREE.Matrix4();    rotObjectMatrix.makeRotationAxis(axis.normalize(), radians);    // old code for Three.JS pre r54:    // object.matrix.multiplySelf(rotObjectMatrix);      // post-multiply    // new code for Three.JS r55+:    object.matrix.multiply(rotObjectMatrix);    // old code for Three.js pre r49:    // object.rotation.getRotationFromMatrix(object.matrix, object.scale);    // old code for Three.js r50-r58:    // object.rotation.setEulerFromRotationMatrix(object.matrix);    // new code for Three.js r59+:    object.rotation.setFromRotationMatrix(object.matrix);}var rotWorldMatrix;// Rotate an object around an arbitrary axis in world space       function rotateAroundWorldAxis(object, axis, radians) {    rotWorldMatrix = new THREE.Matrix4();    rotWorldMatrix.makeRotationAxis(axis.normalize(), radians);    // old code for Three.JS pre r54:    //  rotWorldMatrix.multiply(object.matrix);    // new code for Three.JS r55+:    rotWorldMatrix.multiply(object.matrix);                // pre-multiply    object.matrix = rotWorldMatrix;    // old code for Three.js pre r49:    // object.rotation.getRotationFromMatrix(object.matrix, object.scale);    // old code for Three.js pre r59:    // object.rotation.setEulerFromRotationMatrix(object.matrix);    // code for r59+:    object.rotation.setFromRotationMatrix(object.matrix);}复制代码

So you should call these functions within your anim function (requestAnimFrame callback), resulting in a rotation of 90 degrees on the x-axis:

var xAxis = new THREE.Vector3(1,0,0);rotateAroundWorldAxis(mesh, xAxis, Math.PI / 180);复制代码

点击互动

//向点击方向发射镭射光,返回接触的对象var raycaster = new Raycaster(); var mouse = new THREE.Vector3(); window.addEventListener("click", (e) => {mouse.set(	(e.clientX / window.innerWidth)*2- 1,	-(e.clientY / window.innerHeight)*2+ 1, 	50);raycaster.setFromCamera( mouse, camera );let a= raycaster.intersectObject( ground, true );console.log(a);});复制代码

three图片虚化

无限管道

转载于:https://juejin.im/post/5ba30f43e51d450e60582843

你可能感兴趣的文章
MongoDB 在windows服务器安装部署与远程访问配置
查看>>
iOS实现类似苹果手机原生的锁屏界面(数字密码)
查看>>
[vue] 表单输入格式化,中文输入法异常
查看>>
Observer观察者模式与OCP开放-封闭原则
查看>>
如何搭建高级工程师知识框架?推荐两种方式
查看>>
BAT的医疗春秋大梦
查看>>
Pulsar本地单机(伪)集群 (裸机安装与docker方式安装) 2.2.0
查看>>
利用H5的css3制作动画
查看>>
Android View 事件分发源码分析
查看>>
vue 2.0 - props
查看>>
RustCon Asia 实录 | Rust 在国内某视频网站的应用
查看>>
Vue遇上Analytics
查看>>
mysql
查看>>
修改max_allowed_packet(允许执行的sql最大长度)
查看>>
node js 处理时间分析
查看>>
判断数据库、表和字段是否存在
查看>>
新手安装postgreSQL后无法连接服务器
查看>>
递归和动态规划
查看>>
java实现简单的控制台管理系统
查看>>
建造模式
查看>>