<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<title>threejs加载obj模型</title>
<script src="./js/"></script>
<script src="./js/"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
#webgl {
width: 100%;
height: 100vh;
overflow: hidden;
}
</style>
</head>
<body>
<div id="webgl"></div>
<script>
// 获取渲染容器
let webgl = document.getElementById("webgl");
// 获取渲染容器的宽高
let webglWidth = webgl.offsetWidth;
let webglHeight = webgl.offsetHeight;
// 创建场景
let scene = new THREE.Scene();
// 设置环境光(十六进制颜色)
let ambient = new THREE.AmbientLight(0x444444);
// 将环境光添加到场景中
scene.add(ambient);
// 设置点光源(十六进制颜色)
let point = new THREE.PointLight(0xffffff);
// 设置点光源的位置(x轴, y轴, z轴)
point.position.set(400, 200, 300);
// 将点光源添加到场景中
scene.add(point);
// 创建透视相机(角度, 宽高比, 最近距离, 最远距离)
let camera = new THREE.PerspectiveCamera(60,webglWidth/webglHeight,0.1,2000);
// 设置相机的位置(x轴, y轴, z轴)
camera.position.set(100, 100, 100);
// 将相机指向场景中心
camera.lookAt(scene.position);
// 创建渲染器
let renderer = new THREE.WebGLRenderer();
// 设置渲染器的初始颜色(十六进制颜色, 透明度)
renderer.setClearColor(0xEEEEEE,1);
// 设置渲染器大小(标签宽度, 标签高度)
renderer.setSize(webglWidth,webglHeight);
// 将渲染器添加到渲染容器中(渲染器元素)
webgl.appendChild(renderer.domElement);
// 创建渲染函数
function render(){
// 渲染场景和相机(场景, 相机)
renderer.render(scene,camera);
}
// 调用渲染函数
render();
// 设置窗口变化自适应调整事件
window.onresize = function(){
// 重新获取渲染容器的宽高
webglWidth = webgl.offsetWidth;
webglHeight = webgl.offsetHeight;
// 重置渲染器canvas画布大小
renderer.setSize(webglWidth,webglHeight);
// 重置相机显示范围的宽高比
camera.aspect = webglWidth/webglHeight;
// 更新相机的投影矩阵
camera.updateProjectionMatrix();
// 重新调用渲染函数
render();
};
// 创建 OBJ 模型加载器
let loader = new THREE.OBJLoader();
// 加载 OBJ 文件
loader.load('./img/鹤.OBJ', function(obj) {
// 加载纹理贴图
let texture = new THREE.TextureLoader().load('./img/',function(){
render(); // 加载成功后重新调用渲染函数
});
// 给 OBJ 模型设置纹理贴图
obj.children[0].material = new THREE.MeshBasicMaterial({ map: texture });
// 将 OBJ 模型添加到场景中
scene.add(obj);
// 设置 OBJ 模型居中
obj.children[0].geometry.center();
// 设置 OBJ 模型缩放大小
obj.children[0].scale.set(100, 100, 100);
})
</script>
</body>
</html>