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

时间:2016-02-09 16:49:22

标签: javascript three.js 3dsmax

我正在尝试使用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;

                        }

                    } );

使用blender模型一切正常但是每当我尝试使用自己的自定义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

2 个答案:

答案 0 :(得分:5)

我目前遇到了同样的错误:

Error: Unexpected line: s 2

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

我跟随@ 2pha的link与丢失的对象名称相关,虽然这是真的,但在手动插入对象名后,我仍然遇到了“意外行”错误。

我的解决方案虽然不是针对发生此错误的原因的具体修复,但是在Blender(https://www.blender.org/)中导入.obj文件,并立即导出.obj文件。看来由Blender v2.76(sub 0)OBJ Exporter创建的.obj文件可以使用Three.js THREE.OBJLoader导入而无需额外的手工劳动。

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

更新:我已提交解决此问题的拉取请求:https://github.com/mrdoob/three.js/pull/8118,同时您可以修改smoothing_pattern以支持多个数字:

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

答案 1 :(得分:0)

我遇到了与 3ds Max Wavefront OBJ Exporter v0.97b 以及最新版本( 74 )threejs完全相同的错误。

我没有解决方案,但我可以看到问题在于,当OBJLoader.js解析obj文件时,它会查找格式为\^s\s+([01]|on|off)\的平滑组,这些组只匹配&#34; s 1&#34 ;或&#34; s 0&#34;因此会在&#34; s 2&#34;以上。 (您可以使用https://regex101.com检查正则表达式,以防万一我无法阅读正则表达式;))

在使用Blender导入然后导出时,它可以正常工作,因为Blender只会将其导出为&#34; s&#34;并且&#34;关闭&#34;作为参数。