html three.js 引入.stl模型示例

1.新建一个模块用于放置模型

 <div id="chart_map" style="width:800px;height:500px"></div>

2. 引入代码根据需求更改

<!-- 在head或body标签内加入以下链接 -->
<script src="https://cdn.jsdelivr.net/npm/three@0.137/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.137/examples/js/controls/OrbitControls.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.137/examples/js/loaders/STLLoader.js"></script>
<script>
    /**
     * 创建场景对象Scene
     */
    var scene = new THREE.Scene();

    var loader = new THREE.STLLoader();

    loader.load("./stl/files/coolingTower.stl", function (geometry) {
        // var material = new THREE.MeshLambertMaterial({
        //     color: 0x0000ff,
        // }); //材质对象Material
        // var mesh = new THREE.Mesh(geometry, material);
        // scene.add(mesh);
        // 修改为MeshStandardMaterial,并设置金属ness和粗糙度
        var material = new THREE.MeshStandardMaterial({
            color: 0x808080, // 基础颜色,可以调整为其他灰色或金属色调
            metalness: 1, // 设置为1表示完全金属质感
            roughness: 0.2, // 金属表面的粗糙度,0为非常光滑,1为非常粗糙,根据需要调整
        });
        var mesh = new THREE.Mesh(geometry, material);
        // 添加这行代码来旋转模型,使其顶部朝向Z轴正方向
        mesh.rotation.x = -Math.PI / 2;
        mesh.position.y = -50;
        // mesh.rotation.y = Math.PI / 1; // π/2 弧度等于 90 度
        // mesh.rotation.x = Math.PI / 2; // π/2 弧度等于 90 度
        // mesh.rotation.z = Math.PI / 1; // π/2 弧度等于 90 度
        scene.add(mesh);
    });


    /**
     * 光源设置
     */


    // 添加半球光,为场景提供自然的天光和地面反射光效果,进一步消除阴影区域
    const hemisphereLight = new THREE.HemisphereLight(0xddeeff, 0x0f0e0d, 1); // 上半部颜色、下半部颜色、强度
    scene.add(hemisphereLight);

    // 调整点光源的强度以增加光照
    const pointLightIntensity = 200;

    // 添加四个角的点光源,确保模型的每个角落都有光照
    const cornerPointLight1 = new THREE.PointLight(0xffffff, pointLightIntensity, 200);
    cornerPointLight1.position.set(-100, 100, -100);
    scene.add(cornerPointLight1);

    const cornerPointLight2 = new THREE.PointLight(0xffffff, pointLightIntensity, 200);
    cornerPointLight2.position.set(100, 100, -100);
    scene.add(cornerPointLight2);

    const cornerPointLight3 = new THREE.PointLight(0xffffff, pointLightIntensity, 200);
    cornerPointLight3.position.set(-100, 100, 100);
    scene.add(cornerPointLight3);

    const cornerPointLight4 = new THREE.PointLight(0xffffff, pointLightIntensity, 200);
    cornerPointLight4.position.set(100, 100, 100);
    scene.add(cornerPointLight4);



    // 辅助坐标系  参数250表示坐标系大小,可以根据场景大小去设置
    var axisHelper = new THREE.AxesHelper(250);
    scene.add(axisHelper);
    // console.log(scene)
    // console.log(scene.children)
    /**
     * 相机设置
     */
    const width = document.querySelector("#chart_map").offsetWidth
    const height = document.querySelector("#chart_map").offsetHeight;
    var k = width / height; //窗口宽高比
    var s = 100; //三维场景显示范围控制系数,系数越大,显示的范围越大
    //创建相机对象
    var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
    camera.position.set(200, 100, 300); //设置相机位置
    camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
    /**
     * 创建渲染器对象
     */
    var renderer = new THREE.WebGLRenderer();
    renderer = new THREE.WebGLRenderer({ alpha: true }); // 启用透明 
    // renderer.setClearColor(0x00000000, 0); // 透明背景
    renderer.setSize(width, height); //设置渲染区域尺寸
    // renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
    // document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
    document.querySelector("#chart_map").appendChild(renderer.domElement);
    // document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
    renderer.shadowMap.enabled = true;
    //执行渲染操作   指定场景、相机作为参数
    // renderer.render(scene, camera);
    function render() {
        // requestAnimationFrame(render);
        // controls.update(); // 必须在render调用中更新controls
        // renderer.render(scene, camera);
        renderer.render(scene, camera); //执行渲染操作
        // mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度
        requestAnimationFrame(render); //请求再次执行渲染函数render
    }
    render();
    // var controls = new THREE.OrbitControls(camera, renderer.domElement); //创建控件对象
    var controls = new THREE.OrbitControls(camera, renderer.domElement, {
        enableDamping: true, // 是否开启阻尼效果
        dampingFactor: 0.25, // 阻尼(慢镜头)因子
        screenSpacePanning: false, // 是否开启屏幕空间平移
        rotateSpeed: 0.5, // 旋转速度
        zoomSpeed: 0.5, // 缩放速度
        minDistance: 100, // 最小距离
        maxDistance: 500, // 最大距离
        maxPolarAngle: Math.PI / 2 // 限制仰角
    });
</script>

 3.提供一个模型用于学习参考coolingTower.stl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/670822.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++的string一键介绍

前言&#xff1a; 这篇文章旨在帮助读者回忆如何使用string&#xff0c;并提醒注意事项。它不是一篇详细的功能介绍&#xff0c;而是一篇润色文章。 先展示重载函数&#xff0c;如果该函数一笔不可带过&#xff0c;就先展示英文原档&#xff08;附带翻译&#xff09;&#xf…

基于语音信号MFCC特征提取和GRNN神经网络的人员身份检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MFCC特征提取 4.2 GRNN神经网络概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...............................................…

Django序列化器中is_valid和validate

今天上班的时候分配了一个任务&#xff0c;是修复前端的一个提示优化&#xff0c;如下图所示&#xff1a; 按照以往的经验我以为可以直接在validate上进行校验&#xff0c;如何抛出一个异常即可 &#xff0c;例如&#xff1a; class CcmSerializer(serializers.ModelSerialize…

HALCON-从入门到入门-软件界面介绍

1.废话 从halcon12到halcon23&#xff0c;开发的IDE界面大差不差&#xff0c;简单说下界面上不同功能按键的分布&#xff0c;以及一些快捷键啥的&#xff0c;要是还有我没有总结到的&#xff0c;又比较好用的&#xff0c;欢迎大家补充一下。 1.菜单栏 从上看到下&#xff0c;…

大型医疗器械企业四套系统数据集成技术干货分享

在大型医疗企业中&#xff0c;数据的互联互通是提升运营效率和数据利用率的关键。本次分享将概述如何通过轻易云集成平台将金蝶ERP、ZOHO CRM、泛微OA和汇联易报销系统进行高效联动&#xff0c;展示在实施过程中积累的技术干货。 某大型医疗企业&#xff0c;专注于麻醉和呼吸医…

系统架构设计师 - 操作系统(1)

操作系统 操作系统&#xff08;5-6分&#xff09;操作系统概述进程管理进程和线程的基本概念进程的状态 ★前趋图 ★★★★信号量与 PV 操作 ★★★★死锁及银行家算法 ★ 大家好呀&#xff01;我是小笙&#xff0c;本章我主要分享系统架构设计师 - 操作系统(1)知识&#xff0c…

B站如何屏蔽短视频:成都鼎茂宏升文化传媒公司

B站如何屏蔽短视频&#xff1a;优化你的观看体验 在当今数字化时代&#xff0c;B站&#xff08;哔哩哔哩&#xff09;作为国内领先的弹幕视频网站&#xff0c;以其丰富的视频资源和独特的弹幕文化吸引了大量用户。然而&#xff0c;随着短视频的兴起&#xff0c;B站也引入了短视…

智能学工系统实现学生管理

人才培养是高校的榜首要务&#xff0c;高校在抓好学生教育作业的一起&#xff0c;更多的是要加强对学生的办理作业。作为在校大学生健康成长的指导者和引路人&#xff0c;面临很多的学生办理作业内容杂乱&#xff0c;事无巨细&#xff0c;但在传统的办理方式下&#xff0c;尽管…

在 LLM 架构中应用多专家模型

本文转载自&#xff1a;在 LLM 架构中应用多专家模型 2024年 3月 14日 By Kyle Kranen and Vinh Nguyen https://developer.nvidia.cn/zh-cn/blog/applying-mixture-of-experts-in-llm-architectures/ 文章目录 一、概述二、LLM 架构领域的专家齐聚一堂1、模型容量2、MoE 在降低…

计算机系统结构之Cache

一、全相联映像和变换 全相联映像的主存-Cache地址变换过程如图&#xff1a; 给出主存地址Nm访存时&#xff0c;将其主存块号Nmb与目录表(硬件)中所有各项的Mmb字段同时相联比较。若有相同的&#xff0c;就将对应行的Cache块号Ncb取出&#xff0c;拼接上块内地址Nmr形成Cache地…

JAVA基础|多线程

什么是线程&#xff1f; 线程&#xff08;Thread&#xff09;是一个程序内部的一条执行流程。 多线程是什么&#xff1f; 多线程是指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行&#xff09; 一. 如何在程序中创建出多条线程&#xff1f; Ja…

社交媒体数据恢复:Voxer

一、Voxer数据恢复教程 了解Voxer应用 Voxer是一款专门为iPhone和Android智能手机设计的免费对讲机应用&#xff0c;为用户提供即时的语音、文本、照片等信息发送和接收服务。该应用有点类似短信服务&#xff0c;但用声音代替文本。当你下载之后&#xff0c;如果不邀请朋友&a…

XTuner 微调个人小助手认知实战

XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。GitHub - InternLM/xtuner: An efficient, flexible and full-featured toolkit for fine-tuning LLM (InternLM2, Llama3, Phi3, Qwen, Mistral, ...)An efficient, flexible and full-featured toolkit for fine-tun…

vue中使用svg图像

一 、svg图像是什么 SVG&#xff08;可缩放矢量图形&#xff09;是一种图像格式&#xff0c;它以XML文档的形式存在&#xff0c;用以描述图像中的形状、线条、文本和颜色等元素。由于其基于矢量的特性&#xff0c;SVG图像在放大或改变尺寸时能够保持图形质量不受影响。这种格式…

【深入学习Redis丨第二篇】Redis集群部署详解

文章目录 Redis集群部署Redis4 Cluster部署 Redis集群部署 1 Redis各节点部署 使用源码安装各节点&#xff0c;不过与非cluster方式不同的是&#xff0c;配置文件中需启动cluster相关的配置。 因本次为伪分布式部署&#xff0c;生产环境部署时建议至少3台机器部署&#xff0…

解决JSON.stringify 方法在序列化 BigInt 类型时的错误

今天学nest时&#xff0c;使用apifox发送请求获取数据&#xff0c;结果还一直报错&#xff0c;而且还是我从未见过的 Do not know how to serialize a BigInt at JSON.stringify (<anonymous>) at stringify&#xff0c; 我都是跟着人家敲的&#xff0c;我就纳闷了&…

Java——异常详解

异常五个主要关键字&#xff1a;throw、try、catch、finally、throws 1. 异常的概念与体系结构 1.1 异常的概念 在Java中&#xff0c;程序执行过程中发生的不正常行为被称为异常&#xff0c;如&#xff1a; 1. 算数异常 public static void main(String[] args) {System.ou…

数据结构队列(深入链表的应用)

目录 队列的概念及结构 队列的实现 结构的选择 从Pop来看&#xff1a; 队列的结构 &#xff1a; 分析&#xff1a; 头文件(queue.h) 实现队列功能&#xff1a; 队列的初始化(与链表类似) 队列的摧毁 队列的插入(链表尾插) 队头的删除 取队头队尾的数据(简单中藏陷阱…

Vue3中的常见组件通信之props和自定义事件

Vue3中的常见组件通信 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认…

【TB作品】MSP430F5529,单片机,打地鼠游戏

功能 针对这块开发板做了一个打地鼠游戏&#xff1a; 1 给单片机上电后&#xff0c;初始化显示界面&#xff0c;显示出分数和等级。 2 游戏是一轮一轮进行的&#xff0c;每一轮会以50%几率点亮板子上的五个小灯&#xff0c;表示地鼠露头需要打了。 3 一轮游戏开始后&#xff…