Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
作者:专注前端30年 时间:2024-05-22 10:31:00
前言
本文主要给大家介绍了关于Three.js利用orbit controls插件(轨道控制)控制模型交互动作的相关内容,这个效果相对于第八节的轨迹球插件使用上感觉要好,虽然轨迹球插件可以来回的滚动,但是容易分辨不清楚上下左右的关系,容易混乱,适合调试,而轨道控制插件orbit则适合客户使用,还不会产生混乱效果。下面讲一下使用。
(1)首先引入插件,文件地址在官方案例的examples/js/controls/OrbitControls.js。
(2)然后实例化函数,把相机和渲染器的dom传入,并设置相关设置。
//用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放
var controls;
function initControls() {
controls = new THREE.OrbitControls( camera, renderer.domElement );
// 如果使用animate方法时,将此函数删除
//controls.addEventListener( 'change', render );
// 使动画循环使用时阻尼或自转 意思是否有惯性
controls.enableDamping = true;
//动态阻尼系数 就是鼠标拖拽旋转灵敏度
//controls.dampingFactor = 0.25;
//是否可以缩放
controls.enableZoom = true;
//是否自动旋转
controls.autoRotate = true;
//设置相机距离原点的最远距离
controls.minDistance = 200;
//设置相机距离原点的最远距离
controls.maxDistance = 600;
//是否开启右键拖拽
controls.enablePan = true;
}
(3)最后,在animate函数内调用orbit的update()
更新。
function animate() {
//更新控制器
controls.update();
render();
//更新性能插件
stats.update();
requestAnimationFrame(animate);
}
就实现了相关效果。
下面是全部案例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
html, body {
margin: 0;
height: 100%;
}
canvas {
display: block;
}
</style>
</head>
<body onload="draw();">
</body>
<script src="build/three.js"></script>
<script src="examples/js/controls/OrbitControls.js"></script>
<script src="examples/js/libs/stats.min.js"></script>
<script>
var renderer;
function initRender() {
renderer = new THREE.WebGLRenderer({antialias:true});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
}
var camera;
function initCamera() {
camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000);
camera.position.set(0, 0, 400);
}
var scene;
function initScene() {
scene = new THREE.Scene();
}
var light;
function initLight() {
scene.add(new THREE.AmbientLight(0x404040));
light = new THREE.DirectionalLight(0xffffff);
light.position.set(1,1,1);
scene.add(light);
}
function initModel() {
var map = new THREE.TextureLoader().load("examples/textures/UV_Grid_Sm.jpg");
var material = new THREE.MeshLambertMaterial({map:map});
var cube = new THREE.Mesh(new THREE.BoxGeometry(100, 200, 100, 1, 1, 1), material);
scene.add(cube);
}
//初始化性能插件
var stats;
function initStats() {
stats = new Stats();
document.body.appendChild(stats.dom);
}
//用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放
var controls;
function initControls() {
controls = new THREE.OrbitControls( camera, renderer.domElement );
// 如果使用animate方法时,将此函数删除
//controls.addEventListener( 'change', render );
// 使动画循环使用时阻尼或自转 意思是否有惯性
controls.enableDamping = true;
//动态阻尼系数 就是鼠标拖拽旋转灵敏度
//controls.dampingFactor = 0.25;
//是否可以缩放
controls.enableZoom = true;
//是否自动旋转
controls.autoRotate = true;
//设置相机距离原点的最远距离
controls.minDistance = 200;
//设置相机距离原点的最远距离
controls.maxDistance = 600;
//是否开启右键拖拽
controls.enablePan = true;
}
function render() {
renderer.render( scene, camera );
}
//窗口变动触发的函数
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
render();
renderer.setSize( window.innerWidth, window.innerHeight );
}
function animate() {
//更新控制器
controls.update();
render();
//更新性能插件
stats.update();
requestAnimationFrame(animate);
}
function draw() {
initRender();
initScene();
initCamera();
initLight();
initModel();
initControls();
initStats();
animate();
window.onresize = onWindowResize;
}
</script>
</html>
来源:http://blog.csdn.net/qq_30100043/article/details/75042703
标签:orbit,controls,轨道控制
0
投稿
猜你喜欢
MySQL的查询计划中ken_len的值计算方法
2024-01-24 13:32:49
利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享
2024-01-16 17:28:39
利用 python 对目录下的文件进行过滤删除
2022-07-01 01:24:32
Variant总能找到与之相匹配的数据类型吗?
2009-10-29 12:20:00
OpenCV实现相机标定
2023-11-13 00:36:45
利用Python2下载单张图片与爬取网页图片实例代码
2023-06-25 00:57:22
python Pandas 读取txt表格的实例
2023-12-05 01:23:48
使用Python对微信好友进行数据分析
2021-04-12 18:10:58
Python基础之函数基本用法与进阶详解
2023-07-13 07:57:46
Python基于递归算法实现的走迷宫问题
2023-08-25 03:55:05
Python中的True,False条件判断实例分析
2023-09-30 07:34:24
完美处理python与anaconda环境变量的冲突问题
2023-01-11 07:37:31
python推导式的使用方法实例
2021-03-13 09:38:25
[项目布局配置]Nosql与PythonWeb-Flask框架组合
2022-07-08 19:55:40
mysql 超大数据/表管理技巧
2024-01-16 22:14:05
Python机器学习应用之决策树分类实例详解
2021-12-19 16:57:53
thinkPHP学习笔记之安装配置篇
2023-09-27 18:32:03
SQL多表联合查询时如何采用字段模糊匹配
2024-01-19 18:06:40
通过FSO进行页面计数
2008-11-27 16:02:00
python list.sort()根据多个关键字排序的方法实现
2021-05-22 03:16:09