2017-08-29 60 views
3

我們正在使客戶端在頁面加載時檢索對象狀態(這會導致模型中的「待定」對象變成不同的顏色)。然後,我們會調查更新以更新着色(首先:掛載對象在查看器加載時變爲着色,然後我們繼續輪詢以再次檢查和更改狀態,以使Forge以不同的顏色呈現這些顏色並存儲其舊顏色/材質。當輪詢接收的改變一個對象不再是彩色的,它告訴僞造再次使用舊的顏色/材質在Forge中更換材質

問題: 我們發現了什麼問題,但我們無法將不知道如何解決這個問題,問題是Forge中的材料更換後不再起作用,它只能在大約3秒左右的時間內工作(材料用於顯示顏色)

但是,設置o即使在第一〜3秒之後,它仍然可以工作(顯示覆蓋層而不是顯示顏色的材質)。 這不是我們想要實現的。這看起來沒有優化,因爲疊加層將通過一切來顯示。

然而,這些材料似乎是「鎖定」的,因爲在第一〜3秒之後它們不能再被改變。看起來他們沒有刷新或者什麼東西

在這些例子中,我們發現他們使用viewer.impl.invalidate(true)來刷新Forge查看器,但是這在〜3秒後沒有做任何事情。

我們還嘗試了viewer.impl.invalidate(true,true,true)的每種組合,並將material.needsUpdate設置爲true,並嘗試重新渲染整個場景。

我們也發現這個:https://github.com/mrdoob/three.js/issues/790,但我們無法在Forge中找到這樣做的好方法,我們嘗試了viewer.requestSilentRender(),但它也沒有做任何事情。

無論如何,我們已經嘗試了所有我們可以想出的,並可以在網上找到材料的工作,但沒有什麼區別。 我們正在尋找能夠看到Forge作品如何看到材料代碼做錯了什麼的經驗豐富的人。

至於內容,這裏是所有你需要明白髮生了什麼代碼: DROPBOX LINK

這裏是「的index.html」文件的一小部分,設置顏色:

try 
{ 
    viewer.restoreAllColorOverlays(); //for materials instead of overlays: viewer.restoreAllColorMaterials(); 
    $.each(colors, function(color, selectionIds) 
    { 
     viewer.setColorOverlay(selectionIds, color); //for materials instead of overlays: viewer.setColorMaterial(selectionIds, color); 
    }); 
} 
catch(error) 
{ 
    console.error(error); 
} 

回答

0

我不知道你如何實現你的應用程序,所以我只告訴我在你的代碼中找到了什麼。如果你想解決你所處理的問題,你可以考慮提供一個可複製的案例,證明我會很樂意把它傳遞給我們的開發團隊。那些以下項目應該在可重複的情況下:

  1. 簡短的確切描述你想要達到的目標。你觀察到的行爲與你期望的行爲,以及爲什麼這是一個問題。
  2. 一個完整又最少的樣品源模型來運行測試。
  3. 一個完整又最小Forge app可以運行,並用簡單的程序調試,分析其行爲,住在樣本模型。
  4. 一個完整但最小的純​​3210可以運行和演示你想要的着色效果。注意。 Forge Viewer正在使用r71 three.js
  5. 重現問題的詳細逐步說明,例如挑哪一個元素,推出什麼命令等

如果你的重現性情況下不能在這裏公開張貼,請發送到[email protected]刪除敏感數據或信息發送之前。

=== 我的東西在你的代碼中發現:

我發現這裏有一些錯誤的類型和失蹤操作在ColorMaterial擴展。材料的顏色屬性應該是THREE.Color的一種類型。這裏是我的修改:

Autodesk.Viewing.Viewer3D.prototype.setColorMaterial = function(objectIds, color) 
    { 
     if(!(color instanceof THREE.Color)) throw 'Invalid argument: Color'; 

     var material = new THREE.MeshPhongMaterial 
     ({ 
      color:  color, 
      opacity: 0.8, 
      transparent: true 
     }); 

     viewer.impl.matman().addMaterial('ColorMaterial-' + new Date().getTime(), material, true); 

     // ........... 
    }; 

其結果是在這裏: enter image description here

ColorOverlay擴展,該類型的材料顏色屬性的也是錯誤的,它應該是一個類型的THREE.Color了。將其更改爲THREE.Color應該可以正常工作。此外,覆蓋圖覆蓋了3D對象,因此您應該聯繫viewer.hide()和您的setColorOverlay()。否則,它看起來不像透明物體。

沒有牆的hidding 3D對象:在牆上的 enter image description here

隱藏3D對象: enter image description here

+0

.Hi,非常感謝您的回覆。我們已經採取了您的回覆第2部分中所述的步驟。可悲的是,它並沒有導致這些材料的工作,但它使覆蓋層現在看起來好多了。我們非常有興趣通過[email protected]與我們分享我們的項目 – artobii