【前端知识】Three 学习日志(三)—— 光源对物体表面的影响

2023-09-18 16:08:40

Three 学习日志(三)—— 光源对物体表面的影响

一、设置材质为受光照影响
//MeshLambertMaterial受光照影响
const material = new THREE.MeshLambertMaterial();

在这里插入图片描述
此时,场景中一片漆黑,无法看到原来的物体,需要设置光源来照亮物体。

二、设置点光源
//点光源:两个参数分别表示光源颜色和光照强度
// 参数1:0xffffff是纯白光,表示光源颜色
// 参数2:1.0,表示光照强度,可以根据需要调整
const pointLight = new THREE.PointLight(0xffffff, 1.0);
//点光源位置
pointLight.position.set(200, 200, 200); //物体坐标为(100,100,100),设置光源在(200,200,200)从斜上方照射向物体
scene.add(pointLight); //点光源添加到场景中

在这里插入图片描述

三、完整代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Learn Three</title>
    <!-- 引入three,下载地址参考:http://www.webgl3d.cn/pages/aac9ab/#%E7%89%B9%E5%AE%9A%E7%89%88%E6%9C%ACthree-js%E6%96%87%E4%BB%B6%E5%8C%85%E4%B8%8B%E8%BD%BD -->
    <script src="../build/three.js"></script>
</head>

<body>
    <script>
        // 任意调用API,为了检测three.js是否引入成功
        console.log(THREE.Scene);
        // 创建3D场景对象Scene
        const scene = new THREE.Scene();
        // 创建一个长方体几何对象Geometry
        const geometry = new THREE.BoxGeometry(100, 100, 100);
        // 创建一个材质对象Material(MeshBasicMaterial 为网格基础材质)
        // const material = new THREE.MeshBasicMaterial({
        //     color: 0xff0000,//0xff0000设置材质颜色为红色
        // });

        // MeshLambertMaterial受光照影响
        const material = new THREE.MeshLambertMaterial();
        // 点光源:两个参数分别表示光源颜色和光照强度
        // 参数1:0xffffff是纯白光,表示光源颜色
        // 参数2:1.0,表示光照强度,可以根据需要调整
        const pointLight = new THREE.PointLight(0xffffff, 1.0);
        //点光源位置
        pointLight.position.set(200, 200, 200);
        scene.add(pointLight); //点光源添加到场景中

        // 创建物体:网格模型(Mesh为网格模型)
        // 两个参数分别为上面创建的几何体geometry、材质material
        const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
        // 设置网格模型在三维空间中的位置坐标,默认是坐标原点
        mesh.position.set(0, 10, 0);
        // 构建好物体后,将物体添加到场景中
        scene.add(mesh);
        // 至此,我们的物体已经添加到场景中,但我们并不能立即看到构建的物体,还需要通过虚拟相机进行渲染
        // 实例化一个透视投影相机对象
        const camera = new THREE.PerspectiveCamera();
        // 30:视场角度, width / height:Canvas画布宽高比, 1:近裁截面, 3000:远裁截面
        // const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
        // 根据需要设置相机位置具体值
        camera.position.set(200, 200, 200);
        //相机观察目标指向Threejs 3D空间中某个位置
        camera.lookAt(0, 0, 0); //坐标原点
        // camera.lookAt(mesh.position);//指向mesh对应的位置
        // 定义相机输出画布的尺寸(单位:像素px)
        const width = 800; //宽度
        const height = 500; //高度
        // 创建渲染器对象
        const renderer = new THREE.WebGLRenderer();
        // 设置渲染器宽高
        renderer.setSize(width, height);
        // 通过渲染器,将场景和相机进行结合、渲染,得到一个Canvas元素
        renderer.render(scene, camera); //执行渲染操作
        // 将渲染结果加入页面中
        document.body.appendChild(renderer.domElement);

    </script>
</body>

</html>
更多推荐

ChatGPT在职业规划中的智能助手

随着科技的不断发展,人工智能(AI)正逐渐成为我们日常生活的一部分。ChatGPT作为一种智能语言模型,可以在职业规划中充当智能助手的角色。本文将探讨ChatGPT在职业规划中的应用,以及它如何成为未来工作的智能伙伴。首先,ChatGPT可以提供职业发展的智能建议。通过与ChatGPT的交互,我们可以咨询关于职业发展的

企业进行品牌推广时怎么才能达到预期广告效应?不如试试软文营销

企业进行品牌推广的目的就在于提升品牌的曝光率,树立该品牌在市场中的形象,加强品牌的影响力与公信力,提高产品的竞争力,那么企业进行品牌推广时怎么才能达到预期效果呢,我们可以试试软文营销,接下来媒介盒子就告诉大家,企业如何利用软文营销来达到预期广告效应。一、&nbsp;分析市场背景软文营销作为一种营销方式,需要我们在前期分

conda的安装和使用

参考资料:https://www.bilibili.com/read/cv8956636/?spm_id_from=333.999.0.0https://www.bilibili.com/video/BV1Mv411x775/?spm_id_from=333.999.0.0&vd_source=98d31d5c9db8

计算机视觉与深度学习-经典网络解析-AlexNet&ZFNet&VGG&GoogLeNet&ResNet[北邮鲁鹏]

目录标题参考文章LeNet5AlexNet参考文章AlexNet模型结构AlexNet共8层:AlexNet运作流程简单代码实现重要说明重要技巧主要贡献ZFNet主要改进减小第一层卷积核将第二、第三个卷积层的卷积步长都设置为2增加了第三、第四个卷积层的卷积核个数VGG参考VGG网络贡献使用尺寸更小的3×33\times

Vue前端框架11 组件事件与v-mode配合使用、组件数据传递(父传子)、插槽Slot、具名插槽、插槽中的数据传递(双向)

文章目录一、组件事件与v-model配合使用二、组件数据传递(子传父)三、插槽Slots四、具名插槽五、插槽中的数据传递一、组件事件与v-model配合使用组件A的数据变化组件B可以实时显示<template><h3>Main</h3><p>搜索内容为:{{search}}</p><component-b@search

c++文件服务器相关知识点记录-1

1.半同步/半异步模式半同步/半异步模式是一种多线程编程模式,其中一部分线程采用同步方式进行操作,另一部分线程采用异步方式进行操作。在半同步/半异步模式中,通常会有一个主线程和多个工作线程。主线程负责接收和分发任务,它会等待工作线程的完成,并且需要等待所有工作线程完成后才能终止。工作线程负责执行具体的任务,它们可以并行

TikTok的媒体革命:新闻业如何适应短视频时代?

在数字时代,媒体行业一直在不断演变和创新,以适应观众的变化需求和技术的发展。而在这个进化的过程中,短视频应用TikTok已经崭露头角,成为了一个重要的信息传播平台。这篇文章将深入探讨TikTok如何引领了媒体的一场革命,以及新闻业如何适应这个充满挑战和机会的短视频时代。TikTok:媒体的新宠TikTok的成功不仅体现

【xilinx】Versal启动文件简述 pdi bif

Versal启动文件简述FPGA开发圈2022-12-2216:09400浏览0评论0点赞作者:MacMahonStephen,AMD赛灵思开发者Versal™是由多个高度耦合的可配置块组成的自适应计算加速平台(ACAP)。这些块包括NoC、AIE、PL和CIPS(CIPS本身包含不同的域:LPD和FPD)等,启动这些

串口通信遇到的一个问题。

crash信息:W/System.err:java.io.IOException:writefailed:EAGAIN(Tryagain)W/System.err:atlibcore.io.IoBridge.write(IoBridge.java:531)W/System.err:atjava.io.FileOutpu

DSU ON TREE

DSUONTREEDSU:并查集DSUONTREE:树上启发式合并我也不知道为啥树上并查集就是树上启发式合并启发式合并的思想是每次把小的往大的合并,也就是最大化利用已有的答案(大的数组不用清空,在原基础上加上小的即可)。转移到树上,“大”显然就是树的重心。能解决什么样的问题?需要统计子树信息,但是子树的信息不好合并。比

为什么要用vite,用vite的原因是什么

为什么选Vite|Vite官方中文文档(vitejs.dev)在很久以前,javascript是没有模块化的,就是一个整体,所以为了将文件分成很小的模块文件,才出现“打包”这个概念之前的拆分工具像webpack,rollup等,因为项目越来越大,需要很长时间才能启动开发服务器,热替换的作用也不太明显,需要很长时间才会显

热文推荐