文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP加载3D模型【WebGL】

2023-09-28 14:48

关注

这是另一篇关于如何使用 PHP加载 3D 模型的文章。 在这里,我使用 Laravel 作为后端及其存储。 我在前端使用 Three.Js 库来渲染和显示 3D 模型。 我将向您展示如何上传 3D 模型以及如何从 Laravel 存储加载 3D 模型。 请仔细完成以下步骤。 大家可以在评论区提出任何问题。 在这里,我展示了一条主要路径,然后你可以根据自己的喜好对其进行自定义。

在这里插入图片描述

推荐:使用 NSDT场景设计器 快速搭建 3D场景。

1、创建 Laravel 项目

创建一个新的 Laravel 项目并创建新的模型、视图和控制器。 然后使用下面的命令链接存储。

php artisan storage:link

2、上传 3D 模型

你可以使用 HTML 和 Javascript 创建一个简单的表单。 我使用 Laravel blade文件来构建前端。

@csrf

使用 Ajax 调用提交表单:

$(document).ready(function() {        $('#file-upload').submit(function(e) {            e.preventDefault();            let formData = new FormData(this);            $.ajax({                type:'POST',                url: "{{ route('model.store') }}",                data: formData,                contentType: false,                processData: false,                success: (response) => {                    console.log(response);                    if (response.success) {                        window.location.href = response.url;                    }                },                error: function(response){                    alert('Prescription has not been created successfully');                }          });        });    });

在后端,可以按如下方式实现 store() 方法:

      public function store(Request $request)    {        $validator = Validator::make($request->all(), [            'name' => 'required',            'files' => 'required',            'file_type' => 'required',            'main' => 'required',            'preview' => 'required',        ]);                if ($validator->fails())        {            return response()->json(['errors'=>$validator->errors()->all()]);        }        $date = date('Y-m-d');        $folder = $date.time();        $files = $request->file('files');        foreach ($files as $file) {            $file_name = $file->getClientOriginalName();            $fileName = pathinfo($file_name, PATHINFO_FILENAME);                     try {                $path = Storage::disk('public')->PutFileAs($folder , $file, $file->getClientOriginalName());            } catch (\Exception $e) {                return false;            }        }        if ($request->hasFile('preview')) {            $file = $request->file('preview');            $file_name = $file->getClientOriginalName();            $imageName = time().'.'.$file->extension();              $preview_path = Storage::disk('public')->PutFileAs($folder, $file, $file->getClientOriginalName());                }        if ($request->hasFile('main')) {            $file = $request->file('main');            $file_name = $file->getClientOriginalName();            $imageName = time().'.'.$file->extension();              $path = Storage::disk('public')->PutFileAs($folder,$file,$file->getClientOriginalName());                }        return response()->json(['success'=> true, 'msg'=>'Record is successfully added', 'url'=> '/home']);        }

然后就可以在存储中看到上传的文件了。 它们被组织为单独的文件夹。 要显示 3D 模型,你需要路径 URL。
在这里插入图片描述

3、加载 3D 模型

在下面的示例中,我向你展示如何从 laravel 存储加载 fbx 模型。 同样,你可以轻松加载其他文件类型。 请理解并尝试首先针对一种文件类型实施它。

 if(myData['file_type'] == 'fbx'){          init1();        }else if(myData['file_type'] == 'obj'){          init2();        }                  function init1() {            scene = new THREE.Scene();            scene.background = new THREE.Color(0xdddddd);            camera = new THREE.PerspectiveCamera(5, window.innerWidth/window.innerHeight, 1, 5000);            camera.position.z = 1000;            light = new THREE.HemisphereLight(0xffffff, 0x444444, 1.0);            light.position.set(0, 1, 0);            scene.add(light);            light = new THREE.DirectionalLight(0xffffff, 1.0);            light.position.set(0, 1, 0);            scene.add(light);            renderer = new THREE.WebGLRenderer({antialias:true});            renderer.setSize(window.innerWidth, window.innerHeight);            container = document.getElementById( 'canvas' );            renderer.setSize(container.offsetWidth, 400);                        container.appendChild( renderer.domElement );            controls = new THREE.OrbitControls(camera,  renderer.domElement);            controls.addEventListener('change', renderer);            const fbxLoader = new THREE.FBXLoader();                let text1 = "storage/";                let result = text1.concat(myData['url']);                console.log(result);                fbxLoader.load('{{ asset('storage/') }}'+'/'+myData['url']+'.fbx', (object) => {                scene.add(object);                animate();            });        }        function animate(){            renderer.render(scene,camera);            requestAnimationFrame(animate);        }

这里的方法根据3D模型文件类型而改变。


原文链接:PHP加载3D模型 — BimAnt

来源地址:https://blog.csdn.net/shebao3333/article/details/129022222

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯