-1

C++ コラーダ リーダーを作成しましたが、opengl ダイレクト モードを使用して 4ms で 3K アニメーション メッシュを描画します。それは遅すぎる。

そこで、頂点シェーダーを使用することにしました。スケルトンでは、各頂点には各ボーンの重み (ゼロ以上) があります。40 個のボーンを持つ 3K メッシュの場合、オブジェクト全体に 120,000 のウェイトがあります。

唯一の問題は、GLSL では大きなサイズの均一な配列を宣言できないことです。

たとえば、これはコンパイルされます (頂点シェーダー):

/////////////////////////////////////////

uniform float weights [10] ;

void main (void)

{
 float test= weights[0];

  gl_Position = ftransform();

}

/// これではありません:

uniform float weights [120000] ;

void main (void)

{
  float test= weights[0];

  gl_Position = ftransform();

}

////////////////////////////////////////

glVertexAttribPointer() を使用して各頂点の属性を設定できるいくつかのページを見てきました。これは、1 ~ 4 個のボーン (vecX 属性を使用できます) がある場合に実行されますが、GLSL (私の場合は 1.20) は属性配列を受け入れません。

4

1 に答える 1