three.js加载obj模型与mtl材质,实现自由旋转缩放
<!DOCTYPE html>
<html lang="en">
<head>
<title>three.js</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<script type="text/javascript" src="../lib/three.js"></script>
<script type="text/javascript" src="../lib/MTLLoader.js"></script>
<script type="text/javascript" src="../lib/OBJLoader.js"></script>
<script type="text/javascript" src="../lib/TrackballControls.js"></script>
</head>
<body>
<script type="text/javascript">
var container, controls;
var camera, scene, renderer;
var mesh = null;
var id = null;
init();
animate();
function init() {
container = document.createElement('div');
document.body.appendChild(container);
camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 10);
camera.position.z = 2;
scene = new THREE.Scene();
// 照相机
camera = new THREE.OrthographicCamera(-5, 5, 8, -3.75, 0.1, 100);
camera.position.set(2, 5, -20);
scene.add(camera);
//添加光源
var directionalLight = new THREE.DirectionalLight(0xffeedd);
directionalLight.position.set(0, 0, 5);
scene.add(directionalLight);
var directionalLightb = new THREE.DirectionalLight(0xffeedd);
directionalLightb.position.set(0, 0, -5);
scene.add(directionalLightb);
// 材质
var mtlLoader = new THREE.MTLLoader();
mtlLoader.load('../lib/port.mtl', function(materials) {
materials.preload();
//模型
var loader = new THREE.OBJLoader();
loader.setMaterials(materials);
loader.load('../lib/port.obj', function (obj) {
obj.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material.side = THREE.DoubleSide;
}
});
mesh = obj;
scene.add(obj);
});
});
//渲染
renderer = new THREE.WebGLRenderer();
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.outputEncoding = THREE.sRGBEncoding;
container.appendChild(renderer.domElement);
//控制
controls = new THREE.TrackballControls(camera, renderer.domElement);
//自适应
window.addEventListener('resize', resize, false);
}
function resize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
function animate() {
controls.update();
renderer.render(scene, camera);
requestAnimationFrame(animate);
}
</script>
</body>
</html>
最终效果: