1
float linePos[6]={0.0f,5.0f,0.0f,0.0f,30.0f,0.0f};    
...

glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*2, linePos, GL_STATIC_DRAW);

...
glUniformMatrix4fv(UniformColor.modelToWorldMatrixUnif, 1, GL_FALSE, glm::value_ptr(modelMatrix.Top()));
//this just transforms all vertices

glLineWidth(3);
glDrawArrays(GL_LINES,0,2);

ラインの一方の端(linePos [0])の位置(ex.translate)を変更するアニメーションを作成したいのですが、もう一方の端は変更しません。どうやってやるの?

4

2 に答える 2

1

頂点シェーダーでgl_VertexIDが奇数か偶数かを確認し、それに応じて変換を適用するかどうかを決定できます。

于 2012-12-13T13:26:35.050 に答える
0

基本的に 2 つのオプションがあります: linePos 配列の頂点位置を更新し、頂点バッファー オブジェクトに再アップロードします。glBufferSubDataを使用してデータを更新できます。 shader.Anyways 、個々の頂点位置を変更する必要がある場合は、最初のアプローチが必要です。プログラム可能なパイプラインを使用してそれを行う方法に関する人気のあるチュートリアルを次に示します。

ところで、私はシェーダーベースのソリューションを拡張したいと思います.ラインには開始点と終了点の2つのポイントしかないため、それを提案しました.したがって、それらの位置を変更することは、ライン全体をマトリックスで変換するようなものです.それが私が思う理由です頂点シェーダー内で実行することをお勧めします。少なくとも 3 つのベクトルで定義されたラインがある場合、特定の頂点の位置を変更するには、CPU で頂点配列を変更する必要があります。ジオメトリ シェーダーで実行できますが、これは高度です。もの。

于 2012-12-13T12:44:07.493 に答える