问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

three.js加载3ds或obj模型,如何实现鼠标拖拽等功能?

发布网友 发布时间:2022-04-26 10:25

我来回答

2个回答

热心网友 时间:2022-04-20 07:57

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="libs/three.js"></script>
        <script type="text/javascript" src="libs/OBJLoader.js"></script>
        
        <script type="text/javascript">
            var scene = null;
            var camera = null;
            var renderer = null;
            
            var mesh = null;
            var id = null;
            
            function init() {
                renderer = new THREE.WebGLRenderer({//渲染器
                    canvas: document.getElementById('mainCanvas')//画布
                });
                renderer.setClearColor(0x000000);//画布颜色
                scene = new THREE.Scene();//创建场景
                
                camera = new THREE.OrthographicCamera(-5, 5, 3.75, -3.75, 0.1, 100);//正交投影照相机
                camera.position.set(15, 25, 25);//相机位置
                camera.lookAt(new THREE.Vector3(0, 2, 0));//lookAt()设置相机所看的位置
                scene.add(camera);//把相机添加到场景中
                
                var loader = new THREE.OBJLoader();//在init函数中,创建loader变量,用于导入模型
                loader.load('libs/port.obj', function(obj) {//第一个表示模型路径,第二个表示完成导入后的回调函数,一般我们需要在这个回调函数中将导入的模型添加到场景中
                    obj.traverse(function(child) {
                        if (child instanceof THREE.Mesh) {
                            child.material.side = THREE.DoubleSide;
                        }
                    });
                
                    mesh = obj;//储存到全局变量中
                    scene.add(obj);//将导入的模型添加到场景中
                });
                
                var light = new THREE.DirectionalLight(0xffffff);//光源颜色
                light.position.set(20, 10, 5);//光源位置
                scene.add(light);//光源添加到场景中
                
                id = setInterval(draw, 20);//每隔20s重绘一次
            }
            
            function draw() {//们在重绘函数中让茶壶旋转:
                renderer.render(scene, camera);//调用WebGLRenderer的render函数刷新场景
                
                mesh.rotation.y += 0.01;//添加动画
                if (mesh.rotation.y > Math.PI * 2) {
                    mesh.rotation.y -= Math.PI * 2;
                }
            }
        </script>
    </head>
    
    <body onload="init()">
        <canvas id="mainCanvas" width="800px" height="600px" ></canvas>
    </body>
</html>

热心网友 时间:2022-04-20 09:15

【OrbitControls】
// Set to false to disable this control
//鼠标控制是否可用
this.enabled = true;

// "target" sets the location of focus, where the object orbits around
//聚焦坐标
this.target = new THREE.Vector3();

// How far you can dolly in and out ( PerspectiveCamera only )
//最大最小相机移动距离(景深相机)
this.minDistance = 0;
this.maxDistance = Infinity;
// How far you can zoom in and out ( OrthographicCamera only )
//最大最小鼠标缩放大小(正交相机)
this.minZoom = 0;
this.maxZoom = Infinity;

// How far you can orbit vertically, upper and lower limits.
// Range is 0 to Math.PI radians.
//最大仰视角和俯视角
this.minPolarAngle = 0; // radians
this.maxPolarAngle = Math.PI; // radians

// How far you can orbit horizontally, upper and lower limits.
// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].
//水平方向视角*
this.minAzimuthAngle = - Infinity; // radians
this.maxAzimuthAngle = Infinity; // radians

// Set to true to enable damping (inertia)
// If damping is enabled, you must call controls.update() in your animation loop
//惯性滑动,滑动大小默认0.25
this.enableDamping = false;
this.dampingFactor = 0.25;

// This option actually enables dollying in and out; left as "zoom" for backwards compatibility.
// Set to false to disable zooming
//滚轮是否可控制zoom,zoom速度默认1
this.enableZoom = true;
this.zoomSpeed = 1.0;

// Set to false to disable rotating
//是否可旋转,旋转速度
this.enableRotate = true;
this.rotateSpeed = 1.0;

// Set to false to disable panning
//是否可平移,默认移动速度为7px
this.enablePan = true;
this.keyPanSpeed = 7.0; // pixels moved per arrow key push

// Set to true to automatically rotate around the target
// If auto-rotate is enabled, you must call controls.update() in your animation loop
//是否自动旋转,自动旋转速度。默认每秒30圈
this.autoRotate = false;
this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60

// Set to false to disable use of the keys
//是否能使用键盘
this.enableKeys = true;

// The four arrow keys
//默认键盘控制上下左右的键
this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };

// Mouse buttons
//鼠标点击按钮
this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抗击疫情祝福语简短 疫情早日结束愿大家平安(精选76句) 新肺炎防范祝福语 2024年为武汉加油的朋友圈祝福语暖心句子 qq对对碰为什么在QQ游戏客户端页面没有QQ对对碰游戏 关于山地车骑行装备 烧心反酸吃什么药缓解 反胃酸烧心吃什么药 我第第因为喜欢一位女孩不和他谈拉受刺激神经错乱厌世厌学 怎么办 精神错乱你了解了吗 溯洄从之道阻且长什么意思 成语浪沐横什么? 栾川有哪些好景点 河南省最好玩的地方在哪儿? 为何说姬龙峰先师是董秉乾先师的六合枪弟子 西双版纳内的千年古树有多少种? 有谁知道河南国家级森林公园有哪些? 中国有多少个大鲵自然保护区? 长江要流过的省市有什么自然保护区 卢氏县果然红猕猴桃农民专业合作社怎么样? 河南特有的物种有哪些? Mac系统将win10虚拟机开启之后但是进不去,求解! mac电脑的虚拟机打不开win7,总是这个图标显示 求助MacBook系统刚更新,之前装的win7虚拟机打不开了 求助ヘ(_ _ヘ) 苹果安装虚拟机后出现如下问题打不开,怎么办! 虚拟机打不开mac,怎么弄 Mac book无法开机了,怀疑是虚拟机挂了,如图,怎么破! vmware中重新打开mac虚机 无法正常打开,求解 求助,Mac系统里的虚拟机win7打不开 mac版本10.12.2,虚拟机无法使用了,怎么办 mac系统下,vm虚拟机打不开/dev/vmmon,如何解决? Three.js中加载三维模型时怎么设置模型坐标归零 threejs加载3d模型 怎样控制鼠标点击选中某个模型 threejs加载3d模型 怎样控制鼠标 threejs需要加载大量场景模型,需要时时清理无用模型出场景同时能够显著... threeJS 导入模型(不确定尺寸)后如何确定相机位置及物体缩放比例_百度... three.js如何和建模师沟通 用three.js,导入的js模型或者obj模型都是黑色的。究竟是怎么回事... ThreeJS加载Obj资源后如何实现内存释放? 如何优化 treejs的 3d模型加载速度 threejs rotateOnWorldAxis不起作用 threejs问题 gltf或者json 怎么把带骨骼绑定的模型和动作数据分开? threeJS里怎样实现更新 90年出生属马的摩羯座男生幸运颜色跟幸运数字是什么? 1990年属马女,阴历三月初八,幸运数字,幸运颜色 属马的幸运颜色有哪些 属马幸运色什么颜色 1990年闰年农历5月29日幸运色是什么颜色 90年属马的,白羊座的幸运色是什么颜色 90年的人什么是幸运色 1990年农历六月初三属马的幸运颜色和数字