【three.js】创建一个场景

本节的目的是介绍three.js。我们将从创建一个场景以及场景内的一个旋转的立方体开始。在本文最后将会给出相应的例子。

什么是Three.js

如果你阅读本文,将会大概了解什么是Three.js,它将为你做什么。

Three.js是一个简单的WebGL的类库(主要用于在浏览器展现3D图像)。若在一个基础的WebGL之上构造一个立方体,程序员将会写数百行的js代码和着色代码(CSS?),而在Three.js下,则仅仅需要一个函数。

开始之前

在你使用Three.js之前,你需要一个地方去显示它。将下面写出的HTML代码复制到你本机中的文件内,并将three.min.js拷贝到你电脑里的相应位置,并用浏览器打开该文件

<html>
	<head>
		<title>My first three.js app</title>
		<style>
			body{ margin:0}
			canvas { width:100%; height:100% }
		</style>
	</head>
	<body>
		<script src="three.min.js"></script>

		<script>
			//do someting.
		</script>
	</body><code class=" prettyprint"><span class="tag"></span></code>
接下来,所有的代码将会写在script标签中。

创建一个场景

若要用Three.js真正能够显示模型,需要三个对象:场景(scene)相机(camera)渲染器(renderer)。我们将利用渲染器将场景渲染至相机。

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

我们定义了一个场景 ,一个相机和一个渲染器。

在Three.js中,会有几种不同的相机,我们在之后的章节对其进行讨论。目前,我们先使用PrespectiveCamera。

第一个属性是视野(field of view)

第二个属性是纵横比(aspect ratio)。通常来说,纵横比是宽度除以高度,也可以通过定义来实现宽屏等其他效果。

第三个和第四个属性分别是近距离(near)和远距离(far)剪切面。这两个参数描述的是当物体距离相机超过规定的远距离或过分接近相机超过规定的近距离时,物体将不会被渲染。目前来说先不用担心这一方面的问题,等之后需要优化的时候再说。

THREE.PerspectiveCamera(field_of_view, aspect_ratio,near,far);

下一个对象是渲染器。我们这里使用WebGLRenderer()。当用户的浏览器过老,不支持WebGL时,它会给出相应的错误原因提示。

在初始化渲染器时,我们需要设置渲染长宽,

最后,我们将渲染器元素添加到我们的HTML文本中,利用canvas标签来显示由渲染器渲染后的场景。


现在,我们添加一个方块:

var geometry = new THREE.BoxGeometry(1, 1, 1);
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh(geometry, material);

scene.add(cube);

camera.position.z = 5;

创建方块,首先需要BoxGeometry。我们将在将来对它进行介绍。

其次,我们将一个颜色材质赋予已经构造好的几何体。Three.js提供了一系列的材质。目前我们使用MeshBasicMaterial

第三,我们需要一个Mesh(找不到合适的翻译,大概意思是连接关系之类),mesh是一种承载几何物体并将材质赋予该物体的对象,我们可以将它放置在场景中,并能够自由移动。

当在默认情况下,我们调用scene.add()方法,物体将会放置到场景的(0,0,0)位置。这样会导致物体与摄像机重叠,为了避免这样的事情,我们将相机移动几个单元。

渲染场景

如果你将上述代码拷贝到HTML中去,并不会显示什么东西,原因就在于你还没有渲染。所以,我们需要调用渲染循环(render loop)

function render(){
	requestAnimationFrame(render);
	renderer.render(scene, camera);
}
render();

这样就会建立一个每秒60次的循环渲染(60fps)。采用requestAnimationFrame的方式较之使用setInterval的方式更具优点。当用户选择其他页面标签时,渲染将会暂停。

让方块动起来

在renderer.render上添加代码:

cube.relation.x += 0.1;
cube.relation.y += 0.1;

该程序段将会在每一帧执行一次,作用是让方块能够旋转起来。


最后

<html>
<head>
	<title>My first Three.js app</title>
	<style>
		body { margin : 0; }
		canvas { width : 100%; height : 100% }
	</style>
</head>
<body>
	<script src="three.min.js"></script>
	<script>
		var scene = new THREE.Scene();
		var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

		var renderer = new THREE.WebGLRenderer();
		renderer.setSize(window.innerWidth, window.innerHeight);
		document.body.appendChild(renderer.domElement);

		var geometry = new THREE.BoxGeometry(1, 1, 1);
		var meterial = new THREE.MeshBasicMeterial( { color : 0x00FF00 } );
		var cube = new  THREE.Mesh(geometry, meterial);
		scen.add(cube);

		camera.position.z = 5;

		var render = function(){
			requestAnimationFrame(render);

			cube.rotation.x += 0.1;
			cube.rotation.y += 0.1;

			renderer.render(scene, camera);
		}
		
		render();
	</script>
</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用 three.js 创建一个网格背景,你可以使用以下步骤: 1. 首先,创建一个场景: ``` const scene = new THREE.Scene(); ``` 2. 然后,使用 `THREE.PlaneBufferGeometry` 创建一个平面几何体,并指定它的宽度和高度: ``` const geometry = new THREE.PlaneBufferGeometry(width, height); ``` 3. 接下来,使用 `THREE.MeshBasicMaterial` 创建一个材质,并指定一张网格背景图片作为贴图: ``` const texture = new THREE.TextureLoader().load('./grid.jpg'); const material = new THREE.MeshBasicMaterial({ map: texture }); ``` 4. 最后,使用上述几何体和材质创建一个网格(mesh)并将它添加到场景中: ``` const mesh = new THREE.Mesh(geometry, material); scene.add(mesh); ``` 这样,你就可以使用 three.js 创建了一个网格背景。 ### 回答2: 使用three.js创建一个网格背景的方法如下: 1. 首先,引入three.js库。可以从官方网站(https://threejs.org/)下载或使用CDN链接。 2. 创建一个HTML元素,作为三维场景的容器。例如,可以使用一个div元素作为容器: ```html <div id="scene-container"></div> ``` 3. 在JavaScript代码中,创建一个场景、相机和渲染器。 ```javascript const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.getElementById('scene-container').appendChild(renderer.domElement); ``` 4. 创建一个网格背景。可以使用THREE.GridHelper类来创建,它可以生成一个网格状的辅助线。 ```javascript const gridHelper = new THREE.GridHelper(10, 10); scene.add(gridHelper); ``` 这里的参数10,10表示网格的大小和细分数目。 5. 添加一些其他物体和光源到场景中,以创建更丰富的场景效果。例如,可以添加一个立方体一个点光源。 ```javascript const geometry = new THREE.BoxGeometry(); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube); const light = new THREE.PointLight(0xffffff, 1, 100); light.position.set(0, 0, 10); scene.add(light); ``` 6. 更新场景并渲染。 ```javascript function animate() { requestAnimationFrame(animate); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera); } animate(); ``` 通过以上步骤,你就可以使用three.js创建一个拥有网格背景的三维场景了。当然,你也可以根据自己的需要调整背景网格的大小、颜色等参数来实现不同的效果。 ### 回答3: three.js是一款用于在Web浏览器中创建3D图形的JavaScript库。要创建一个网格背景,我们可以使用three.js中的GridHelper类。 首先,我们需要在HTML文件中引入three.js库。你可以从官方网站上下载最新版本的库文件,并将其添加到你的HTML文件中。 接下来,我们需要在JavaScript代码中创建一个场景(scene)、一个相机(camera)和渲染器(renderer)。你可以选择适合你需求的场景和相机类型。 初始化场景和相机的代码如下: ``` var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); ``` 然后,我们可以使用GridHelper类来创建网格背景。GridHelper类接受三个参数:网格的大小、每个格子的尺寸和网格线的颜色。你可以根据需要调整这些参数。 创建网格背景的代码如下: ``` var gridHelper = new THREE.GridHelper(10, 1); scene.add(gridHelper); ``` 最后,我们需要设置相机的位置和渲染场景。 设置相机位置的代码如下: ``` camera.position.z = 5; ``` 渲染场景的代码如下: ``` function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate(); ``` 现在,你可以在浏览器中查看效果了。当你刷新页面时,你将看到一个带有网格背景的场景。你可以通过调整网格的大小和颜色来自定义网格背景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值