0

GLU を使用してポリゴンをテッセレートしようとすると問題が発生します。頂点コールバックは常に、gluTessVertex によって定義された最後の頂点でコールバックします。GLdouble v[3] に格納されている値は、for ループの反復ごとに GC されているようです。GC されないように各 GLdouble v[3] を保存するにはどうすればよいですか?

for(int i = 0; i < vtxcnt; i++)
{
    float lon = dbls[i * 2];
    float lat = dbls[(i * 2)+1];
    GLdouble v[3] = {lon, lat, 0.0f};
    gluTessVertex(tess, v, v);
}

* 編集: これで問題は解決したようです... *

GLdouble *vtxs = new GLdouble[vtxcnt * 3];

for(int i = 0; i < vtxcnt; i++)
{
    lon = dbls[i * 2];
    lat = dbls[(i * 2)+1];

    vtxs[(i * 3) + 0] = (double)lon;
    vtxs[(i * 3) + 1] = (double)lat;
    vtxs[(i * 3) + 2] = (double)0;
    gluTessVertex(tess, &vtxs[(i * 3) + 0], &vtxs[(i * 3) + 0]);
}
4

1 に答える 1

1

gluTessVertex頂点ポインタのみを格納します。ポインターは、テッセレーションが実行されるまで有効である必要があります。これはコードには当てはまらないため、失敗します。

于 2012-09-22T16:15:59.000 に答える