2017-08-28 120 views
0

我正在編寫一個應用程序,將兩個網格(用作關鍵幀)的頂點加載到兩個單獨的OpenGL浮點數據緩衝區中。這兩個網格具有相同數量的頂點。使用OpenGL插值數據緩衝區?

我想通過使用這兩個緩衝區之間的線性插值計算中間幀(我可以指定插值權重爲0和1之間的值)。我目前正在CPU上執行插值,但我想將計算卸載到GPU,以便更快地計算中間幀。

有沒有辦法做到這一點只使用OpenGL(即不是OpenCL)?如果是這樣,怎麼樣?

回答

5

假設頂點在兩個緩衝區中都以相同的順序存儲,您可以簡單地將每個緩衝區綁定到頂點着色器中的屬性。結合其間的統一控制從0(僅第一個緩衝區)到1(僅第二個緩衝區)的插值(我們稱之爲t),可以在寫入gl_Position之前執行線性插值。着色器可能看起來在某種程度上類似如下:

in vec4 buffer1; //Bind buffer1 to this attribute 
in vec4 buffer2; //Bind buffer2 to this attribute 

uniform float t; //Interpolation parameter between 0 and 1 

void main() 
{ 
    gl_Position = (1 - t) * buffer1 + t * buffer2; 
} 
+6

或['混合()'](https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mix.xhtml)。 – genpfault

+0

這可能是一個愚蠢的問題,但我如何將VBO綁定到着色器屬性?我似乎無法找到如何。 –

+1

你現在如何與你的一個VBO做到這一點?看看'glVertexAttribPointer'。 – BDL