如果進行回圈繪制,每次繪制若干個頂點(3的倍數),則可以顯示完全(完整度跟每次繪制的點數有關,整體來說是每次繪制的點越少就越全,但是有的時候也不一定)
參考代碼:
int i = 0;
int DPTime = 156;
while (i < numOfPs) {
if (i + DPTime < numOfPs) {
d3dContext_->DrawIndexed(DPTime, 0, i);
i = i + DPTime;
}
else {
d3dContext_->DrawIndexed(numOfPs-i, 0, i);
i = i + DPTime;
}
}
繪制結果:
numOfPs是所有需要繪制的索引點的個數,是通過遍歷assimp轉化后的模型讀取出來的,這個數字我驗證過沒有問題(我直接輸出到文本統計了一下,而且不論是一次性繪制還是分批次繪制繪制的總數是一樣的)。
我記著模型有7個submesh,我后來按照submesh繪制之后有部分submesh報出了下邊的錯
D3D11 WARNING: ID3D11DeviceContext::DrawIndexed: Vertex Buffer at the input vertex slot 0 is not big enough for what the Draw*() call expects to traverse. This is OK, as reading off the end of the Buffer is defined to return 0. However the developer probably did not intend to make use of this behavior. [ EXECUTION WARNING #356: DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL]
從字面上看是頂點快取不夠大,我去網上搜了一下,沒有解決問題。我又檢查了一遍快取的描述也沒有發現問題,而且我只是更改了繪制的方法,并沒有改變其他的代碼,如果真是快取不夠那么我每幾個頂點一組也應該畫不出來,但是實際情況是每幾個一組可以基本繪制完全,直接一起畫只能畫大約一半,分submesh畫能畫7、8成。
模型讀取應該是全的,一方面我把讀取后的模型列印出來和原始模型對比了一下,雖然assimp把模型結構更改了,但是我對比了一下,頂點總數和索引是對的上的,而且既然我幾個一組可以畫出來說明資料本身沒有缺失,應該是各種DESC配置的問題。
p.s.在對drawindexed除錯時出現了新的進展,如果按照mesh分幾塊繪制,會在其中一塊繪制的時候報以下錯誤
D3D11 WARNING: ID3D11DeviceContext::DrawIndexed: Vertex Buffer at the input vertex slot 0 is not big enough for what the Draw*() call expects to traverse. This is OK, as reading off the end of the Buffer is defined to return 0. However the developer probably did not intend to make use of this behavior. [ EXECUTION WARNING #356: DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL]
這個錯報的很直白,就是說頂點的Buffer不夠大,我去網上搜了也排查了一遍代碼,沒能發現問題,而且假如真的是buffer不夠大,為什么使用draw或者每隔幾個進行繪制的時候都沒有問題,綜合考慮感徑訓是在index相關的內容上出了問題。
我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......