Three 之 three.js (webgl)基础 第一个入门 Web 3D 场景

Three 之 three.js (webgl)基础 第一个入门 Web 3D 场景

目录

Three 之 three.js (webgl)基础 第一个入门 Web 3D 场景

一、简单介绍

二、Three 中构建场景主要的三要素

三、场景(Scene)

四、摄像机(Camera)

五、WebGLRenderer

六、第一个入门 Web 3D 场景


一、简单介绍

Three js 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。

本节介绍, three.js (webgl)入门的第一个代码程序,实现一个3D场景的构建,和显示,如果有不足之处,欢迎指出,或者你有更好的方法,欢迎留言。

二、Three 中构建场景主要的三要素

在Three js 中创建场景显示,一般需要使用到 Three 中的三要素(三个部分):

1、场景 scene(new THREE.Scene()),场景中可能还包含,几何体、光照等

2、相机 Camera,好似人的眼睛,有位置,有方向,有远近的观察场景中的物体

3、渲染器 Renderer ,把 Camera 看到 Scene 中的景象显示出来,显示在屏幕上

三、场景(Scene)

场景能够让你在什么地方、摆放什么东西来交给three.js来渲染,这是你放置物体、灯光和摄像机的地方。

1、new THREE.Scene()

创建一个新的场景对象。

2、属性

1).autoUpdate : Boolean

默认值为true,若设置了这个值,则渲染器会检查每一帧是否需要更新场景及其中物体的矩阵。 当设为false时,你必须亲自手动维护场景中的矩阵。

2).background : Object

若不为空,在渲染场景的时候将设置背景,且背景总是首先被渲染的。 可以设置一个用于的“clear”的Color(颜色)、一个覆盖canvas的Texture(纹理), 或是 a cubemap as a CubeTexture or an equirectangular as a Texture。默认值为null。

3).environment : Texture

若该值不为null,则该纹理贴图将会被设为场景中所有物理材质的环境贴图。 然而,该属性不能够覆盖已存在的、已分配给 MeshStandardMaterial.envMap 的贴图。默认为null。

4).fog : Fog

一个fog实例定义了影响场景中的每个物体的雾的类型。默认值为null。

5).isScene : Boolean

Read-only flag to check if a given object is of type Scene.

6).overrideMaterial : Material

如果不为空,它将强制场景中的每个物体使用这里的材质来渲染。默认值为null。

3、方法

.toJSON : Object

meta -- 包含有元数据的对象,例如场景中的的纹理或图片。 将scene对象转换为 three.js JSON Object/Scene format(three.js JSON 物体/场景格式)。

 

四、摄像机(Camera)

摄像机的抽象基类。在构建新摄像机时,应始终继承此类。

1、new THREE.XXXXXXCamera()

创建一个新的Camera(摄像机)。注意:这个类并不是被直接调用的;你所想要的或许是一个 PerspectiveCamera(透视摄像机)或者 OrthographicCamera(正交摄像机)。

2、属性

共有属性请参见其基类Object3D

1).isCamera : Boolean

Read-only flag to check if a given object is of type Camera.

2).layers : Layers

摄像机是一个layers的成员. 这是一个从Object3D继承而来的属性。

当摄像机的视点被渲染的时候,物体必须和当前被看到的摄像机共享至少一个层。

3).matrixWorldInverse : Matrix4

这是matrixWorld矩阵的逆矩阵。 MatrixWorld包含了相机的世界变换矩阵。

4).projectionMatrix : Matrix4

这是投影变换矩阵。

5).projectionMatrixInverse : Matrix4

这是投影变换矩阵的逆矩阵。

3、方法

共有方法请参见其基类Object3D。

1).clone ( ) : Camera

返回一个具有和当前相机的属性一样的新的相机。

2).copy ( source : Camera, recursive : Boolean ) : this

将源摄像机的属性复制到新摄像机中。

3).getWorldDirection ( target : Vector3 ) : Vector3

target — 调用该函数的结果将复制给该Vector3对象。

返回一个能够表示当前摄像机所正视的世界空间方向的Vector3对象。 (注意:摄像机俯视时,其Z轴坐标为负。)

五、WebGLRenderer

WebGL Render 用WebGL渲染出你精心制作的场景。

new THREE.WebGLRenderer( parameters : Object )

parameters - (可选) 该对象的属性定义了渲染器的行为。也可以完全不传参数。在所有情况下,当缺少参数时,它将采用合理的默认值。 以下是合法参数:

1) canvas - 一个供渲染器绘制其输出的canvas 它和下面的domElement属性对应。 如果没有传这个参数,会创建一个新canvas
2) context - 可用于将渲染器附加到已有的渲染环境(RenderingContext)中。默认值是null
3)precision - 着色器精度. 可以是 "highp", "mediump" 或者 "lowp". 如果设备支持,默认为"highp" . 点击here 查看"应该避免的事"
4)alpha - canvas是否包含alpha (透明度)。默认为 false
5)premultipliedAlpha - renderer是否假设颜色有 premultiplied alpha. 默认为true
6)antialias - 是否执行抗锯齿。默认为false.
7)stencil - 绘图缓存是否有一个至少8位的模板缓存(stencil buffer)。默认为true
8)preserveDrawingBuffer -是否保留缓直到手动清除或被覆盖。 默认false.
9)powerPreference - 提示用户代理怎样的配置更适用于当前WebGL环境。 可能是"high-performance", "low-power""default"。默认是"default". 详见WebGL spec
10)failIfMajorPerformanceCaveat - 检测渲染器是否会因性能过差而创建失败。默认为false。详见 WebGL spec for details.
11)depth - 绘图缓存是否有一个至少6位的深度缓存(depth buffer )。 默认是true.
12)logarithmicDepthBuffer - 是否使用对数深度缓存。如果要在单个场景中处理巨大的比例差异,就有必要使用。 Note that this setting uses gl_FragDepth if available which disables the 13) Early Fragment Test optimization and can cause a decrease in performance. 默认是false。 示例:camera / logarithmicdepthbuffer

属性方法篇幅过长这里不在赘述,大家可以参考:three.js docs

六、第一个入门 Web 3D 场景

1、引入 Three js

  <!--引入three.js三维引擎--><script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script>

2、创建 Scene

    /*** 创建场景对象Scene*/var scene = new THREE.Scene();

3、创建 Camera

    /*** 相机设置*/var width = window.innerWidth; //窗口宽度var height = window.innerHeight; //窗口高度var k = width / height; //窗口宽高比var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大//创建相机对象var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);camera.position.set(200, 300, 200); //设置相机位置camera.lookAt(scene.position); //设置相机方向(指向的场景对象)

4、创建 Renderer

    /*** 创建渲染器对象*/var renderer = new THREE.WebGLRenderer();renderer.setSize(width, height);//设置渲染区域尺寸renderer.setClearColor(0xcccccc, 1); //设置背景颜色document.body.appendChild(renderer.domElement); //body元素中插入canvas对象//执行渲染操作   指定场景、相机作为参数renderer.render(scene, camera);

5、效果预览

 6、关键代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>第一个three.js文件_WebGL三维场景</title><style>body {margin: 0;overflow: hidden;/* 隐藏body窗口区域滚动条 */}</style><!--引入three.js三维引擎--><script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script></head><body><script>/*** 创建场景对象Scene*/var scene = new THREE.Scene();/*** 创建网格模型*/// var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometryvar material = new THREE.MeshLambertMaterial({color: 0x00ccff}); //材质对象Materialvar mesh = new THREE.Mesh(geometry, material); //网格模型对象Meshscene.add(mesh); //网格模型添加到场景中/*** 光源设置*///点光源var point = new THREE.PointLight(0xffffff);point.position.set(100, 100, 300); //点光源位置scene.add(point); //点光源添加到场景中//环境光var ambient = new THREE.AmbientLight(0xcccc00);scene.add(ambient);// console.log(scene)// console.log(scene.children)/*** 相机设置*/var width = window.innerWidth; //窗口宽度var height = window.innerHeight; //窗口高度var k = width / height; //窗口宽高比var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大//创建相机对象var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);camera.position.set(200, 300, 200); //设置相机位置camera.lookAt(scene.position); //设置相机方向(指向的场景对象)/*** 创建渲染器对象*/var renderer = new THREE.WebGLRenderer();renderer.setSize(width, height);//设置渲染区域尺寸renderer.setClearColor(0xcccccc, 1); //设置背景颜色document.body.appendChild(renderer.domElement); //body元素中插入canvas对象//执行渲染操作   指定场景、相机作为参数renderer.render(scene, camera);</script>
</body>
</html>

7、简单程序代码导图

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Web3D水厂:数字孪生智慧水务三维WebGL可视化管理系统

建设背景 伴随着城市的发展趋势&#xff0c;各水司供水半经扩张&#xff0c;管网更为繁杂&#xff0c;成本和操作难度系数大幅度提高。安全性&#xff0c;高品质&#xff0c;高效率供水服务项目的急切要求和阶梯水价政策的执行&#xff0c;对水司经营明确提出了高规定。智慧水…

Web3D展示框架whs.js:基于Three.js的Web3d应用程序的超快3D框架

whs.js介绍: whs.js是一个在Three.js基础上构建的Web3D应用框架&#xff0c;它实现了一个具有组件系统和插件支持的核心&#xff0c;可以快速开发出web3D场景。 Web3D展示框架whs.js&#xff1a;基于 Three.js的Web应用程序的超快 web3D框架 whs.js如何获取 whs是开源项目&am…

WEB 3D JS 使用【3Dmol.js】

在web使用3d查看器&#xff0c;很多时候我们会优先考虑是不是要用wegGL又或者Three.js 这里分享一个在生物和化学上比较简单的分子3D查看器 3Dmol.js 先看下这句话&#xff1a; 3D view 查看器 default pdb; can be pdb, sdf, xyz, mol2, or cube 如果不是以上的格式&#…

Web3D重构(VueWebApi)总结

1、 不保存预设 注意&#xff1a;创建时选取VUE3.0版本 2、VUE中只针对某个属性做translate动画&#xff0c;那么要在translate加上该属性&#xff0c;否则就所有属性都会动画&#xff1a; 3、VUE中export与import 3、某个元素集合的第一个元素 5、要安装淘宝的cnpm镜像&#…

3D探索——Web 3D哪家强?

腾讯DeepOcean原创文章&#xff1a;http://dopro.io/web-3d-power.html 得益于手机厂商爆炸式的配置堆砌与移动互联时代到来&#xff0c;html在手机上的效果愈加丰富&#xff0c;Web开发者已经不满足于2D效果的实现&#xff0c;而把目标放到了更加炫酷的3D效果上。 在Web3D百花…

17个WebGL框架及Web3D图形库

WebGL是基于OpenGL的JavaScript API库&#xff0c;允许Web浏览器在浏览器中渲染3D / 2D图形&#xff0c;而无需安装额外的插件、桌面应用程序。WebGL允许通过浏览器使用机器GPU将3D图形渲染成HTML页面。WebGL目前在大多数浏览器(如Google Chrome&#xff0c;Mozilla Firefox和S…

实践 ArcGIS Web 3D

ArcGIS 产品家族的 Web 3D 功能众多用户期待已久&#xff0c;从 ArcGIS 10.3.1 版本开始&#xff0c;Esri 放了个大招&#xff0c;千呼万唤始出来的 Web 3D 功能&#xff0c;终于不再犹抱琵琶半遮面了。 那到底如何将创建和发布3D场景呢&#xff1f; 下面就把今天的测试过程记录…

`web3d模型线上展厅(一)

大家好&#xff0c;我是遂海枫林。最近呢又准备活跃起来了。 最近主要研究了下3D相机迅速搭建web线上模型的一个项目。 项目缺口 由于疫情&#xff0c;线上学习&#xff0c;线上工作&#xff0c;线上研究已经成为了大众接纳和处理事务最主要的方式&#xff0c;计算机网络带来…

Web3D开发经验分享:基于Three.js的Web3D建模案例

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。喜欢的话请三连&#xff0c;有问题请私信或者加微…

如何利用Web3D技术打造在线虚拟展览馆

随着Web3D技术的不断发展&#xff0c;越来越多的企业和组织开始将其应用于虚拟展览馆的建设中。虚拟展览馆可以为观众提供高度沉浸式的展览体验&#xff0c;让观众可以随时随地参观各种展览&#xff0c;同时也为展览组织者提供了更多的展示方式和机会。下面将介绍如何利用Web3D…

使用threejs简单Web3D效果

目录 1. threejs介绍 2. thresjs的使用 3. 组件介绍 4. threejs的动画 5. 参考资料 前几天在网上看到一个threejs的实现的web 3d的动画&#xff0c;很炫酷&#xff0c;所以特地去了解了一下threejs。我们首先看下官方使用threejs实现的效果&#xff1a; 1. threejs介绍 t…

几种Web3D技术的比较

1 引 言 虚拟现实(VirtualReality,简称VR)技术是一种逼真地模拟人在自然环境中的视觉、听觉、运动等行为的人机界面技术。由于虚拟现实具有实时的三维空间表现能力、提供了人机交互式的操作环境以及给人带来了身临其境的感受,它正成为继多媒体之后的又一个研究和应用的热点,开…

Web3D发展趋势以及Web3D应用场景

1&#xff0c;Web3D发展趋势 随着互联网的快速发展&#xff0c;Web3D技术也日渐成熟&#xff0c;未来发展趋势也值得关注。以下是Web3D未来发展趋势的七个方面&#xff1a; 可视化和可交互性的增强&#xff1a;Web3D可以为三维数据提供可视化和可交互性的增强&#xff0c;将极大…

Web 3D 从入门到跑路

大厂技术 坚持周更 精选好文 前情概要 作为在该领域小白的我&#xff0c;在准备该主题分享之前&#xff0c;我信心满满的去知乎查了下&#xff0c;如何学习 WebGL&#xff1f; 如何入手webGl以及three.js呢? - 知乎[1] 前端开发者应该如何学习计算机图形学相关的知识? - 知…

什么是Web3D?Web3D技术发展历程以及Web3D应用场景

当今的互联网已经迈入了第三代&#xff0c;这被称为Web3.0&#xff0c;而Web3D正是Web3.0的其中一个技术分支。Web3D是指将三维图形技术应用于Web上的技术&#xff0c;它是将3D图形和Web技术结合起来的一个分支&#xff0c;可以使用户在Web上以更真实、更直观的方式浏览和操作虚…

Web3D 从入门到跑路 · 3D 初体验

3D初体验 本文整理自老冯于 凹凸 2022 年技术分享&#xff0c;带领大家从案例、应用、技术生态出发&#xff0c;让大家了解一下 3D 在 Web 端的现状。 Hey 3D whats up&#xff0c;最近在Web圈混得怎样 在“元宇宙”概念越来越火热的背景下&#xff0c;我们准备了一系列的 3D…

20151021

题目一给定一个无序数组&#xff0c;请调整该数组&#xff0c;调整成奇数放在数组的左边&#xff0c;偶数放在数组的右边。但是奇数与奇数之间的相对顺序不变&#xff0c;偶数和偶数之间的相对顺序也不变。要求思考&#xff1a;如果额外空间复杂度必须为O(1)&#xff0c;时间复…

独家专访阿里集团副总裁贾扬清:我为什么选择加入阿里巴巴?

真正跟贾扬清近距离接触后笔者发现&#xff0c;这位被很多人称为“AI 架构大神”的 80 后青年科学家&#xff0c;更像一位温柔且平易近人的邻家“学霸”&#xff0c;虽然技能全面碾压但丝毫没有架子。加入阿里以来&#xff0c;贾扬清一直忙于了解集团覆盖范围极广的各项产品和业…

龙蜥白皮书精选:云原生混部资源隔离技术

文/云原生 SIG 01 技术方案简介 混部就是将不同类型的业务在同一台机器上混合部署起来&#xff0c;让它们共享机器上的 CPU、内存、IO 等资源&#xff0c;目的就是最大限度地提高资源利用率&#xff0c;从而降低采购和运营等成本。 混部通常是将不同优先级的任务混合在一起&a…

windows10系统装cad2007提示缺少NET组件

2019独角兽企业重金招聘Python工程师标准>>> 打开控制面板-->找到 程序 选择 启用或关闭windows功能 打开.NET Framework3.5(默认它是关闭的)&#xff0c;然后确定 这时windows会提示要更新下载&#xff0c;确认即可&#xff0c;等待下载完成再重新运行CAD2007安…