程序生成墙纹理,划分一对三角形(递归?)

时间:2012-08-13 00:17:25

标签: opengl recursion

如果我制作一个非常简单的游戏,将玩家置于一个由两个三角形(我有)制成的方形墙的隧道中,那些墙壁在某些角度看起来有点无聊甚至迷失方向。我正在考虑采用定义方形面板的数据,并通过在随机扰动Z值之前进一步细分每个三角形来在程序上生成更有趣的纹理,以在墙上获得一些深度。

两个三角形看起来像:

typedef struct {
    float Position[3];
    float Color[4];
    float TexCoord[2];
    float Normal[3];
} Vertex;

const Vertex Vertices[] = {
    // Front
    {{0, 0, 0}, {1, 0, 0, 1}, {1, 0}, {0, 0, 1}},
    {{1, 0, 0}, {1, 0, 0, 1}, {1, 1}, {0, 0, 1}},
    {{1, 1, 0}, {1, 0, 0, 1}, {0, 1}, {0, 0, 1}},
    {{0, 1, 0}, {1, 0, 0, 1}, {0, 0}, {0, 0, 1}}
};

这个方块被转换成任何必要的位置,以制作墙壁,地板,天花板。

我可以在墙上贴一块纹理但是当从侧面看(墙)时,它显然是完全平坦的。现代硬件有三角形可以燃烧,这就是我在思考这些问题的原因。

看起来像递归算法的工作。但是有一个问题,当谈到角落时,Z值都必须回到零或者面板不会在3D中平铺,玩家将看到角落间隙,他们不应该。简单地将边缘Z值排除在随机过程之外可能看起来不太好 - 除非所有Z值都只能通过正值改变,可能会产生粗糙的石块效应?知道哪个面向前是显然很重要,这似乎是一个可行的解决方案。

你是否已经完成了这种程序生成,如果是这样的话,你是如何在墙上实现深度的?你是如何处理面板连接的?

0 个答案:

没有答案