Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 墙纹理的程序生成,分割一对三角形(递归?)_Opengl_Recursion - Fatal编程技术网

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

Opengl 墙纹理的程序生成,分割一对三角形(递归?),opengl,recursion,Opengl,Recursion,如果我做一个非常简单的游戏,把玩家放在一个由两个三角形组成的方形墙的隧道里(我有),这些墙看起来有点无聊,甚至在某些角度上会迷失方向。我正在考虑使用定义方形面板的数据,通过进一步细分每个三角形,然后随机扰动Z值以获得墙中的一些深度,从而在程序上生成更有趣的纹理 这两个三角形看起来像: typedef struct { float Position[3]; float Color[4]; float TexCoord[2]; float Normal[3]; } V

如果我做一个非常简单的游戏,把玩家放在一个由两个三角形组成的方形墙的隧道里(我有),这些墙看起来有点无聊,甚至在某些角度上会迷失方向。我正在考虑使用定义方形面板的数据,通过进一步细分每个三角形,然后随机扰动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值都只被正值改变,可能会产生粗糙的石块效果?知道哪张脸是向前的显然很重要,所以这似乎是一个可行的解决方案


您是否执行过此类程序生成?如果是,您是如何在墙中实现深度的?您是如何处理嵌板连接的

可能有一个工作机会。不要在每个四边形上都有一个纹理,而是使用一个更大的纹理来拉伸多个四边形。例如,第一个四边形的r纹理坐标可以从0.0到0.1,下一个四边形的r纹理坐标可以从0.1到0.2。然后,纹理将拉伸10个四边形,墙壁重复的频率将降低。此外,您可以使用mipmapping和各向异性过滤等技术使其在深度上看起来更好,并使用凹凸贴图消除平坦度。