这是一个地形生成和渲染程序。
我有一个这样的循环:
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();
}
这应该是呈现代码(当然是伪代码)。
我必须指定每个点的坐标。我真的很想在这里使用三角形条带,所以我需要在一个条带中的所有点都互相跟随。
我的问题是:如何存储这些点在python中,我创建一个列表,然后只呈现列表中的所有内容。
问题是这是C语言,数组不是动态的。所以我需要一个尺码。我怎么知道那个尺寸?我怎样才能以一种智能的方式循环它(因为它有可变的宽度)?我怎样才能避免像一行的结尾和另一行的开头这样的事情呢?
还是我做错了一切?
最佳答案
不如使用动态数据结构,比如stack的linked-lists?
每个链表都包含每个三角形条带的点。
堆栈将包含每个三角形条带的链接列表。
链接列表会适合你的问题,因为你不需要索引你的元素。