美文网首页Three.js学习笔记
Three.js笔记(三)第一个场景

Three.js笔记(三)第一个场景

作者: BIM科学家小张 | 来源:发表于2022-03-09 09:04 被阅读0次

基础文件

首先,要创建一个简单的index.html文件

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>(三)第一个场景</title>

</head>

    <body>

        <script src="./script.js"></script>

    </body>

</html>

然后在同级目录下创建script.js文件

console.log('喂喂喂,试音试音')

在浏览器里打开index.html文件——当然不是双击直接打开,需要直接拽到浏览器里,然后按F12打开管理工具,就能在控制台里看到输出的汉字。

加载Three.js

现在来加载Three.js库。方法有很多,比如简单的通过<script/>标签来加载下载好的库。

前往官网,下载并解压官方文件,从three.js-master/build/下,拷贝three.min.js到自己的项目中。

然后,就可以在<body>标签后载入库,

<script src="./three.min.js"></script>

<script src="./script.js"></script>

确保在加载three.min.js后,加载script.js,否则,自己编写的代码无法感知three.min.js中的函数。

使用Three.js

在script.js中,能够读取到一个叫做THREE的变量。注意应该大写。

如果将THREE放入console.log()函数中,在控制台会看到一堆返回值。

THREE包含了大多数经典Three.js项目中可能会用到的类与属性。但不幸的是,并非所有的类都在这个变量里,稍后我们将讨论如何访问它们。

要使用其中一个类,就需要将它初始化。比如,想要创建一个场景,需要写

const scene = new THREE.Scene()

想要创建一个球形几何体,需要写

const sphereGeometry = new THREE.SphereGeometry(1.5,32,32)

首个场景

想要在场景中显示些什么,首先需要准备4个要素

·一个场景——用来容纳各种对象

·一些对象

·一个相机

·一个渲染器

场景

场景就像个容器。它用来放置对象、模型、粒子、光线等等,然后在某个时刻,需要请求Three.js来渲染场景。

要创建场景,需要用到场景类Scene

//创建场景

const scene = new THREE.Scene()

对象

对象可以是很多东西。它可以是原始几何体、导入的模型、粒子、光照等等。

下面以一个红色的正方体为例。

要创建一个红色的立方体,需要创建一种叫做Mesh的类型的对象。一个Mesh是由几何体(形状)和材质(外观)组成。

虽然有很多种几何体与材质,但是为了简化,所以创建BoxGeometry和一个MeshBasicMaterial。

要创建几何体。使用带有三个参数的BoxGeometry,三个参数代表立方体的外形尺寸。

//创建对象

const geometry = new THREE.BoxGeometry(1,1,1)

要创建材质,使用带有一个参数的MeshBasicMaterial类,参数是一个对象{},这个对象包含了所有的选项。在这里仅仅需要颜色color属性。

有许多方法来定义Three.js里的颜色,可以发一个JS十六进制数比如0xff0000,也可以发送字符串型的十六进制"#ff0000",也可以直接用颜色的名字'red',或者传递一个Color类的实例。

//创建对象

const geometry = new THREE.BoxGeometry(1,1,1)

const material = new THREE.MeshBasicMaterial({color: 0xff0000})

要创建最终的网格体,使用Mesh类,然后将geometry和material作为参数传进去。

//创建对象

const geometry = new THREE.BoxGeometry(1,1,1)

const material = new THREE.MeshBasicMaterial({color: 0xff0000})

const mesh = new THREE.Mesh(geometry,material)

然后使用add()函数把网格体添加到场景中

scene.add(mesh)

如果不把对象添加到场景,场景里面什么也看不到。

相机

相机是不可见的,更像是一个理论观察点。当渲染一个场景时,会从相机视角来进行渲染。

场景里可以有多个相机,就像是拍电影,并且可以随时在相机之间切换。通常情况下,场景里只有一个相机。

相机有不同的类型,这点稍后讲。当下,场景里需要一个简单的透视镜头(近大远小的那种)。

要创建这样的镜头,要使用PerspectiveCamera类。

有两个重要的参数需要注意:

视场角

视场角就是视角的角度大小。如果视场角很大,会一下看到各个角度,但是带有很大的失真,因为视线被绘制在很小的矩形里面。如果视场角很小,场景内的东西就像放大了。视场角(fov)对应竖直方向上的视角的角度。这次我们使用75度。

长宽比

大多数情况下,长宽比是画布的长度除以高度。当前不用设置长宽比,但是以后会用得上。当下,创建一个临时值来使用。

不要忘了把相机添加到场景。没添加相机的情况下,每样东西都能运行,但是以后可能会报错。

//尺寸

const sizes = {

    width:800,

    height:600

}

//创建相机

const camera = new THREE.PerspectiveCamera(75,sizes.width/sizes.height)

scene.add(camera)

渲染器

渲染器的用处就是渲染。我们向渲染器发送简单的从相机视角渲染场景的指令,然后渲染结果就会被绘制到画布上。画布可以由自己创建,或者让渲染器自动生成并添加到页面上。这次,我们自己创建画布,并把它发送到渲染器。

先创建<canvas>元素并赋予一个类名称,然后再载入脚本

<canvas class = "webgl"></canvas>

我们可以使用带一个参数的WebGLRenderer类来创建渲染器:参数为一个包含所有选项的对象{}。这里只需要canvas属性,来对应到刚刚添加到页面上的<canvas>标签。

在代码的开头,创建一个canvas变量,然后使用document.querySelector()来获取并存储它。

把画布分配到一个变量的好处,我们稍后进行讨论。

还可以通过setSize()的方法来更新渲染器的大小,传入的参数就是前面创建的sizes。

setSize()方法会据此自动调整<canvas>的大小。

//分配<canvas>到变量

// Canvasconst canvas = document.querySelector('canvas.webgl')

// ...

// 创建渲染器

const renderer = new THREE.WebGLRenderer({

    canvas: canvas

})

renderer.setSize(sizes.width, sizes.height)

此时刷新页面,会看到一个大小为800x600的黑色画布。

第一次渲染

调用渲染器的render()方法,并将scene和camera作为参数传入

renderer.render(scene,camera)

此时画面有变化吗?

问题出在这:现在既未定义对象的位置,也未定义相机的位置。两者都在默认位置,即在场景的中心,而且,在物体的内部是无法看到物体的。

这就需要挪动它们。

移动它们,就需要访问每个对象的多个属性,比如position位置、rotation旋转和scale缩放。当下,使用position位置属性,将相机向后移动。

position位置属性是一个具有三个相关属性的对象:x、y、z。其中z负责向前和向后的轴向移动。

要将相机向后移动,需要给这个属性一个正值。这个操作可以放在代码的任意位置,但是要放在创建camera变量后,实施渲染之前

const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height)

camera.position.z = 3

scene.add(camera)

相关文章

  • Three.js笔记(三)第一个场景

    基础文件 首先,要创建一个简单的index.html文件 ...

  • three.js事件绑定插件--onEvent

    Three.js是构建web3d场景非常流行的框架,利用three.js我们可以更优雅地创建出三维场景和三维动画,...

  • 三维技术探索-Three.js开发指南

    一、场景搭建 1、使用three.js搭建三维场景需要的基本要素 渲染器与场景 (1、)渲染器(renderer)...

  • 使用three.js的基本组件

    创建一个简单的入门案例 three.js的三大场景:场景(scene)、相机(camera)和渲染器(render...

  • threeJs基础文档

    three.js基础结构 目录 一个three.js项目至少需要的东西有—— [ ] scene:场景 [ ] c...

  • three.js

    three.js 使用ES6标准 三大组建 场景(scene)、相机(camera)和渲染器(renderer)。...

  • 基本概念

    three.js基本概念## 一个典型的Three.js程序至少要包括渲染器(Renderer)、场景(Scene...

  • Three.js的相机控件OrbitControls.js

    通过Three.js的相机控件OrbitControls.js可以对Threejs的三维场景进行缩放、平移、旋转操...

  • Three.js基础入门(1)

    1.场景 场景是three.js最基础的三大要素之一,你的所有要展示的内容都在场景之中,创建的方式十分简单var ...

  • 1.three.js世界中的四大要素

    一、三大组件 在Three.js中,要渲染物体到网页中,我们需要3个组建:场景(scene)、相机(camera)...

网友评论

    本文标题:Three.js笔记(三)第一个场景

    本文链接:https://www.haomeiwen.com/subject/guparrtx.html