three.js聚光源SpotLight例子

效果:

 说明:这里创建了SphereGeometry 球缓冲几何体,使用的材质是兰伯特网格材质MeshLambertMaterial,并对球缓冲几何体使用了纹理贴图效果,添加了聚光源,全部代码如下:

<template>
  <div>
    <el-container>
      <el-main>
        <div class="box-card-left">
          <div id="threejs" style="border: 1px solid red"></div>
          <div class="box-right">
          </div>
        </div>
      </el-main>
    </el-container>
  </div>
</template>
<script>
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
export default {
  data() {
    return {
      name: "",
      scene: null,
      camera: null,
      renderer: null,
      mesh: null,
      geometry: null,
      group: null,
      material: null,
      texture: null,
    };
  },
  created() {},
  mounted() {
    this.name = this.$route.query.name;
    this.init();
  },
  methods: {
    goBack() {
      this.$router.go(-1);
    },
    init() {
      /**
       * 光源分类:
       * 平行光 DirectionalLight,
       * DirectionalLight( color : Color, intensity : Float )
          color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
          intensity -(可选)光照的强度。默认值为 1。
       * 点光源 PointLight,
        PointLight( color : Color, intensity : Float, distance : Number, decay : Float )
            color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
            intensity -(可选)光照强度。默认值为 1。
            distance - 光源照射的最大距离。默认值为 0(无限远)。
            decay - 沿着光照距离的衰退量。默认值为 2。
       * 环境光 AmbientLight ,
        AmbientLight( color : Color, intensity : Float )
            color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
            intensity -(可选)光照的强度。默认值为 1。
       * 聚光源 SpotLight
          SpotLight( color : Color, intensity : Float, distance : Float, angle : Radians, penumbra : Float, decay : Float )
            color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。
            intensity -(可选)光照强度。默认值为 1。
            distance - 光源照射的最大距离。默认值为 0(无限远)。
            angle - 光线照射范围的角度。默认值为 Math.PI/3。
            penumbra - 聚光锥的半影衰减百分比。默认值为 0。
            decay - 沿着光照距离的衰减量。默认值为 2。
       *  */
      
      // 1,创建场景对象
      this.scene = new this.$three.Scene();
      // 2,创建球缓冲几何体对象
      this.geometry = new this.$three.SphereGeometry(40,32,16);
      
     
      // 5,创建辅助坐标轴对象
      const axesHelper = new this.$three.AxesHelper(100);
      this.scene.add(axesHelper);
      // 创建纹理贴图加载器对象
      const textureLoader = new this.$three.TextureLoader();
      textureLoader.load(require("../../assets/earth.png"), e => {
          // 3,创建网格材质对象
        this.material = new this.$three.MeshLambertMaterial({
          // color: 0xfff000,
          map: e
        });
        // 4,创建网格对象
        this.mesh = new this.$three.Mesh(this.geometry, this.material);
        this.scene.add(this.mesh);
         // 创建聚光源对象
        const spotLight = new this.$three.SpotLight(0xffffff, 1);
        // 设置聚光源位置
        spotLight.position.set(100, 80, 20);
        // 设置聚光源指向的目标位置
        spotLight.target = this.mesh;
        this.scene.add(spotLight);
        // 创建聚光源辅助对象
        const spotLightHelper = new this.$three.SpotLightHelper(spotLight,0xffffff);
        this.scene.add(spotLightHelper);
        // 6,创建透视投影相机对象
        this.camera = new this.$three.PerspectiveCamera(60, 1, 0.01,1000);
        this.camera.position.set(200,150,200);
        // 相机看向的是模型的位置
        this.camera.lookAt(this.mesh.position);
        // 7,创建渲染器对象
        this.renderer = new this.$three.WebGLRenderer();
        this.renderer.setSize(1200,1000);
        this.renderer.render(this.scene, this.camera);
        document.getElementById("threejs").appendChild(this.renderer.domElement);
        this.renderFun();
        // 创建相机空间轨道控制器对象
        const controls = new OrbitControls(this.camera, this.renderer.domElement);
        controls.addEventListener("change", () => {
          this.renderer.render(this.scene, this.camera);
        })
      })
    },
    renderFun() {
      this.mesh.rotateY(0.01);
      this.renderer.render(this.scene, this.camera);
      window.requestAnimationFrame(this.renderFun);
    }
  },
};
</script>
//
<style lang="less" scoped>
.msg {
  padding: 20px;
  text-align: left;
  display: flex;
  justify-content: flex-start;
  flex-wrap: wrap;
  .span {
    margin: 0 30px 30px 0;
    // white-space: nowrap;
  }
  .p {
    text-align: left;
  }
}
.box-card-left {
  display: flex;
  align-items: flex-start;
  flex-direction: row;

  width: 100%;
  .box-right {
    text-align: left;
    padding: 10px;
    .xyz {
      width: 100px;
      margin-left: 20px;
    }
    .box-btn {
      margin-left: 20px;
    }
  }
}
</style>

对于:this.$three 是这样配置的;

// 1,npm安装threejs插件:
npm install three --save

// 2,在main.js文件中加入:
// 引入 three.js
import * as THREE from 'three';
Vue.prototype.$three = THREE;

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

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

相关文章

Redis队列原理解析:让你的应用程序运行更加稳定!

一、消息队列简介 消息队列&#xff08;Message Queue&#xff09;&#xff0c;字面意思就是存放消息的队列。最简单的消息队列模型包括 3 个角色&#xff1a; 消息队列&#xff1a;存储和管理消息&#xff0c;也被称为消息代理&#xff08;Message Broker&#xff09;生产者…

java 执行linux 命令

文章目录 前言一、linux命令执行二、使用步骤三、踩坑 前言 java 执行linux 命令&#xff1b; 本文模拟复制linux文件到指定文件夹后打zip包后返回zip名称&#xff0c;提供给下载接口下载zip&#xff1b; 一、linux命令执行 linux命令执行Process process Runtime.getRunti…

【已解决】java 无法将类 XX类中的构造器 X应用到给定类型

原因&#xff1a; 实际参数列表和形式参数列表长度不同 解决方法&#xff1a; 给类添加AllArgsConstructor注解即可。

什么是跨站脚本攻击(XSS)?如何防止它?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

猫粮哪个牌子质量好性价比高?口碑比较好的主食冻干猫粮牌子推荐

猫咪生骨肉主食冻干猫粮喂养方式是越来越火了&#xff0c;作为一个离职的十年经验宠物护理师&#xff0c;对宠物健康营养方面的知识一直在研究&#xff0c;不光是为了我自己养的猫咪身体健康&#xff0c;也要为客户的猫咪健康负责&#xff01;现在很多养猫人士对主食冻干猫粮喂…

RocketMQ 服务搭建

目录 概述RocketMQ 单机服务搭建搭建架构相关地址前置操作NameServer 启动配置启动解决 java 版本的问题 Broker 启动测试关闭 结束 概述 学习此文&#xff0c;可以快速的搭建一个单机的 RocketMQ 服务。 RocketMQ 单机服务搭建 搭建架构 相关地址 RocketMQ官网地址二进制下…

什么台灯好用不伤眼睛?适合考公使用的台灯推荐

随着时代的发展与进步&#xff0c;不管是办公族还是学生党的压力也越来越大的&#xff0c;不少人在晚上回去之后仍然需要学习、工作&#xff0c;这样的一件试几乎成为了“家常便饭”&#xff0c;而这个过程中必不可少就是台灯。有些人为了保护眼睛会选择护眼台灯&#xff0c;但…

关于AISD300系列三相智能安全配电装置的详细介绍-安科瑞 蒋静

1概述 AISD300系列三相智能安全配电装置是安科瑞专为低压配电侧开发的一款智能安全配电产品&#xff0c;本产品主要针对低压配电系统人身触电、线路老化、短路、漏电等原因引起电气安全问题而设计。 产品主要应用于学校、加油站、医院、银行、疗养院、康复中心、敬老院、酒店…

大洋钻探系列之四“决心号”钻探船

乔迪斯决心号&#xff08;英文&#xff1a;JOIDES Resolution&#xff09;大洋钻探船是大洋钻探所使用的一艘钻探船&#xff0c;是美国Sedco公司和英国石油公司所属的一艘商用石油勘探船“Sedco/BP 471号”改装而来的。“乔迪斯”音译自地球深部取样海洋研究机构联合体&#xf…

Zebec 推出由 Visa、万事达网络支持的即时支付卡

“Zebec 现已推出全新的加密支付卡&#xff0c;该卡由 Visa、万事达网络支持&#xff0c;具备即时、多链、非托管、无需 KYC、免费等特性&#xff0c;其能够通过加密钱包与多条主流公链链接并直接调用支付&#xff0c;这将是加密支付领域的里程碑事件。” 在 2023 年的 12 月 8…

易安联威胁检测平台极简SaaS化部署,分钟实现安全接入

EnDTA 天织DNS威胁分析平台 它来了&#xff0c;它来了 永久免费版与企业版 正式开放 2023年6月&#xff0c;易安联全新威胁检测产品EnDTA天织DNS威胁分析平台面向全网正式开放公测&#xff0c;获得了超过50的测评反馈。经过数月的优化&#xff0c;EnDTA焕新升级归来&#xff…

计算机网络:数据链路层(网桥)

带你速通计算机网络期末 目录 一、冲突域和广播域 二、网桥介绍 三、网桥分类—―透明网桥 四、网桥分类―—源路由网桥 五、多接口网桥―—以太网交换机 总结 一、冲突域和广播域 冲突域:在同一个冲突域中的每一个节点都能收到所有被发送的帧。简单的说就是同一时间内只…

Python 模块的使用

本篇主要为python 模板介绍和使用&#xff0c;包含如何创建和使用自定义模块&#xff0c;引入模块的方式及包内容介绍。 概述 在项目开发中随着代码量越来越多&#xff0c;代码就会越来越难以维护。为了解决难以维护的问题&#xff0c;我们把很多相似功能的函数分组&#xff0…

bugku--Simple_SSTI_1---2

第一题 看到一句话&#xff0c;需要传入一个传参为flag 设置一个变量为 secret_key 构造paykoad /?flagsecret_key 但是发现什么都没有 SSTI模版注入嘛 这里使用的是flask模版 Flask提供了一个名为config的全局对象&#xff0c;可以用来设置和获取全局变量。 继续构造pa…

Angular+Nginx区域HIS医院信息管理系统源码

医院管理信息系统&#xff08;HIS&#xff09;是医院基本、重要的管理系统&#xff0c;是医院大数据的基础。“云”指系统采用云计算的技术和建设模式&#xff0c;具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生&#xff0c;由原来医院 (…

1846_安全SPI

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/g_embedded: some embedded basic knowledge. 1846_安全SPI SPI是一种常见的通信方式&#xff0c;在汽车电子中比较常用。但是如果涉及到安全相关的设计&#xff0c;可能得考虑更多。而SPI协议本身没有很好的标准化&am…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑场间功率时移的海上风电场群联合储能优化调度方法》

这个标题涉及到海上风电场群&#xff08;Offshore Wind Farm Cluster&#xff09;的联合储能优化调度方法&#xff0c;并强调了对场间功率时移的考虑。以下是对标题各部分的解读&#xff1a; 海上风电场群&#xff1a; 指的是多个相邻或连接的海上风电场的集合体。通常&#xf…

销售技巧培训之如何提升网络销售技巧

销售技巧培训之如何提升网络销售技巧 随着互联网的普及&#xff0c;网络销售已经成为了一种重要的销售方式。对于许多企业来说&#xff0c;网络销售已经成为了一种重要的销售渠道。但是&#xff0c;要想在网络销售中取得成功&#xff0c;就需要掌握一些网络销售技巧。本文将介…

微信小程序ios中非cover组件点击重复触发地图tap事件

现象&#xff1a; map中使用view组件的click事件会重复触发地图的tap组件&#xff0c;只在ios上出现 <map id"maps" style"width: 100vw;height: 100vh;" :latitude"latitude" :longitude"longitude":markers"markers"…

关于put_response和get_response的总结

Response总结&#xff0c;共三种情况 &#xff08;1&#xff09;每一笔都等response -> 直接get_response 注意put_response的前提是当前的seq的body没有直接结束&#xff0c;这个body一定是最底层发req的那个seq的body &#xff08;2&#xff09;连续发送数据&#xff0…