我用3DS Max製作了一個建築模型,其中每個房間都是一個修改過的立方體,我用OBJMTLLoader用他自己的MTL加載OBJ文件。 問題是我需要根據用戶要求強調某些房間。如何訪問裝有OBJMTLLoader的OBJ的不同部分?
我使用dat.gui來顯示一個菜單,用戶可以選中/取消選中房間來標記它們(我想我會改變房間的大小或marterial以強調它)。
這是我的裝載機的代碼
var loader = new THREE.OBJMTLLoader();
loader.load('models/ed.obj', 'models/textures/ed.mtl',
//onLoad()
function (object){
contenido = object;
contenido.position.set(0,0,0);
contenido.position.y = -80;
contenido.name = 'edificio';
scene.add(contenido);
return contenido;
} //and other onLoad, and onError stuff
我可以用整個模型玩,我有一個透明功能調整透明度爲dat.gui欄(一個叫opciones.Opacidad)
contenido.traverse(function(object) {
if(object.material) {
object.material.opacity = opciones.Opacidad;
object.material.transparent = true;
}
而且它工作正常,但probblem來時,我嘗試訪問幾何的內部立方體注意到他們在以線框(舉例來說)我使用:
contenido.getObjectByName("RoomNameIn3DSMax").material.wireframe=true;
爲了以線框查找並顯示它,因爲OBJ文件使用其3DS Max名稱命名每個模塊。但它不起作用,它看起來像項目被找到,因爲我沒有得到任何錯誤,但它不會出現在線框中,當我使用另一個房間名稱,有時程序顯示線框很多的東西,可以包括所請求的一個或不是,它發現的另一個「未定義」我認爲這與OBJMTLLoader創建的組有關。
我也試過
contenido.traverse(function (child) {
if (child.name == "NameInOBJor3DSMax") {
child.material.wireframe = true;
}
})
但結果是一樣的。
所以我的問題是,如何訪問裝載了OBJMTLLoader的我的模型的內部模塊?正如你所看到的,我試圖使用「Object3D」方法來訪問整個模型的內部立方體,我是否正確地做到了這一點?我可以提供所有的代碼和文件,如果需要的話,你可以在這裏看到我的問題的方法:
3DBuilding link 你也可以看到有所有的代碼;)
感謝您的關注,我希望有人能幫我。
編輯:當我做:
scene.getObjectByName("nameOfModule").material.color.set(0xff0000);
此言後紅燈或者只是:.material.wireframe = TRUE;它顯示了很多未被實現的事物。當我使用scene.getObjectById(ObjectId,true);但它不顯示DOM樹中對象的名稱。
我想使用另一個導出工具,看看問題是否只是OBJ出口商。這真的很煩人。
下面是一些問題的屏幕。
我嘗試備註:
,你可以看到,它只是一個編輯框
什麼說:
如果我們去到OBJ文件,我們可以看到像這樣:
#
# object SDHAE001
#
v 106.4733 84.7697 -94.9228
... (more vertices)
v 106.3747 76.8453 -96.3784
# 16 vertices
vn 0.0000 1.0000 -0.0000
...(more normals)
vn -0.9991 0.0046 0.0425
# 14 vertex normals
#and here the group of faces fot that object (Using triangles)
g SDHAE001
usemtl wire_115115115
f 10663//5549 10664//5549 10665//5549
...(more triangle faces)
f 10676//5559 10663//5561 10678//5562
# 22 faces
正如你所看到的,3DS Max是crea ting我的幾何體的多邊形組,並且據我所知,OBJMTL忽略「g」組,所以當我嘗試去評論某些東西時,它會評論很多東西......嘗試與其他導出器...手動解析OBJ文件會這麼討厭...
EDITED AGAIN
我一直在尋找解決方案,並obj利用3DS MAX中產生確定,但是當我去探索DOM Tree的,我可以看到三個.Mesh作爲一個數組,其中只有一些索引對具有他自己的名字,並且奇數索引具有某種幾何形狀,如果沒有任何名稱賦值,我無法控制它,出於某種奇怪的原因,有一些組在幾何實例中創建的「頂點」沒有任何意義,我上傳了一些屏幕和OBJ/MTL文件,使我的問題更清晰:
看看這個,我會嘗試現在評論一個名爲「Conserjeria」的模塊。這是一個位於DOM樹模塊:
這裏,在第一列上我們可以看到,第一個問題,我的OBJ(所有幾何)文件只有約298個對象,所以爲什麼有1056個Mesh對象?這不是很相關,因爲他們大多數都是空名。
問題二,你可以看到幾何屬性「Conserjeria」房間裏的第二列,我認爲這裏是產生問題... 在第三列,我告訴你,怪「頂點」數組爲我的「Conserjeria」對象。我說奇怪,因爲它是由6272個索引組成的... 什麼都沒有在我的OBJ文件中有6272個頂點...你可以看到OBJ here,你可以找到Conserjeria如果你想看到它的結構( 52v,11vn,80f)。可能這就是爲什麼當我嘗試僅評論某些對象時,它會評論他們中的很多?
我也試了一個3盒簡化模型,其中2個是正確的,但第一個不是,看看(用複選框來評論他們)我無法想像爲什麼這是否發生? (也有當有現場只有3個立方體數組中7 THREE.MESH指數...)
只有一句話我的房間任何幫助嗎?如果需要,我可以分享我所擁有的一切(代碼,OBJ,MTL,3ds ...)
謝謝大家誰想要幫助我。
我添加了關於我的具體問題的信息,並且「g」解析在OBJMTLLoader中是錯誤的(就像在OBJLoader中一樣)。我還添加了網格幾何的「頂點」問題。我希望現在有人可以幫助我...... @AVGP – soiber
這是一個嚴重的記錄問題! – FutureCake
謝謝,至少通過爲每個模塊創建新的特定材料來糾正問題。三,js解析MTL,並採用與同一對象相同材質的對象,爲它們分配相同的UUID標識符,而不管OBJ文件的內容如何(OBJLoader返回單個網格對其子節點的引用丟失)。 – soiber