Three.js .obj 加载程序无法与 3Ds Max .obj 一起使用

Three.js .obj loader not working with 3Ds Max .obj

我正在尝试使用 objLoader 将 .obj 加载到 Three.js。

var loader = new THREE.OBJLoader( manager );
                loader.load( 'obj/gate-2.obj', function ( object ) {

                    object.traverse( function ( child ) {

                        if ( child instanceof THREE.Mesh ) {

                            child.material.map = texture;

                        }

                    } );

使用搅拌机模型一切正常,但是每当我尝试使用我自己的自定义 3Ds Max 模型时,.obj 不会在浏览器中加载并发出错误。我导出错误还是 Three.js 不支持 3Ds Max .obj 导出器?

错误信息

    Error: Unexpected line: s 2
parseOBJLoader.js:339
(anonymous function)OBJLoader.js:24
(anonymous function)three.min.js:376:387

我目前遇到了完全相同的错误:

Error: Unexpected line: s 2

使用由 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware 导出的 .obj 文件。

我已经按照@2pha 的 与丢失的对象名称相关,虽然这是真的,但在手动插入对象名称后,我仍然遇到 'Unexpected line' 错误。

我的解决方案是在 Blender (https://www.blender.org/) 中导入 .obj 文件,并立即导出一个 .obj 文件,虽然不是针对此错误发生原因的具体修复。似乎可以使用 Three.js THREE.OBJLoader.

导入由 Blender v2.76 (sub 0) OBJ Exporter 创建的 .obj 文件,无需额外的人工劳动

我希望有一天 Three.js 或 3ds Max 会纠正这个错误(它似乎正在为 Three.js here 工作),但与此同时没有人有时间了。

更新: 我已经提交了一个 pull request 来解决这个问题:https://github.com/mrdoob/three.js/pull/8118,同时你可以修改你的 smoothing_pattern 来支持多个位数:

Line 220: var smoothing_pattern = /^s\s+(\d+|on|off)/;

我在使用 3ds Max Wavefront OBJ Exporter v0.97b 和最新版本 (74) 时遇到了完全相同的错误三个。

我没有解决方案,但我可以看到问题是当 OBJLoader.js 解析 obj 文件时,它会查找 \^s\s+([01]|on|off)\ 格式的平滑组,它只匹配 "s 1" 或 "s 0",因此会在 "s 2" 及以上抛出错误。 (你可以用 https://regex101.com 检查正则表达式,以防像我一样看不懂正则表达式;))

它在使用 Blender 导入然后导出时有效,因为 Blender 将仅使用 "s 1" 和 "s off" 作为参数导出它。