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

58. Three.js案例-创建一个带有红蓝配置的半球光源的场景

58. Three.js案例-创建一个带有红蓝配置的半球光源的场景

实现效果

本案例展示了如何使用Three.js创建一个带有红蓝配置的半球光源的场景,并在其中添加一个旋转的球体。通过设置不同的光照参数,可以观察到球体表面材质的变化。

效果

知识点

WebGLRenderer (WebGL渲染器)

WebGLRenderer是Three.js中最常用的渲染器之一,用于将3D场景渲染到网页上。

构造器

WebGLRenderer(parameters : Object)

参数类型描述
antialiasBoolean是否开启抗锯齿,默认为false

Scene (场景)

Scene是所有可见对象的容器,它定义了场景中的物体、灯光等元素。

方法
  • add(object : Object3D):向场景中添加对象。
  • background:设置场景的背景颜色或纹理。

PerspectiveCamera (透视相机)

PerspectiveCamera模拟人眼的视角,提供更真实的视觉效果。

构造器

PerspectiveCamera(fov : Float, aspect : Float, near : Float, far : Float)

参数类型描述
fovFloat视野角度
aspectFloat宽高比
nearFloat近裁剪面距离
farFloat远裁剪面距离
方法
  • position.set(x : Float, y : Float, z : Float):设置相机的位置。
  • lookAt(vector : Vector3):设置相机朝向。

HemisphereLight (半球光源)

HemisphereLight模拟天空和地面之间的自然光,通常用于环境照明。

构造器

HemisphereLight(skyColor : Color, groundColor : Color, intensity : Float)

参数类型描述
skyColorColor天空颜色
groundColorColor地面颜色
intensityFloat光源强度
属性
  • position:光源位置。

HemisphereLightHelper (半球光源辅助线)

HemisphereLightHelper用于可视化半球光源的影响范围。

构造器

HemisphereLightHelper(light : HemisphereLight, size : Float, color : Color)

参数类型描述
lightHemisphereLight半球光源实例
sizeFloat辅助线大小
colorColor辅助线颜色

SphereGeometry (球体几何体)

SphereGeometry用于创建球体模型。

构造器

SphereGeometry(radius : Float, widthSegments : Integer, heightSegments : Integer)

参数类型描述
radiusFloat球体半径
widthSegmentsInteger经度分段数
heightSegmentsInteger纬度分段数

MeshPhongMaterial (网格Phong材质)

MeshPhongMaterial基于Phong光照模型,适用于光滑表面的材质。

构造器

MeshPhongMaterial(parameters : Object)

参数类型描述
mapTexture环境贴图

Mesh (网格)

Mesh将几何体和材质组合在一起,形成可渲染的对象。

构造器

Mesh(geometry : Geometry, material : Material)

参数类型描述
geometryGeometry几何体
materialMaterial材质
方法
  • position.set(x : Float, y : Float, z : Float):设置网格位置。
  • rotation.x/y/z += value:绕轴旋转。

代码

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><script src="ThreeJS/three.js"></script><script src="ThreeJS/jquery.js"></script>
</head>
<body>
<div id="myContainer"></div>
<script>// 创建渲染器,并开启抗锯齿处理const myRenderer = new THREE.WebGLRenderer({antialias: true});// 设置渲染器的大小为窗口的宽度和高度myRenderer.setSize(window.innerWidth, window.innerHeight);// 将渲染器的DOM元素添加到ID为"myContainer"的HTML元素中$("#myContainer").append(myRenderer.domElement);// 创建一个新的Three.js场景const myScene = new THREE.Scene();// 设置场景的背景颜色为白色myScene.background = new THREE.Color('white');// 创建一个透视相机,设置其视野角度、长宽比、近裁剪面和远裁剪面const myCamera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);// 设置相机的位置myCamera.position.set(-131.98, 189.53, 119.55);// 设置相机朝向myCamera.lookAt(new THREE.Vector3(0, 0, 0));// 创建并添加红蓝配置的半球光源const myHemisphereLight = new THREE.HemisphereLight('red', 'blue', 1);myHemisphereLight.position.set(0, -100, -100);myScene.add(myHemisphereLight);// 绘制半球光源辅助线const myHemisphereLightHelper = new THREE.HemisphereLightHelper(myHemisphereLight, 100, 'red');myScene.add(myHemisphereLightHelper);// 创建球体const myGeometry = new THREE.SphereGeometry(60, 40, 40);const myMap = THREE.ImageUtils.loadTexture("images/img007.jpg");const myMaterial = new THREE.MeshPhongMaterial({map: myMap});const myMesh = new THREE.Mesh(myGeometry, myMaterial);myMesh.position.set(0, 90, 100);myScene.add(myMesh);// 渲染图形animate();function animate() {requestAnimationFrame(animate);myMesh.rotation.x += 0.01;myMesh.rotation.y += 0.01;myMesh.rotation.z += 0.01;myRenderer.render(myScene, myCamera);}
</script>
</body>
</html>

演示链接

示例链接

http://www.lryc.cn/news/518557.html

相关文章:

  • 【Git原理和使用】Git 分支管理(创建、切换、合并、删除、bug分支)
  • 义乌购的反爬虫机制怎么应对?
  • 消息中间件面试
  • 基于CLIP和DINOv2实现图像相似性方面的比较
  • 利用Python爬虫获取API接口:探索数据的力量
  • 【LeetCode】力扣刷题热题100道(1-5题)附源码 链表 子串 中位数 回文子串(C++)
  • Docker启动失败 - 解决方案
  • 【Duilib】 List控件支持多选和获取选择的多条数据
  • android系统的一键编译与非一键编译 拆包 刷机方法
  • SQL语言的函数实现
  • OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)
  • 运动相机拍摄的视频打不开怎么办
  • SpringBoot | 使用Apache POI库读取Excel文件介绍
  • 从configure.ac到构建环境:解析Mellanox OFED内核模块构建脚本
  • c#使用SevenZipSharp实现压缩文件和目录
  • 【从0带做】基于Springboot3+Vue3的高校食堂点餐系统
  • 2025年01月09日Github流行趋势
  • PostgreSQL学习笔记(二):PostgreSQL基本操作
  • 关于内网外网,ABC类地址,子网掩码划分
  • nginx 配置 本地启动
  • UE5 打包要点
  • OneFlow的简单介绍
  • 聊一聊 C#异步 任务延续的三种底层玩法
  • (k8s)Flannel Error问题解决!
  • Delaunay三角刨分算法理解及c#过程实现
  • Backend - ADO.NET(C# 操作Oracle、PostgreSQL DB)
  • Idea-离线安装SonarLint插件地址
  • Leetcode Hot100 第三题 234. 回文链表
  • Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!
  • SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示