🌓
搜索
 找回密码
 立即注册

使用Three.js渲染Sketchup导出的dae

作者 2024-7-12 08:46:04 42923
打算做个轮盘游戏,直接上3D吧。
   
  第一步:制作模型
  3DMax和Maya下载和学习比较麻烦, 就用之前的Sketchup来试试吧。
   
  最后效果图:
  
1.png

  俯视图
   
  
2.png

  仰视图
   
  制作步骤:
  1 先画一个圆
  2 从圆心到圆边到中心轴,再到圆心画一个直角三角形(直接三角形对应圆椎体, 梯形对应椎体,任意形状都可以)
  3 选择圆形的边
  4 选择Tool -> Follow Me 
  5 点选绘制的直角三角形即可。
   
  PS:
  如果你是免费版不是PRO版的话,在导出的时候请选择导出Google Earth File(*.kmz),然后将后缀名改为zip之后解压,使用解压后的models/*.dae文件;
  这里的dae文件和直接导出Collada File(*.dae)在尺寸和保存的数据方面差别都比较大,以下是截取同一个模型不同导出方式dae文件不同点的部分对比:
  
3.png

   
  参考链接:
  https://zhidao.baidu.com/question/169212087.html?fr=iks&word=sketchup+%BB%AD%D4%B2%D7%B6&ie=gbk
   
  第二步:使用Three.js渲染导出的DAE
  在Three.js中使用Collada(即.dae)文件的话,首先得要用到 ColladaLoader.js。
  官方参考文档:#Reference/Loaders/ColladaLoader
  但是这个ColladaLoader.js并不包含在three.js文件里面,需要你自己下载然后添加进来。
  这个文件中three.js的repo里面的examples/js/loaders/ColladaLoader.js
  如果你检出了three.js的源代码的话,在上面的位置就可以找到这个文件了。
  然后在你的html里面载入这个文件就可以了。
   
  其实一开始照着官方的文档去加载和展示dae是显示不出来的,
  搜索了很多相关知识后才找到如下方式可以显示出来,
  可能是camera视角原因和光照原因。
  最后可以正常显示的主文件如下:
   
  1. var scene, camera,renderer, rouletteScene;
  2. function startGame(){
  3.     console.log('Game started...');
  4.     scene = new THREE.Scene();
  5.     aspect = window.innerWidth/window.innerHeight;
  6.     D = 8;
  7.     camera = new THREE.OrthographicCamera(-D*aspect, D*aspect, D, -D, 1, 1000);
  8.     //camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight,0.1,200)
  9.     renderer = new THREE.WebGLRenderer();
  10.     renderer.setSize(window.innerWidth, window.innerHeight);
  11.     document.body.appendChild(renderer.domElement);
  12. /*
  13.     var spotLight = new THREE.SpotLight( 0xffffff );
  14.     spotLight.position.set( 100, 1000, 100 );
  15.     spotLight.castShadow = true;
  16.     spotLight.shadow.mapSize.width = 1024;
  17.     spotLight.shadow.mapSize.height = 1024;
  18.     spotLight.shadow.camera.near = 500;
  19.     spotLight.shadow.camera.far = 4000;
  20.     spotLight.shadow.camera.fov = 30;
  21.     scene.add( spotLight );
  22. */
  23.     var light = new THREE.DirectionalLight( 0xffffff, 2 );
  24.     light.position.set( 100, 20, 15 );
  25.     scene.add( light );
  26.     camera.position.set(100,100,100);
  27.     camera.lookAt(new THREE.Vector3(0,0,0));
  28.     camera.rotation.z = 5/6*Math.PI;
  29.     var loader = new THREE.ColladaLoader();
  30.     loader.load("assets/models/roulette.dae", function( collada ){
  31.         rouletteScene = collada.scene;
  32.         rouletteScene.scale.set(0.1,0.1,0.1);
  33.         rouletteScene.position.set(5,5,5);
  34.         scene.add(rouletteScene);
  35.     },
  36.     function( xhr) {
  37.         console.log((xhr.loaded/xhr.total * 100)+"% loaded");
  38.     });
  39.     render();
  40. }
  41. function render(){
  42.     requestAnimationFrame(render);
  43.     renderer.render(scene, camera);
  44.     if( rouletteScene ){
  45.         rouletteScene.rotation.z++;
  46.     }
  47. }
复制代码
   html文件是这样的:
   
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="utf-8">
  5.     <title>Roulette</title>
  6.     <style type="text/css">
  7.         body {
  8.             margin: 0;
  9.         }
  10.         canvas { width: 100%; height: 100% }
  11.     </style>
  12.     <script type="text/javascript" src="./libs/three.js"></script>
  13.     <script type="text/javascript" src="./libs/ColladaLoader.js"></script>
  14.     <script type="text/javascript" src="./js/game.js"></script>
  15. </head>
  16. <body οnlοad="startGame();">
  17. </body>
  18. </html>
复制代码
    
  运行效果:
  
4.png

   
  虽然可以正常运行,但是webgl在报警告:
  [.Offscreen-For-WebGL-04A15210]RENDER WARNING: Render count or primcount is 0.
  断点看来一下
  three.js 25611行
   
  1. renderer.render( drawStart, drawCount );
复制代码
   发现他在每6帧的时候会drawCount = 0一次:
  
5.png

  具体什么原因还在查看中。
   
  参考链接:
  1 http://stackoverflow.com/questions/16946906/how-to-export-sketchup-models-to-three-js
  2 http://bl.ocks.org/nitaku/1d673374f890d833b421
  转载于:https://www.cnblogs.com/adoontheway/p/6100754.html

来源:SketchUpBBS
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

扫一扫

随机推荐

最新主题

281 回复

前排支持下
凡尘
2024-7-8 22:04:53
支持楼主发帖!
支持作者!
牝窈
2024-7-11 21:05:27
不错不错,很好哦
认真看完了
对我非常有用
帮助顶上去!
相当不错
帮你顶下哈!!
找到好贴不容易,我顶你了,谢了
sam9868
2024-7-11 22:58:30
找到好贴不容易,我顶你了,谢了
支持楼主发帖!
小手一抖,积分到手!
帮助顶上去!
vipljl
2024-7-12 00:55:27
感谢分享!
帮助顶上去!
路过,学习下
帮帮顶顶!!
没看完~~~~~~ 先顶,好同志
顶一下
LZ真是人才
路过,学习下
找到好贴不容易,我顶你了,谢了
回复让大家看到!
好帖
鼓励一下
tjludi
2024-7-12 04:59:20
帮帮顶顶!!
有竞争才有进步嘛
天岖
2024-7-12 05:43:11
我是个凑数的。。。
惘傻
2024-7-12 06:18:36
我是个凑数的。。。
LZ说的很不错
支持一下
支持作者!
顶上去
帅林
2024-7-12 08:29:40
没看完~~~~~~ 先顶,好同志
鼓励一下
LZ说的很不错
高级模式
游客
返回顶部