三維引擎匯入obj模型不可見總結

netcy發表於2021-12-16

最近有客戶試用我們的三維平臺,在匯入模型的時候,會出現模型全黑和不可見的情況。上一篇文章說了全黑的情況。此文說下不可見的情況。

經過測試,發現可能有如下兩種情況。

匯入的模型不在鏡頭視野內

匯入的模型不在鏡頭視野內,所以看不到模型。有可能模型就不在視野內,也有可能模型位置超過了鏡頭的far引數值。 這種情況下,調整鏡頭的引數(包括position,center,far等)。

模型的建模中心不在幾何中心

比較隱蔽的一種情況是模型的建模中心點不在模型本身的幾何中心,建模中心在模型自身之外,此時模型的位置雖然都在鏡頭的視野之內,但是模型的所有頂點都在鏡頭視野之外。 這種情況下,可以檢視下模型boudingbox的center值,如果center值不在偏離(0,0,0) 很多,就說明模型的建模中心和模型本身的幾何中心很遠。 這種情況下需要建模師調整模型,把建模中心調整到幾何中心(至少附近)。

模型尺寸太小

還要一種情況是模型的尺寸太小,而鏡頭位置比較遠,此時鏡頭雖然能夠看到模型,但是由於太小,所以人眼可能看不到。 這種情況下,可以檢視模型的boudingbox的size值,看看大小如何,如果太小,建議讓建模人員進行調整,把尺寸增加即可。

模型全透明

在匯入obj模型的時候,有的時候會出現模型全透明的情況,這種情況下是因為,mtl檔案中的tr引數設定為了1. tr等於1的時候,解析的時候會把不透明度設定為1-tr,程式碼如下:

case 'tr':
    n = parseFloat( value );
       if ( this.options && this.options.invertTrProperty ) n = 1 - n;
       if ( n > 0 ) {
        params.opacity = 1 - n;
        params.transparent = true;

        if(params.opacity === 0) {
            console.warn( "opacity is 0");
        }

    }

    break;

可以直接手動修改mtl檔案,把tr相關的引數設定給去掉,也可以讓建模人員匯出模型的時候不匯出tr引數。

結語

修改後的效果,如下圖:

image.png

如果對視覺化感興趣,可以和我交流,微信541002349。 關注公號“ITMan彪叔” 可以及時收到更多有價值的文章。

相關文章