0

タイトルが説明しているように、トライアングル リストを使用して BSpline パッチをテッセレーションしようとしています。

これは私のパッチの正面からの画像です。

パッチフロント

私の問題は、この効果を与えるパッチの後部です。

パッチリア

ご覧のとおり、三角形の前の行は、描画されている新しい行に接続しています。行の終わりに達したときにインデックス値を 1 増やすなど、これを回避するためにさまざまな方法を試しました。私が見つけることができる唯一の簡単な修正は、各行を個別のループに入れることです(その行のサイズのためにループ範囲を使用します)。これはまったく直感的ではありません。

私のパッチを描画するためのコードは次のとおりです。

void drawBSplinePatch1(std::vector<int>& sample_elements_out, const int samples)
{
    for(int i = 0; i <= 379; i++)
    {
        // first triangle
        sample_elements_out.push_back(i);
        sample_elements_out.push_back(i + 1);
        sample_elements_out.push_back(i + samples);

        // second triangle
        sample_elements_out.push_back(i  + samples);
        sample_elements_out.push_back(i + 1);
        sample_elements_out.push_back(i + samples + 1);
    }
}
4

1 に答える 1

0

たとえば、このように、各行のクワッドをスキップします。

for(int i = 0; i <= 379; i++)
{
    if (i % ROW_LENGTH != ROW_LENGTH - 1) {
      // first triangle
      sample_elements_out.push_back(i);
      sample_elements_out.push_back(i + 1);
      sample_elements_out.push_back(i + samples);

      // second triangle
      sample_elements_out.push_back(i  + samples);
      sample_elements_out.push_back(i + 1);
      sample_elements_out.push_back(i + samples + 1);
    }
}

ただし、ネストされた 2 つのループの方がおそらく読みやすいでしょう。

于 2013-07-07T19:18:55.130 に答える