1

これは、地形生成およびレンダリングプログラム用です。

次のようなループがあります。

x = -MAX_SIGHT_DISTANCE;
y = -MAX_SIGHT_WIDTH;
while (x < MAX_SIGHT_DISTANCE)
{
    while (y < MAX_SIGHT_WIDTH)
    {
        value = noise2d(x+camera.x, y+camera.y);
        if (pointInFrustum(x-camera.x, y-camera.y, value, direction, FOV, MAX_SIGHT_DISTANCE) == 1)
        {
            // TODO: STORE VALUE TO AN ARRAY....SOMEHOW...
        }
        dz = value-camera.z;
        distance = sqrt(x*x + y*y + (dz)*(dz));
        x += DISTANCE_FUNCTION(distance);
        y += DISTANCE_FUNCTION(distance);
    }
}

さまざまな解像度で半ランダムな高さの値を見つけることになっています。近くでははるかに高い解像度、遠くでは低い解像度です。

後で、

for x
{
    glBegin(GL_TRIANGLE_STRIP);
    for y
    {
        glVertex(x, y);
        glVertex(x+1, y);
    }
    glEnd();
}

これはレンダリングコードであると想定されています(もちろん、擬似コードで)。各点の座標を指定する必要があります。ここでは本当に三角ストリップを使用したいので、1つのストリップ内のすべてのポイントを互いに連続させる必要があります。

私の質問が来ます:これらのポイントをどのように保存しますか?Pythonでは、リストを作成してから、リスト内のすべてをレンダリングします。問題は、これがCであり、配列が動的ではないことです。だから私はサイズが必要です。そのサイズをどうやって知ることができますか?インテリジェントな方法でループする方法はありますか(幅が可変であるため)?また、ある行の終わりが別の行の始まりと結合するのを防ぐにはどうすればよいですか?

それとも私はすべてを間違ってやっていますか?

4

1 に答える 1

2

リンクリストのスタックのような動的データ構造を使用するのはどうですか?

各リンクリストは、各三角ストリップのポイントを保持します。スタックには、各三角形ストリップのリンクリストが含まれます。リンクリストは、要素にインデックスを付ける必要がないため、問題に適しています。

于 2012-03-02T20:56:56.707 に答える