1. 首页 > 电脑手机 >

threejs加载obj模型 threejs加载3d模型

Three.js中加载三维模型时怎么设置模型坐标归零

不得不承认,这是threejs长久以来的bug,换了好多版本,一直没有处理这个bug,

threejs加载obj模型 threejs加载3d模型threejs加载obj模型 threejs加载3d模型


在早期版本中我们可以用如下方法去实现,

objMesh.centroid = new THREE.Vector3();

for (var i = 0, l = geom.vertices.length; i < l; i++) {

objMesh.centroid.add(geom.vertices[i].clone());

}objMesh.centroid.divideScalar(geom.vertices.length);

var offset = objMesh.centroid.clone();

objMesh.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-offset.x, -offset.y, -offset.z));

objMesh.position.copy(objMesh.centroid);

怎么把3dax导出的obj转换成js啊。。。。然后用到three.js里面??

如果是在windows下,就需要有:

1. python-2.6.msi (python运行库,去太平洋下就行)

2. convert_obj_three.py (obj转js脚本,也能下到,没有的话我可以传给你)

安装好python2.6.msi 并保证 python convert_obj_three.py 和 model.obj(模型文件)都在 D:\ , 然后 点开始>运行>把下面的命令贴到指令框内。并点确定就OK了。

C:\Python26\python d:\convert_obj_three.py -i d:\model.obj -o d:\model.js

ThreeJS渲染一个.obj三维模型文件(Vue)

先来看一个效果:

近有个项目需要实现三维模型的web端渲染,以前虽然也做过类似的项目,单是两个项目一个是ja Application,一个是安卓结合,两个我都只参与到的建模环节,所以知道三维模型文件的大概结构,要想在web端实现渲染,首先要做的就是读取这些模型文件,对里面的点、面、法线、材质进行逐行解析。

各种对比后,发现了ThreeJS。它不仅可以解析obj模型文件,还可以解析大部分市场上有的模型格式文件。

npm 安装后,在node_modules/three/examples/j/loaders/目录下可以看到它支持的模型格式。

PS:demo中使用了vue语法。

组件注销前,解绑全局事件、停止刷新。beforeDestroy()

效果如下:

PS:鼠标移入时,先暂存材质的颜色,移除后再恢复。实现过程有bug,getHex()未得到有效的颜色,所以恢复不到原有的材质颜色,正在查找原因。如有有哪位大神发现问题,请赐教。

优化内容:

2.页面组件销毁时,解绑鼠标事件

3.组件销毁时,清除缓存数据

three.js如何提高模型加载速度

方法如下:

二进制格式:

使用不同文件格式,文件的大小会有所不同,如果同一个模型,导出二进制.fbx大小要比文本格式的.obj文件要小1~2倍。常见的GLTF格式可以是文本格式,也可以使二进制格式,为了更好的传输性能可以选择二进制格式,.glTF打包转化为.glb二进制文件。

减面和法线贴图:

一般3D美术导出模型的时候,会进行减面作,并导出模型的法线贴图,比如你只是加载一个机械零件模型(非批量),你可以让3D美术进行减面然后导出法线贴图。

这样的话在不影响曲面显示质量前提下,减少模型三角形面数,一方面可以降低模型文件大小提高网络传输性能,另一方面可以提高threejs渲染模型的渲染性能。

加载进度条:

因为Web3D项目加载时间相对普通web页面时间比较长,如果用户一直等着,web页面没有什么反应,可能会关掉,这种情况下,可以在web页面放置一个进度条实时显示模型文件加载进度。

如何获得三维模型文件的加载进度可以查看threejs文档关于FileLoader类的介绍,至于web进度条,可以通过普通HTML和CSS代码去实现,然后和threejs加载进度数据进行绑定即可。

动态分批加载:

如果一个场景中,有多个网格模型模型,比如室内设计效果展示,里面有沙发、椅子、电视等三维模型,这时候把这些模型分别单独建立一个文件,threejs可以按照一定的顺序分别先后加载这些单独的网格模型文件,然后插入到场景中。

这样的话,用户可以以快速度查看到场景中的部分模型,不用一直等待,没有什么反应,用户体验更好。

three.js加载3ds或obj模型,如何实现鼠标拖拽等功能?

【OrbitControls】

// Set to false to disable this control

//鼠标控制是否可用

this.enabled = true;

// "target" sets the location of focus, where the object orbits around

//聚焦坐标

this.target = new THREE.Vector3();

// How far you can dolly in and out ( PerspectiveCamera only )

//小相机移动距离(景深相机)

this.minDistance = 0;

this.maxDistance = Infinity;

// How far you can zoom in and out ( OrthographicCamera only )

//小鼠标缩放大小(正交相机)

this.minZoom = 0;

this.maxZoom = Infinity;

// How far you can orbit vertically, upper and lower limits.

// Range is 0 to Math.PI radians.

//仰视角和俯视角

this.minPolarAngle = 0; // radians

this.maxPolarAngle = Math.PI; // radians

// How far you can orbit horizontally, upper and lower limits.

// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].

//水平方向视角限制

this.minAzimuthAngle = - Infinity; // radians

this.maxAzimuthAngle = Infinity; // radians

// Set to true to enable damping (inertia)

// If damping is enabled, you must call controls.update() in your animation loop

//惯性滑动,滑动大小默认0.25

this.enableDamping = false;

this.dampingFactor = 0.25;

// This option actually enables dollying in and out; left as "zoom" for backwards compatibility.

// Set to false to disable zooming

//滚轮是否可控制zoom,zoom速度默认1

this.enableZoom = true;

this.zoomSpeed = 1.0;

// Set to false to disable rotating

//是否可旋转,旋转速度

this.enableRotate = true;

this.rotateSpeed = 1.0;

// Set to false to disable panning

//是否可平移,默认移动速度为7px

this.enablePan = true;

this.keyPanSpeed = 7.0; // pixels moved per arrow key push

// Set to true to automatically rotate around the target

// If auto-rotate is enabled, you must call controls.update() in your animation loop

//是否自动旋转,自动旋转速度。默认每秒30圈

this.autoRotate = false;

this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60

// Set to false to disable use of the keys

//是否能使用键盘

this.enableKeys = true;

// The four arrow keys

//默认键盘控制上下左右的键

this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };

// Mouse buttons

//鼠标点击按钮

this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };

我在3dmax里面导出了一个obj模型,但是用three.js无法载入,这是什么原因?

three.js 导出obj格式文件,首先,如果你的三维模型比较大,模型范围即坐标x,y,z比较大,记得在导出时候将坐标缩放到一定比率比如0.001。这一点是经验,真的感觉就是three.js的bug。据说是因为thre.js导出obj,如果坐标太大,three.js载入会进行浮点数转换,可能会导致位置不正确。这个是之前导出这种比较大的项目,一点教训。然后导出obj和mtl以及贴图文件,然后使用three.js 配到的objLoader和mtlLoader进行加载。

微信小程序ThreeJs加载3D模型

微信小程序使用ThreeJs需要使用库 threejs-miniprogram ,API和原生ThreeJS基本一样,很好上手。喜欢数字孪生或者游戏的朋友,强烈学习ThreeJs。该库入门简单,有很多的demo可供参考,文档(包含中英文)也比较详细。有用ThreeJS做一个动物世界,模拟原始森林里各种各样的有趣的可爱的动物,包括它们声音和故事。有兴趣的或想加入这个的朋友可以在下面留言。

添加canvash画布,设置宽度,高度设置为屏幕高度减去状态栏高度和导航栏高度。

导入threejs,并创建threejs变量传入模型中,方便使用该变量。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息