@Radio 是正确的。您的缠绕顺序是向后的,这会导致面指向错误的方向。由于对象上的螺纹,似乎某些面是正确的。
这是一个小提琴(下面的代码)演示了一种在不改变原始对象的情况下更正缠绕顺序的方法:https ://jsfiddle.net/TheJim01/3nr7rakk/
我只是添加了一个函数,它递归加载器返回的对象,并强制所有材质绘制三角形的背面,而不是正面。这只会发生一次,所以在小几何体的情况下它可能已经足够好了,但是当你使用更大的几何体集时,你会看到速度变慢,如果它们足够大,复杂的对象可能会抛出堆栈错误。
我没有做的一件事(作为提问者的练习)是使用最新的 THREE.js 进行测试。JSFiddle 使用了非常老的 THREE.js 版本(JSFiddle 使用的是 r54,目前是 r80)。我建议将小提琴配置为使用最新版本并重试,或者使用最新版本在本地托管代码。VRML 加载程序可能会修复您遇到的问题。
您可以使用此页面作为如何将 JSFiddle 链接到最新的 THREE.js 的示例:http: //jsfiddle.net/TheJim01/kb7e88vr/随意 fork 和修改它。
更新代码:
我的代码与@75th Trombone 的代码相同,除了我添加/更改了以下内容:
function sideReplacer(obj){
if(obj.material){
obj.material.side = THREE.DoubleSide;
}
if(obj.children && obj.children.length > 0){
for(var i in obj.children){
sideReplacer(obj.children[i]);
}
}
}
loader.load('https://75thtrombone.com/links/stack-exchange/2016-09/' + model, function(geometry) {
sideReplacer(geometry);
scene.add(geometry);
});