当前位置: 首页 > news >正文

python+flask实现360全景图和stl等多种格式模型浏览

1. 安装依赖

pip install flask

2. 创建Flask应用

创建一个基本的Flask应用,并设置路由来处理不同的文件类型。

from flask import Flask, render_template, send_from_directory

app = Flask(__name__)

# 设置静态文件路径

app.static_folder = 'static'

@app.route('/')

def index():

    return render_template('index.html')

@app.route('/view/360')

def view_360():

    return render_template('360_viewer.html')

@app.route('/view/stl')

def view_stl():

    return render_template('stl_viewer.html')

@app.route('/static/<path:filename>')

def static_files(filename):

    return send_from_directory(app.static_folder, filename)

if __name__ == '__main__':

    app.run(debug=True)

3. 创建HTML模板

在`templates`文件夹中创建HTML模板文件。

index.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>模型浏览</title>

</head>

<body>

    <h1>选择浏览模式</h1>

    <ul>

        <li><a href="/view/360">360全景图</a></li>

        <li><a href="/view/stl">STL模型</a></li>

    </ul>

</body>

</html>

 

360_viewer.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>360全景图浏览</title>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/panolens.js/0.11.0/panolens.min.js"></script>

</head>

<body>

    <div id="panorama" style="width: 100%; height: 100vh;"></div>

    <script>

        const panorama = new PANOLENS.ImagePanorama('/static/360_image.jpg');

        const viewer = new PANOLENS.Viewer({ container: document.getElementById('panorama') });

        viewer.add(panorama);

    </script>

</body>

</html>

 

stl_viewer.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>STL模型浏览</title>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/STLLoader/2.0.0/STLLoader.js"></script>

</head>

<body>

    <div id="model" style="width: 100%; height: 100vh;"></div>

    <script>

        const scene = new THREE.Scene();

        const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

        const renderer = new THREE.WebGLRenderer();

        renderer.setSize(window.innerWidth, window.innerHeight);

 document.getElementById('model').appendChild(renderer.domElement);

        const loader = new THREE.STLLoader();

        loader.load('/static/model.stl', function (geometry) {

            const material = new THREE.MeshPhongMaterial({ color: 0x00ff00, specular: 0x111111, shininess: 200 });

            const mesh = new THREE.Mesh(geometry, material);

            scene.add(mesh);

            const ambientLight = new THREE.AmbientLight(0x404040);

            scene.add(ambientLight);

            const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);

            directionalLight.position.set(1, 1, 1);

            scene.add(directionalLight);

            camera.position.z = 100;

            const animate = function () {

                requestAnimationFrame(animate);

                mesh.rotation.x += 0.01;

                mesh.rotation.y += 0.01;

                renderer.render(scene, camera);

            };

            animate();

        });

    </script>

</body>

</html>

4. 放置静态文件

在static文件夹中放置你的360全景图和STL模型文件。例如:

- static/360_image.jpg:360全景图

- static/model.stl:STL模型文件

5. 运行应用

在终端中运行你的Flask应用:

python app.py

6. 访问应用

打开浏览器,访问http://127.0.0.1:5000/,你将看到选择浏览模式的页面。点击链接即可查看360全景图或STL模型。

总结

通过以上步骤,你可以使用Flask实现一个简单的Web应用,用于浏览360全景图和STL模型。你可以根据需要进一步扩展和美化这个应用。

相关文章:

  • taro-vue2 如何使用国密加解密
  • stm32第六天继电器
  • CentOS配置永久静态IP
  • 3D点云目标检测——KITTI数据集读取与处理
  • 电脑管家如何清理内存及垃圾,提升电脑性能
  • 蓝桥杯数字接龙dfs
  • 【Linux】Linux系统上大文件的分割与合并
  • Linux中find 命令的高级用法 组合条件 与、或、非(-a、-o、!) 以及通过 -regex 和 -iregex 选项使用正则表达式
  • Android Vulkan 官宣转正并统一渲染堆栈 ,这对 Flutter 又有什么影响?
  • 【Python】11、函数-01
  • OpenCV图像处理:分割、合并、打码、组合与边界填充
  • VS Code + Git 分支操作指南(附流程图)
  • 基于Redis实现共享token登录
  • pytorch小记(十四):pytorch中 nn.Embedding 详解
  • 机器学习之梯度消失和梯度爆炸
  • 1.5.2 掌握Scala内建控制结构 - 块表达式
  • 【css酷炫效果】纯CSS实现虫洞穿越效果
  • Rust + WebAssembly 实现康威生命游戏
  • java 之枚举问题(超详细!!!!)
  • MySQL(索引)
  • 神十九都带回了哪些实验样品?果蝇等生命类样品已交付科学家
  • 新华时评:防范安全事故须臾不可放松
  • 马上评|科学谋划“十五五”,坚定不移办好自己的事
  • 揭秘神舟十九号返回舱“软着陆”关键:4台发动机10毫秒内同时点火
  • 浪尖计划再出发:万亿之城2030课题组赴九城调研万亿产业
  • “面具女孩”多次恐吓电梯内两幼童,当事女孩及家长道歉后获谅解