0

シェーダーを使用してグラフをプロットしようとしています。x と y のデータが別々にあり、両方を別々にシェーダーに渡したいです。私が現在行っている方法は、x0、y0、x1、y1、...のようにそれらをインターリーブし、単一の頂点属性を使用することです

attribute vec2  coord2d;

インターリーブされたデータを渡し、

coord2d.xy

サンプルポイントを取得します。ただし、データをインターリーブして CPU に負荷をかけたくありません。x と y のデータを別々の頂点属性に渡し、シェーダーがそれらからサンプルを取得できるようにする方法はありますか?

4

1 に答える 1

3

スカラー属性を使用すると、頂点シェーダーで次のようになります。

attribute float coord_x;
attribute float coord_y;

そして、これらの座標をサンプリングに使用するときが来たら:

vec2 (coord_x, coord_y)

シェーダーの外では、頂点属性ポインターが 1 つではなく 2 つになります。それぞれに 1 つのコンポーネントがあるため、次のようになります。

glVertexAttribPointer (coord_x_loc, 1, GL_FLOAT, GL_FALSE, 0, ...);
glVertexAttribPointer (coord_y_loc, 1, GL_FLOAT, GL_FALSE, 0, ...);
于 2013-09-13T04:22:54.547 に答える