“我担心你们断后的兄弟们啊,差不多了快撤下来吧,我们那里有这么多川军部队在周围,即便遇到了小鬼子,也没什么事情的。”陈婉儿这次来更像是来提醒韩非的:别顾着打鬼子,差不多了就快撤下来,别死扛着,这么多鬼子你们一时半会儿又打不光的。

这时候,叶卿卿似乎猜到了王小民的想法,轻轻一笑,凑到他近前,小声说道:“小师弟,你不用羡慕,等以后我们宗门强大起来,我们就建造一个更加气派的宗门。”

微信投资10块钱赚钱

戴沐白邪眸中光芒大量,猛的从的上跳起来。“原来如此。那我们还等什么。现在就试试。”
王小民掏出手机看了看,然后说道:“再等等吧。我想看看他们是否还会有第三辆车。”

“成功了,果然和我想的一样,玄阴杀葵星是一种奇异的星体,那么我是玄阴杀葵星所化的天之奇女,直接以自己的样子去布置构建成一幅星图不就是最适合我自己的了吗?何必舍近求远。”

three.js实现3D模型展示


由于项目需要展示3d模型,所以对three做了点研究,分享出来 希望能帮到大家

先看看效果:

three.js整体来说 不是很难 只要你静下心来研究研究 很快就会上手的

首先我们在页面上需要创建一个能够放置3D模型的画布 也可以说是初始化 Three

 1 var WIDTH,HEIGHT;
 2     var    renderer;
 3     function initThree() {
 4         WIDTH = document.documentElement.clientWidth/2; <!--{foreach from=$recommended_goods item=rgoods}--> <!-- {/foreach} -->
 5         HEIGHT = document.documentElement.clientHeight/2;
 6         /* 渲染器 */
 7         renderer = new THREE.WebGLRenderer();
 8         renderer.setSize(WIDTH , HEIGHT);
 9         renderer.setClearColor(new THREE.Color(0x66666));
10         renderer.gammaInput = true;
11         renderer.gammaOutput = true;
12 
13         document.body.appendChild(renderer.domElement);
14     }

通过上面的代码不难看出 我们设置了 在body里追加了一块画布 宽高是 client的一半颜色为 0x66666 这里要注意的是  renderer = new THREE.WebGLRenderer(); 因为我们所有的设置都是以renderer为对象设置

下来 我们需要调整摄像头 即视觉角度

 1 /* 摄像头 */
 2     var camera;
 3     function initCamera() {
 4         var VIEW_ANGLE = 45,
 5                 ASPECT = WIDTH / HEIGHT,
 6                 NEAR = 0.1,
 7                 FAR = 10000;
 8         camera = new THREE.PerspectiveCamera(VIEW_ANGLE, ASPECT, NEAR, FAR);
 9         camera.position.set(20, 0, 0);
10         //设置视野的中心坐标
11         camera.lookAt(scene.position);
12     }

以上代码主要是控制视觉角度 数值可以在后期根据自己的需求去调整

加载场景:

1     /* 场景 */
2     var scene;
3     function initScene() {
4         scene = new THREE.Scene();
5     }

加载灯光效果

 1 /* 灯光 */
 2     var light,light2,light3;
 3     function initLight() {
 4         //平行光
 5         light = new THREE.DirectionalLight(0xFFFFFF);
 6         light.position.set(0, 99, 0).normalize();
 7         scene.add(light);
 8         //环境光
 9         light2 = new THREE.AmbientLight(0x999999);
10         scene.add(light2);
11         //点光源
12         light3 = new THREE.PointLight(0x00FF00);
13         light3.position.set(300, 0, 0);
14         scene.add(light3);
15     }

显示模型对象:

 1     /* 显示对象 */
 2     var cube;
 3     function initObject(){
 4         // ASCII file
 5         var loader = new THREE.STLLoader();
 6 
 7         loader.addEventListener( "load", function ( event ) {
 8             var loading = document.getElementById("Loading");
 9             loading.parentNode.removeChild(loading);
10             var geometry = event.content;
11             //砖红色
12             var material = new THREE.MeshPhongMaterial( { ambient: 0xff5533, color: 0xff5533, specular: 0x111111, shininess: 200 } );
13             //纯黑色
14 //            var material = new THREE.MeshBasicMaterial( { envMap: THREE.ImageUtils.loadTexture( "http://localhost:8080/textures/metal.jpg", new THREE.SphericalReflectionMapping() ), overdraw: true } ) ;
15             //粉色 带阴影
16 //            var material = new THREE.MeshLambertMaterial( { color:0xff5533, side: THREE.DoubleSide } );
17             //灰色
18 //            var material = new THREE.MeshLambertMaterial({color: 000000});    //材质设定  (颜色)
19 
20 
21             var mesh = new THREE.Mesh( geometry, material );
22 
23             var center = THREE.GeometryUtils.center(geometry);
24             var boundbox=geometry.boundingBox;
25             var vector3 = boundbox.size(null);
26             var vector3 = boundbox.size(null);
27             console.log(vector3);
28             var scale = vector3.length();
29             camera.position.set(scale, 0, 0);
30             camera.lookAt(scene.position);
31             scene.add(camera);
32 
33 
34             //利用一个轴对象以可视化的3轴以简单的方式。X轴是红色的。Y轴是绿色的。Z轴是蓝色的。这有助于理解在空间的所有三个轴的方向。
35             var axisHelper = new THREE.AxisHelper(800);
36             scene.add(axisHelper);
37 
38             //周围边框
39             bboxHelper = new THREE.BoxHelper();
40             bboxHelper.visible = true;
41             var meshMaterial = material;
42             mainModel = new THREE.Mesh(geometry, meshMaterial);
43             bboxHelper.update(mainModel);
44             bboxHelper.geometry.computeBoundingBox();
45             scene.add(bboxHelper);
46 
47             //地板网格
48 //            var gridHelper = new THREE.GridHelper(500, 40); // 500 is grid size, 20 is grid step
49 //            gridHelper.position = new THREE.Vector3(0, 0, 0);
50 //            gridHelper.rotation = new THREE.Euler(0, 0, 0);
51 //            scene.add(gridHelper);
52 //            var gridHelper2 = gridHelper.clone();
53 //            gridHelper2.rotation = new THREE.Euler(Math.PI / 2, 0, 0);
54 //            scene.add(gridHelper2);
55 //            var gridHelper3 = gridHelper.clone();
56 //            gridHelper3.rotation = new THREE.Euler(Math.PI / 2, 0, Math.PI / 2);
57 //            scene.add(gridHelper3);
58 //
59 //            var grid = new THREE.GridHelper(300, 40, 25, [0, 0, 1], 0x000055, 0.2, true, "#FFFFFF", "left");
60 //            scene.add(grid);
61 
62 
63             var x = (boundbox.max.x - boundbox.min.x).toFixed(2);
64             var y = (boundbox.max.y - boundbox.min.y).toFixed(2);
65             var z = (boundbox.max.z - boundbox.min.z).toFixed(2);
66 
67             console.log(x);
68             console.log(y);
69             console.log(z);
70             console.log(boundbox);
71 
72             mesh.position.set(0,0,0);
73 //            mesh.position.x = scene.position.x;
74 //            mesh.position.y = scene.position.y ;
75 //            mesh.position.z = scene.position.z;
76             scene.add(mesh);
77 
78 
79             renderer.clear();
80             renderer.render(scene, camera);
81         } );
82         loader.load( "3dfile/莫比乌斯环.STL" );
83     }

这里根据文件类型选择相对应的js引入即可 我加载的是STL模型 所以我引入的是 STLLoader.js

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

如果需要显示网格标尺 将 网格部分代码 去掉注释即可

下来是控制方法 (虽然我没有在显示代码里面写根据键盘按键放大缩小 但还是提供给大家 参考) 

1 //控制
2     var effect;
3     var controls;
4     function initControl(){
5         effect = new THREE.AsciiEffect( renderer );
6         effect.setSize( WIDTH, HEIGHT );
7         controls = new THREE.TrackballControls( camera,renderer.domElement);
8     }

最后就是一个初始调用了

 1   function animate() {
 2         requestAnimationFrame( animate );
 3         controls.update();
 4         effect.render( scene, camera );
 5     }
 6 
 7     function threeStart() {
 8         initThree();
 9         initScene();
10         initCamera();
11         initLight();
12         initObject();
13         initControl();
14         animate();
15     }

 

附上完整代码

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <meta charset="UTF-8" />
  5     <title>WebGL</title>
  6     <script type="text/javascript" charset="utf-8" src="js/three.js"></script>
  7     <script src="js/STLLoader.js"></script>
  8     <script src="js/TrackballControls.js"></script>
  9     <script src="js/AsciiEffect.js"></script>
 10     <style>body{overflow:hidden;background:#eee}</style>
 11 </head>
 12 <script>
 13     var WIDTH,HEIGHT;
 14     var    renderer;
 15     function initThree() {
 16         WIDTH = document.documentElement.clientWidth/2; <!--{foreach from=$recommended_goods item=rgoods}--> <!-- {/foreach} -->
 17         HEIGHT = document.documentElement.clientHeight/2;
 18         /* 渲染器 */
 19         renderer = new THREE.WebGLRenderer();
 20         renderer.setSize(WIDTH , HEIGHT);
 21         renderer.setClearColor(new THREE.Color(0x66666));
 22         renderer.gammaInput = true;
 23         renderer.gammaOutput = true;
 24 
 25         document.body.appendChild(renderer.domElement);
 26     }
 27 
 28     /* 摄像头 */
 29     var camera;
 30     function initCamera() {
 31         var VIEW_ANGLE = 45,
 32                 ASPECT = WIDTH / HEIGHT,
 33                 NEAR = 0.1,
 34                 FAR = 10000;
 35         camera = new THREE.PerspectiveCamera(VIEW_ANGLE, ASPECT, NEAR, FAR);
 36         camera.position.set(20, 0, 0);
 37         //设置视野的中心坐标
 38         camera.lookAt(scene.position);
 39     }
 40 
 41     /* 场景 */
 42     var scene;
 43     function initScene() {
 44         scene = new THREE.Scene();
 45     }
 46 
 47     /* 灯光 */
 48     var light,light2,light3;
 49     function initLight() {
 50         //平行光
 51         light = new THREE.DirectionalLight(0xFFFFFF);
 52         light.position.set(0, 99, 0).normalize();
 53         scene.add(light);
 54         //环境光
 55         light2 = new THREE.AmbientLight(0x999999);
 56         scene.add(light2);
 57         //点光源
 58         light3 = new THREE.PointLight(0x00FF00);
 59         light3.position.set(300, 0, 0);
 60         scene.add(light3);
 61     }
 62 
 63     /* 显示对象 */
 64     var cube;
 65     function initObject(){
 66         // ASCII file
 67         var loader = new THREE.STLLoader();
 68 
 69         loader.addEventListener( "load", function ( event ) {
 70             var loading = document.getElementById("Loading");
 71             loading.parentNode.removeChild(loading);
 72             var geometry = event.content;
 73             //砖红色
 74             var material = new THREE.MeshPhongMaterial( { ambient: 0xff5533, color: 0xff5533, specular: 0x111111, shininess: 200 } );
 75             //纯黑色
 76 //            var material = new THREE.MeshBasicMaterial( { envMap: THREE.ImageUtils.loadTexture( "http://localhost:8080/textures/metal.jpg", new THREE.SphericalReflectionMapping() ), overdraw: true } ) ;
 77             //粉色 带阴影
 78 //            var material = new THREE.MeshLambertMaterial( { color:0xff5533, side: THREE.DoubleSide } );
 79             //灰色
 80 //            var material = new THREE.MeshLambertMaterial({color: 000000});    //材质设定  (颜色)
 81 
 82 
 83             var mesh = new THREE.Mesh( geometry, material );
 84 
 85             var center = THREE.GeometryUtils.center(geometry);
 86             var boundbox=geometry.boundingBox;
 87             var vector3 = boundbox.size(null);
 88             var vector3 = boundbox.size(null);
 89             console.log(vector3);
 90             var scale = vector3.length();
 91             camera.position.set(scale, 0, 0);
 92             camera.lookAt(scene.position);
 93             scene.add(camera);
 94 
 95 
 96             //利用一个轴对象以可视化的3轴以简单的方式。X轴是红色的。Y轴是绿色的。Z轴是蓝色的。这有助于理解在空间的所有三个轴的方向。
 97             var axisHelper = new THREE.AxisHelper(800);
 98             scene.add(axisHelper);
 99 
100             //周围边框
101             bboxHelper = new THREE.BoxHelper();
102             bboxHelper.visible = true;
103             var meshMaterial = material;
104             mainModel = new THREE.Mesh(geometry, meshMaterial);
105             bboxHelper.update(mainModel);
106             bboxHelper.geometry.computeBoundingBox();
107             scene.add(bboxHelper);
108 
109             //地板网格
110 //            var gridHelper = new THREE.GridHelper(500, 40); // 500 is grid size, 20 is grid step
111 //            gridHelper.position = new THREE.Vector3(0, 0, 0);
112 //            gridHelper.rotation = new THREE.Euler(0, 0, 0);
113 //            scene.add(gridHelper);
114 //            var gridHelper2 = gridHelper.clone();
115 //            gridHelper2.rotation = new THREE.Euler(Math.PI / 2, 0, 0);
116 //            scene.add(gridHelper2);
117 //            var gridHelper3 = gridHelper.clone();
118 //            gridHelper3.rotation = new THREE.Euler(Math.PI / 2, 0, Math.PI / 2);
119 //            scene.add(gridHelper3);
120 //
121 //            var grid = new THREE.GridHelper(300, 40, 25, [0, 0, 1], 0x000055, 0.2, true, "#FFFFFF", "left");
122 //            scene.add(grid);
123 
124 
125             var x = (boundbox.max.x - boundbox.min.x).toFixed(2);
126             var y = (boundbox.max.y - boundbox.min.y).toFixed(2);
127             var z = (boundbox.max.z - boundbox.min.z).toFixed(2);
128 
129             console.log(x);
130             console.log(y);
131             console.log(z);
132             console.log(boundbox);
133 
134             mesh.position.set(0,0,0);
135 //            mesh.position.x = scene.position.x;
136 //            mesh.position.y = scene.position.y ;
137 //            mesh.position.z = scene.position.z;
138             scene.add(mesh);
139 
140 
141             renderer.clear();
142             renderer.render(scene, camera);
143         } );
144         loader.load( "3dfile/莫比乌斯环.STL" );
145     }
146 
147     //控制
148     var effect;
149     var controls;
150     function initControl(){
151         effect = new THREE.AsciiEffect( renderer );
152         effect.setSize( WIDTH, HEIGHT );
153         controls = new THREE.TrackballControls( camera,renderer.domElement);
154     }
155 
156     function animate() {
157         requestAnimationFrame( animate );
158         controls.update();
159         effect.render( scene, camera );
160     }
161 
162     function threeStart() {
163         initThree();
164         initScene();
165         initCamera();
166         initLight();
167         initObject();
168         initControl();
169         animate();
170     }
171 </script>
172 <body onload="threeStart()">
173 <div id="Loading" style="color:#fff">Loading...</div>
174 </body>
175 </html>

哦 我的文件结构

如果想要所有文件的小伙伴 给我留言即可 

 

补充一点,由于在显示模型的方法里我加入了 bboxHelper = new THREE.BoxHelper() 所以我们可以获取到模型的 X Y Z三轴的尺寸 也可以当作 模型的长宽高 

当前文章:http://hnhdqp.com/content/201810/20/content_45676.html

发布时间:2018-11-17 14:58:31

喜马拉雅怎么录音赚钱 学生的钱好赚 免费网络兼职平台 试赚米app qq游戏捕鱼赚钱 家庭主妇在家学什么 适合工薪族怎么投资理 赶集网找工作兼职厨师

编辑:石石

相关新闻

贴吧事件折射中国商业社会乱象 百度有责任扛下肃清重担

2018-11-17 10:12:39

石家庄敬屎广告传媒有限公司

北京新能源车充电桩22工作日建成 物业需配合

2018-11-17 15:47:26

喀什浊诰电子有限公司

府谷县扶贫办推进“1122”精准扶贫工程 打造务实型机关

2018-11-17 14:28:10

毕节计暇戏租售有限公司

比伯专辑遭中东地区抵制 触犯宗教禁忌

2018-11-17 13:14:03

陵水谂液汽车用品有限公司

热门推荐

  • MWC2018:英特尔宣布为2020年东京奥运会部署5G技术
  • 思科公布第二财季财报:巨亏88亿美元
  • smart fortwo纯电动版官图发布:1月15日首发
  • 人人吃鸡:微软宣布每台X1X主机都免费送《绝地求生》
  • 美国佛州警方发现一持枪男子 或与连环杀人案有关
  • 交通部:全国新能源公交车年内将达20万辆
  • 《黑色沙漠》手游捏脸功能演示视频公开
  • 解谜冒险游戏《不可思议之梦蝶》内容揭秘 预计2018上线
  • 且用且珍惜!盘点那些已经消失或即将消失的家电
  • 安倍抢头槽第一个见到特朗普 却被“放了鸽子”
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:看什么新闻赚钱多 手机游戏赚钱排行榜
  • 怎样做主播赚钱 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 网上赚钱的最好途径 怎么做网赚 微信漂流瓶网赚任务 手机赚钱软件