three.js入门学习

久仰three的大名,今天稍微入门一下,满足自我的好奇心

一开始只想看看github上的three.js的example,然后克隆到本地,发现由于同源策略,examples下的例子无法正常显示在浏览器中。于是使用IIS创建了一个本地静态服务。

1、打开控制面板-> 程序->启用或关闭windows功能:

选择好这三个,然后点击确定,稍等一会儿

three.js入门学习

2、控制面板->系统与安全->管理工具->打开Internet Information Services (IIS)管理器->右键左侧连接->添加网站

随意填网站名称,添加你想加入的文件夹,设置端口号,确定

three.js入门学习

3、可以看到three.js的文件如下图

three.js入门学习

我们选取其中一个例子的文件名,在谷歌浏览器输入http://localhost/examples/misc_controls_map.html

就可以看到已经渲染出来了:

three.js入门学习

4、跟着入门教程文档写了一个demo:

在examples下新建一个mydemo.html,然后写入:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<title>three.js css2d - label</title>
		<link type="text/css" rel="stylesheet" href="main.css">
		<style>
		</style>
	</head>
	<body>
		<div >three.js</a> css2d - label</div>

		<script type="module">

			import * as THREE from '../build/three.module.js';

			import { OrbitControls } from './jsm/controls/OrbitControls.js';
			import { CSS2DRenderer, CSS2DObject } from './jsm/renderers/CSS2DRenderer.js';

			var scene = new THREE.Scene(); //创建场景
			var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ); //创建相机
            // PerspectiveCamera第一个参数是视野角度(FOV) 第二个参数是长宽比(aspect ratio),接下来两个是近截面和远截面
			var renderer = new THREE.WebGLRenderer();// 创建渲染器
			renderer.setSize( window.innerWidth, window.innerHeight ); // 将渲染器宽高设置为浏览器窗口宽高
			document.body.appendChild( renderer.domElement ); //将renderer(渲染器)的dom元素(renderer.domElement)添加到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 ); //默认物体会被添加到(0,0,0)

            camera.position.z = 5;
            function animate() { // 渲染刷新
                requestAnimationFrame( animate ); // 为啥不用setInterval? requestAnimationFrame当用户切换其他标签的时候会暂停,节约处理器资源,也不会损耗电池寿命
                cube.rotation.x += 0.01; //旋转动画(60次/秒)
                cube.rotation.y += 0.01;
                renderer.render( scene, camera );
            }
            animate();
		</script>
	</body>
</html>

  在浏览器输入:http://localhost/examples/mydemo.html

效果如下

three.js入门学习