我正在加載一堆obj模型,這些模型很合理,每個模型都有120個奇怪的紋理。它們加載得很好並最終渲染,但是當它們第一次被繪製時,幀速率通過地板下降,並且物體的材質顯示爲黑色,直到紋理加載。是否可以強制模型在WebGL中完全加載?
有沒有一種方法可以確保模型及其紋理在顯示之前完全加載,或至少查詢是否準備好繪製? 另外,有沒有辦法來鼓勵紋理加載?看起來他們不會加載,直到對象被繪製。
感謝
我正在加載一堆obj模型,這些模型很合理,每個模型都有120個奇怪的紋理。它們加載得很好並最終渲染,但是當它們第一次被繪製時,幀速率通過地板下降,並且物體的材質顯示爲黑色,直到紋理加載。是否可以強制模型在WebGL中完全加載?
有沒有一種方法可以確保模型及其紋理在顯示之前完全加載,或至少查詢是否準備好繪製? 另外,有沒有辦法來鼓勵紋理加載?看起來他們不會加載,直到對象被繪製。
感謝
var images = [/*..image list...*/];
var loaded = [];
var numReady = 0;
for(var i= images.length-1; i>=0; i--) {
loaded[i] = new Image();
loaded[i].src = images[i];
loaded[i].onload = function() {
numReady++;
};
}
// in render loop
if(numReady==images.length) {
//now ready to render
}
基本上,只要檢查有多少紋理在每一幀都加載,而當他們終於加載你準備做圖。
我正在使用的加載器是OBJMTLLoader,它反過來使用MTLLoader加載材質和引用的紋理。有幾個級別的回調加載和它看起來沒有什麼可以跟蹤你描述的紋理數量。 我會研究添加代碼來管理它。 謝謝 – FitzBeezley
那麼,無論哪個裝載器,它都會從Image對象的'onload'中進行一些回調,以便需要查找並檢查是否所有紋理都已準備好。這個答案顯示了一般原則。祝你好運。 :) –
所以我找到了一些時間來看看更多一點。 – FitzBeezley
WebGL對模型一無所知,因此很難說這裏存在什麼問題。 – jcoder