2017-08-28 18 views
0

2つのメッシュ(キーフレームとして機能する)の頂点を2つの別々のOpenGL浮動小数点データバッファにロードするアプリケーションを書いています。 2つのメッシュの頂点数は同じです。OpenGLを使用してデータバッファを補間しますか?

これらの2つのバッファ間で線形補間を使用して中間フレームを計算したいと思います(補間重みを0と1の間の値として指定できます)。私は現在CPU上で補間を行っていますが、中間フレームをより速く計算するために計算をGPUにオフロードしたいと思います。

OpenGL(OpenCLではない)だけを使ってこれを行う方法はありますか?もしそうなら、どうですか?

答えて

5

頂点が両方のバッファに同じ順序で格納されていると仮定すると、各バッファを頂点シェーダの属性に単にバインドすることができます。 0(最初のバッファのみ)から1(2番目のバッファのみ)になる補間(これを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

あなたは今、あなたの1つのVBOでこれをやりますか? 'glVertexAttribPointer'を見てください。 – BDL

関連する問題