根據用戶早期選擇的某些選項,我正在繪製一個介於100到2500個三角形面之間的中型到大型對象。對象本身是固定的 - 不移動,不經歷任何轉換,沒有任何東西。到目前爲止,您可以將事情想象爲「我的應用程序加載OBJ文件,然後用戶查看它們」,而且您不會錯的。我可以從片段着色器中知道我正在使用哪個三角形嗎?
棘手的是,在任何時候,對象的一些面將被「選中」,而有些不會。選定的面孔必須以不同的紋理顯示 - 相同的UV座標,但像素顏色來自不同的位圖。在任何時候都會選擇大約一半的臉部,並且哪些臉部會不斷變化。
因此,顯而易見的事情是,在片段着色器中,如果我正在處理選定的面部,請在該位圖上調用texture2D(),如果我處於未選定的三角形中,請使用THAT一。只是,我沒有看到從片段着色器中找出我處於哪個三角形的方法。這是我的問題:我可以知道嗎?
我確實有一個選擇 - 用自己的頂點副本設置每個面,將紋理位圖的大小加倍,設置每個面頂點的UV座標以指向「選定」或「取消選擇」位圖的一部分 - 但頂點的數量增加了6倍,並且我將每個單幀的整個UV陣列傳遞給GPU,並且...是的。即使對於小件物品也很慢。不好。
我很害怕這會成爲答案。至少,使用額外的頂點屬性而不是UV座標將大大減少我必須複製到GPU每幀的數量。 – mjfgates