我是靠谱客的博主 柔弱航空,这篇文章主要介绍three.js 入门案例详解,现在分享给大家,希望可以做个参考。

最近公司需要用tree.js实现一个3D图的显示,就看了官方文档,正好有时间,就记录下来。

由于我们公司的前端框架用的是angular,所以我就把我的treejs封装在一个directives里面。后面放源码

首先我们要知道three.js的下载地址它的地址是: https://github.com/mrdoob/three.js。

其次,什么是three.js?

three.js的几个步骤:

1:引入three.js文件(打开调试窗口,并在Console下输入 THREE.REVISION命令,得到版本号,成功)

2:设置一个场景// var scene = new THREE. Scene();

3: var camera = new THREE. PerspectiveCamera( 75, window.innerWidth /window.innerHeight, 0.1, 1000);设置一个 透视相机
4: var renderer = new THREE. WebGLRenderer();   renderer. setSize(window.innerWidth, window.innerHeight); 设置一个渲染器

5:把一个物体添加到场景中

modelUrl是所添加文件例如:$scope. DView = cy3DView. newCanvas ; $scope. DView. config( 'canvas')

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
$scope.process3DUrl = data.result.data.engineering_stl_mcube; $scope.DView.plan($scope.process3DUrl) function plan(modelUrl) { stlLoader = new THREE.STLLoader(); group = new THREE.Object3D(); stlLoader.load(modelUrl, function (geometry) { //console.log(geometry); var mat = new THREE.MeshLambertMaterial({color: 0x7777ff}); group = new THREE.Mesh(geometry, mat); group.rotation.x = -0.5 * Math.PI; group.scale.set(0.6, 0.6, 0.6); scene.add(group); animation(); }); }

6:渲染

复制代码
1
renderer.render(scene, camera);

ok 是不是很简单,个人认为是这样,没有看懂的小伙伴可以私信我哦

源码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
(function(window, document) { 'use strict'; var three = window.THREE; var angular = window.angular; angular.module('cy-3D-view', []).factory('cy3DView', cy3DView); cy3DView.$inject = ['$rootScope']; function cy3DView($rootScope) { return { newCanvas: new Object(newCanvas($rootScope)) }; } function newCanvas() { var scene, camera, renderer, controls, group, ambient, fov, near, far, stlLoader; var width, height, keyLight, fillLight, backLight, spotLight, lighting; function config() { //设置3D图的宽和高 width = document.getElementById('canvas').clientWidth; height = document.getElementById('canvas').clientHeight; renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(width, height); renderer.shadowMapEnabled = true;  document.getElementById('canvas').appendChild(renderer.domElement); renderer.setClearColor(0xFFFFFF, 1.0); scene = new THREE.Scene(); lighting = false; //设置3D图的颜色 ambient = new THREE.AmbientLight(0xffffff, 1.0); scene.add(ambient); keyLight = new THREE.DirectionalLight(new THREE.Color('hsl(30, 100%, 75%)'), 1.0); keyLight.position.set( - 100, 0, 100); fillLight = new THREE.DirectionalLight(new THREE.Color('hsl(240, 100%, 75%)'), 0.75); fillLight.position.set(100, 0, 100); backLight = new THREE.DirectionalLight(0xffffff, 1.0); backLight.position.set(100, 0, -100).normalize(); spotLight = new THREE.SpotLight(0xffffff); spotLight.position.set(150, 150, 150); scene.add(spotLight); //照相机配置 fov = 40; near = 1; far = 1000; camera = new THREE.PerspectiveCamera(fov, width / height, near, far); camera.position.x = 150; camera.position.y = 150; camera.position.z = 150; camera.lookAt({ x: 0, y: 0, z: 0 }); camera.lookAt(new THREE.Vector3(0, 40, 0)); controls = new THREE.OrbitControls(camera, renderer.domElement); controls.enableDamping = true; controls.dampingFactor = 0.25; controls.enableZoom = false; window.addEventListener('resize', onWindowResize, false); window.addEventListener('keydown', onKeyboardEvent, false); window.addEventListener('mousewheel', mousewheel, false); } function mousewheel(e) { e.preventDefault(); if (e.wheelDelta) { //判断浏览器IE,谷歌滑轮事件 if (e.wheelDelta > 0) { //当滑轮向上滚动时 fov -= (near < fov ? 1 : 0); } if (e.wheelDelta < 0) { //当滑轮向下滚动时 fov += (fov < far ? 1 : 0); } } else if (e.detail) { //Firefox滑轮事件 if (e.detail > 0) { //当滑轮向上滚动时 fov -= 1; } if (e.detail < 0) { //当滑轮向下滚动时 fov += 1; } } camera.fov = fov; camera.updateProjectionMatrix(); renderer.render(scene, camera); } function onWindowResize() { camera.aspect = width / height; camera.updateProjectionMatrix(); renderer.setSize(width, height); } function onKeyboardEvent(e) { if (e.code === 'KeyL') { lighting = !lighting; if (lighting) { ambient.intensity = 0.25; scene.add(keyLight); scene.add(fillLight); scene.add(backLight); } else { ambient.intensity = 1.0; scene.remove(keyLight); scene.remove(fillLight); scene.remove(backLight); } } } function plan(modelUrl) { stlLoader = new THREE.STLLoader(); group = new THREE.Object3D(); stlLoader.load(modelUrl, function(geometry) { //console.log(geometry); var mat = new THREE.MeshLambertMaterial({ color: 0x7777ff }); group = new THREE.Mesh(geometry, mat); group.rotation.x = -0.5 * Math.PI; group.scale.set(0.6, 0.6, 0.6); scene.add(group); animation(); }); } function animation() { renderer.render(scene, camera); requestAnimationFrame(animation); } return { config: config, plan: plan, }; } })(window, document);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

最后

以上就是柔弱航空最近收集整理的关于three.js 入门案例详解的全部内容,更多相关three.js内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(189)

评论列表共有 0 条评论

立即
投稿
返回
顶部