Three.js OBJLoader加载obj文件

Three.js中文网提供Three.js、WebGL视频课程http://www.webgl3d.cn/
Three.js官方文档http://www.yanhuangxueyuan.com/threejs/docs/index.htmlGitHub 源码地址JavaScript 3D Library. Contribute to mrdoob/three.js development by creating an account on GitHub.https://github.com/mrdoob/three.js

OBJ加载器(OBJLoader)

 用于加载 .obj 资源的加载器。
OBJ文件格式是一种简单的数据格式, 这种格式以人类可读的形式来表示3D几何体,即每个顶点的位置、每个纹理坐标顶点的UV位置、顶点法线、 将使每个多边形定义为顶点列表的面以及纹理顶点。

OBJLoadder 代码示例

// 代码示例

// instantiate a loader
const loader = new OBJLoader();

// load a resource
loader.load(
	// resource URL
	'models/monster.obj',
	// called when resource is loaded
	function ( object ) {

		scene.add( object );

	},
	// called when loading is in progresses
	function ( xhr ) {

		console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );

	},
	// called when loading has errors
	function ( error ) {

		console.log( 'An error happened' );

	}
);

OBJLoader 的应用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>OBJLoader</title>
</head>
<!--  CDN引用 -->
<script type="importmap">
        {
          "imports": {
            "three": "https://cdn.jsdelivr.net/npm/three@v0.170/build/three.module.js",
            "three/addons/": "https://cdn.jsdelivr.net/npm/three@v0.170/examples/jsm/"
          }
        }
      </script>

<script type="module">

    import * as THREE from 'three';
    import { OBJLoader } from 'three/addons/loaders/OBJLoader.js';
    import { OrbitControls } from 'three/addons/controls/OrbitControls.js';

    // 创建场景
    const scene = new THREE.Scene();
    // 创建相机
    const camera = new THREE.PerspectiveCamera(30, window.innerWidth / window.innerHeight, 1, 500);
    camera.position.x = 400;
    camera.rotateX = new THREE.Euler(Math.PI, 0, 0);
    // 创建渲染器
    const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true, preserveDrawingBuffer: true });
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
    renderer.outputColorSpace = THREE.SRGBColorSpace;
    renderer.setClearAlpha(1);

    // 创建控制器
    const controls = new OrbitControls(camera, renderer.domElement);
    controls.noPan = true;
    controls.staticMoving = true;
    //  焦距  距离越大图片越小
    controls.minDistance = 10;
    controls.maxDistance = 200;
    // 缩放速度
    controls.zoomSpeed = 2.5;
    controls.panSpeed = .5;
    // 旋转速度
    controls.rotateSpeed = 3;
    controls.dynamicDampingFactor = .1;
    // 创建光源
    const light = new THREE.AmbientLight(16777215, 1);
    scene.add(light);
    // light-平行光
    const directionalLight = new THREE.DirectionalLight(16777215, 0.7);
    camera.add(directionalLight);

    // 创建加载器
    const loader = new OBJLoader();
    loader.load('https://xxx', function (object) {
        scene.add(object);
    })
    // 渲染场景
    function animate() {
        requestAnimationFrame(animate);
        controls.update();
        renderer.render(scene, camera);
    }
    animate();
</script>

<body>





</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值