首先我们创建一个模型对象

var geometry = new THREE.BoxGeometry( 100, 100, 100);  //边长100的正方体
var material = new THREE.MeshLambertMaterial({
color: 0xFF0000
});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

移动

接下来我们尝试将模型中心移动到 100,100,100的位置

方法1:Mesh对象继承Object3D对象,调用Object3D对象方法

mesh.translateX(100);
mesh.translateY(100);
mesh.translateZ(100);

方法2:通过直接改变模型position属性或者通过position属性的set方法

mesh.position.x = 100;
mesh.position.y = 100;
mesh.position.z = 100; mesh.position.set(100, 100, 100);

方法3:通过沿着向量 1,1,1移动100个单位

mesh.translateOnAxis( new THREE.Vector3( 1, 1, 1 ), 100);

*上面方法3中如果沿着某一向量移动指定的距离,需要对向量进行归一化处理,原因是向量(1,1,1)的长度不为1,即:

//沿着向量1,1,1移动100,而非移动到100,100,100的位置
mesh.translateOnAxis( new THREE.Vector3( 1, 1, 1 ).normalize(), 100);

缩放

//沿着XYZ分别缩放2倍/1.5倍/2倍
mesh.scale.set(2, 1.5, 2);

旋转

沿着XYZ分别旋转45°

mesh.rotation.x = Math.PI/4;
mesh.rotation.y = Math.PI/4;
mesh.rotation.z = Math.PI/4;

或者

mesh.rotateX(Math.PI/4)
mesh.rotateY(Math.PI/4)
mesh.rotateZ(Math.PI/4)

使用鼠标对三维物体的缩放

可以通过官方的插件OrbitControls实现鼠标对模型控制,方法如下:

引入文件:

<script type="text/javascript" src="./js/OrbitControls.js"></script>
// 渲染函数
function render() {
renderer.render(scene, camera); //执行渲染操作
}
render();
//创建控件对象 相机对象camera作为参数 控件可以监听鼠标的变化,改变相机对象的属性
var controls = new THREE.OrbitControls(camera);
//监听鼠标事件,触发渲染函数,更新canvas画布渲染效果
controls.addEventListener('change', render);

如果是动画,则不需要监听change事件

// 渲染函数
function render() {
mesh.rotation.x += 0.01
renderer.render(scene, camera); //执行渲染操作
requestAnimationFrame(render); //下一帧执行代码
}
render();
//创建控件对象 相机对象camera作为参数 控件可以监听鼠标的变化,改变相机对象的属性
var controls = new THREE.OrbitControls(camera);
//监听鼠标事件,触发渲染函数,更新canvas画布渲染效果
// controls.addEventListener('change', render);

ThreeJs 模型的缩放、移动、旋转 以及使用鼠标对三维物体的缩放的更多相关文章

  1. WinForm版图像编辑小程序(实现图像拖动、缩放、旋转、抠图)

    闲暇之余,开发一个图片编辑小程序.程序主要特点就是可方便的对多个图像编辑,实现了一些基本的操作.本文主要介绍一下程序的功能.设计思路. 执行程序 下载地址: 百度网盘.https://pan.baid ...

  2. OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)

    在OpenCV2:图像的几何变换,平移.镜像.缩放.旋转(1)主要介绍了图像变换中的向前映射.向后映射.处理变换过程中浮点坐标像素值的插值算法,并且基于OpenCV2实现了两个简单的几何变换:平移和镜 ...

  3. OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)

    图像的几何变换是在不改变图像内容的前提下对图像像素的进行空间几何变换,主要包括了图像的平移变换.镜像变换.缩放和旋转等.本文首先介绍了图像几何变换的一些基本概念,然后再OpenCV2下实现了图像的平移 ...

  4. Android动画及图片的缩放和旋转

    Android动画有2种,一种是Tween Animation,另一种是Frame Animation,先说说Tween动画吧. Tween动画是对视图对象中的内容进行一系列简单的转换,比如位置的移动 ...

  5. OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图

    读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...

  6. 缩放系列(三):一个可以手势缩放、拖拽、旋转的layout

    弄了一个下午,终于搞出来了,PowerfulLayout 下面是一个功能强大的改造的例子: 可以实现以下需求: 1.两个手指进行缩放布局 2.所有子控件也随着缩放, 3.子控件该有的功能不能丢失(像b ...

  7. js手写图片查看器(图片的缩放、旋转、拖拽)

    在做一次代码编辑任务中,要查看图片器.在时间允许的条件下,放弃了已经封装好的图片jq插件,现在自己手写js实现图片的缩放.旋转.推拽功能! 具体代码如下: <!DOCTYPE html> ...

  8. Three.js 保存camera(视角)设置到数据库,包括场景的缩放、旋转、移动等

    最近在做的项目中遇到需要保存当前的3d管道视角设置的问题,用户希望在对3d场景内的管道进行了缩放.旋转.移动之后可以将场景当前的视角状态保存在数据库中,并在下次加载时读取. 经过不断的尝试和研究,在同 ...

  9. View的平移、缩放、旋转以及位置、坐标系

    原创 2015年05月12日 13:15:29 标签: Android / Scroll / Scale / Translation / Rotation 24733 Android开发中,经常会接触 ...

随机推荐

  1. sql注入-推断是否存在SQL注入-and大法和or大法

    来自:https://www.cnblogs.com/ichunqiu/p/5749347.html 页面不返回任何错误信息,我们就可以借助本方法来推断了,首先我们在参数后面加上 and 1=1和an ...

  2. BZOJ5311,CF321E 贞鱼

    题意 Problem 5311. -- 贞鱼 5311: 贞鱼 Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 677  Solved: 150[Subm ...

  3. jumpserver管理入门

    比较规范一点的步骤 1.先在用户管理查看用户组里,添加用户组 2.在用户管理查看用户里,添加用户 3.在资产管理里查看资产,添加资产.在批量增加那里可以使用表格快速导入添加 4.在授权管理里的系统用户 ...

  4. Rogue 罗格

    发售年份 1980 平台 多平台 开发商 Michael Toy, Glenn Wichman, Ken Arnold 类型 策略/角色扮演 https://www.youtube.com/watch ...

  5. 关闭linux服务器防火墙

    --全部关闭  systemctl stop firewalld.service  #停止firewallsystemctl disable firewalld.service  #禁止firewal ...

  6. 解决腾讯云封锁SS(shadow--socks)访问google问题

    腾讯云windows主机,若使用SS(shadow--socks)采用加密算法aes-256-cfb,访问google的时候会被dropped connection. 解决办法更改ss server加 ...

  7. MongoDB解压报错gzip: stdin: not in gzip format的解决方法

    MongoDB解压报错gzip: stdin: not in gzip format的解决方法 在安装MongoDB时出现如下报错: [root@vm172--- mongodb]# tar -zxv ...

  8. 在DataFrame数据表里面提取需要的行

    在DataFrame数据表里面提取需要的行 代码功能: 在DataFrame表格中使用loc(),得到我们想要的行,然后根据某一列元素的值进行排序 此代码中还展示了为DataFrame添加列,即直接n ...

  9. IO练习

    #IO操作 import time; fileObj = open('log.txt','a'); while(True): data = input('请输入要写入的内容 : '); if data ...

  10. 【C++】源自指针的报错

    最近在调试PCL程序的时候,被这个报错折腾了好久. 无数血泪史总结成一句话,指针未初始化! PointCloudXYZ::Ptr plane_ptr;   错误!!! PointCloudXYZ::P ...