js加载fbx模型文件

html

<div class="ui-layout-center">
    <div class="container-div">
        <div class="row" style=" background: #fff;" >
            <div class="ibox float-e-margins" style="margin: 15px;padding: 20px;min-height: 650px;">
                <p class="contain"></p>
                <p class="attach"></p>
                <p class="attach2 row"></p>
            </div>
        </div>
    </div>
</div>

js

<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/bootstrap.min.js}"></script>
<script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
<script th:src="@{/layui/layui.js}"></script>
<script th:src="@{/js/three.js}"></script>
<script th:src="@{/js/FBXLoader.js}"></script>
<script th:src="@{/js/OrbitControls.js}"></script>
<script th:src="@{/js/stats.min.js}"></script>
<script th:src="@{/js/fflate.min.js}"></script>
<script th:src="@{/js/dat.gui.min.js}"></script>
   function viewFbx(){
        var mixers = [];
        var renderer;
        var drawWidth = 1650; // 初始化模块宽高
        var drawHeight = 800;
        var modelLocation = $("#modelLocation").val();
        function initRender() {
            renderer = new THREE.WebGLRenderer({
                antialias: true
            });
            renderer.setSize(drawWidth, drawHeight);
            //告诉渲染器需要阴影效果
            renderer.setClearColor(0xeeeeee);
            $(".draw").append(renderer.domElement);
            renderer.setFaceCulling(THREE.CullFaceNone, THREE.FrontFaceDirectionCW);
        }
        var camera;
        function initCamera() {
            camera = new THREE.PerspectiveCamera(45, drawWidth / drawHeight, 0.1, 1000);
            camera.position.set(0, 40, 50);
            camera.lookAt(new THREE.Vector3(0, 0, 0));
        }
        var scene;
        function initScene() {
            scene = new THREE.Scene();
        }
        //初始化dat.GUI简化试验流程
        var gui;
        function initGui() {
            //声明一个保存需求修改的相关数据的对象
            gui = {};
            var datGui = new dat.GUI();
            //将设置属性添加到gui当中,gui.add(对象,属性,最小值,最大值)
        }
        var light;
        function initLight() {
            scene.add(new THREE.AmbientLight(0x444444));
            light = new THREE.DirectionalLight(0xffffff);
            light.position.set(-50, 20, 50);
            light.castShadow = true; //告诉平行光需要开启阴影投射
            scene.add(light);
            light2 = new THREE.DirectionalLight(0xffffff);
            light2.position.set(50, 100, 50);
            light2.castShadow = true; //告诉平行光需要开启阴影投射
            scene.add(light2);
        }
        function initModel(url) {
            var loader = new THREE.FBXLoader();
            loader.load(url, function (object) {
                object.mixer = new THREE.AnimationMixer(object);
                mixers.push(object.mixer);
                object.traverse(function (child) {
                    if (child.isMesh) {
                        child.castShadow = true;
                        child.receiveShadow = true;
                    }
                });
                scene.add(object);
            });
        }

        //初始化性能插件
        var stats;
        function initStats() {
            stats = new Stats();
        }
        //用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放
        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.autoRotateSpeed = 0.5;
            controls.minDistance = 2; //设置相机距离原点的最远距离
            controls.maxDistance = 200; //设置相机距离原点的最远距离
            controls.enablePan = true; //是否开启右键拖拽
        }

        function render() {
            renderer.render(scene, camera);
        }

        //窗口变动触发的函数
        function onWindowResize() {
            camera.aspect = drawWidth / drawHeight;
            camera.updateProjectionMatrix();
            render();
            renderer.setSize(drawWidth, drawHeight);
        }

        function animate() {
            render(); //更新控制器
            stats.update(); //更新性能插件
            controls.update();
            requestAnimationFrame(animate);
        }

                initGui();
                initRender();
                initScene();
                initCamera();
                initLight();
                initModel(modelLocation);
                initControls();
                initStats();
                animate();
                window.onresize = onWindowResize;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 Babylon.js FBX 模型,需要使用 `BABYLON.SceneLoader.ImportMesh()` 方法。以下是一个简单的示例,假设您已经将 Babylon.js 库引入到 HTML 文件中: ```html <!DOCTYPE html> <html> <head> <title>Babylon.js FBX Loading Example</title> <script src="https://cdn.babylonjs.com/babylon.js"></script> <script src="https://cdn.babylonjs.com/loaders/babylonjs.loaders.min.js"></script> </head> <body> <canvas id="renderCanvas"></canvas> <script> var canvas = document.getElementById("renderCanvas"); var engine = new BABYLON.Engine(canvas, true); // 创建场景 var createScene = function () { var scene = new BABYLON.Scene(engine); // FBX 模型 BABYLON.SceneLoader.ImportMesh("", "path/to/fbx/file/", "model.fbx", scene, function (newMeshes) { // 可以在这里对模型进行一些操作 }); // 地面 var ground = BABYLON.MeshBuilder.CreateGround("ground", {width: 10, height: 10}, scene); // 灯光 var light = new BABYLON.PointLight("light", new BABYLON.Vector3(0, 1, 0), scene); return scene; } var scene = createScene(); engine.runRenderLoop(function () { scene.render(); }); </script> </body> </html> ``` 在上面的示例中,`BABYLON.SceneLoader.ImportMesh()` 方法的第一个参数是用于命名所模型的根节点的字符串。第二个参数是 FBX 文件所在的目录路径。第三个参数是 FBX 模型文件名。第四个参数是场景对象,用于在场景中模型。第五个参数是回调函数,用于在 FBX 文件完成后执行一些操作,比如设置动画等。 注意: FBX 模型需要使用 `babylonjs.loaders.min.js` 库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值