我正在尝试使用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
答案 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;作为参数。