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" 作为参数导出它。
我正在尝试使用 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 的
我的解决方案是在 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" 作为参数导出它。