2012-06-13 47 views
2

刚刚学习了一些在android上学习制作游戏的基础知识的OpenGL。OpenGl ES - 如何将不同的纹理映射到一个网格物体

我遇到的麻烦是将不同纹理映射到我的网格上。

例如:

我有块网格 - 8x8的 - 在我的顶点数组我定义一个9x9的顶点构建列/行定义的网格。然后我去做一个索引缓冲区,告诉它如何画出构成网格中每个正方形的2个三角形。

我的挫折在于将纹理映射到网格的不同图块,因为每个方块都与网格中的其他方块共享顶点,并且据我所知,只能在Opengl中的每个顶点应用一个纹理坐标。

我能想到的唯一解决方案是在顶点缓冲区中生成重复的顶点,这将允许我为每个顶点分配单独的纹理坐标(即使顶点已经位于前一个瓷砖生成的缓冲区中) 。 这种方式将结束我与一堆重复的顶点,这在我看来似乎不对。我也想避免动态创建一个大的位图,然后用分数纹理坐标将它映射到网格上。

有人可以请教我的新手,关于如何在网格上获取不同的纹理每个瓷砖!

谢谢!

回答

0

我能想到的唯一的办法是在生成顶点缓冲重复顶点,这将允许我来分配每个顶点

个人纹理坐标,这就是你应该做的。它可能看起来很浪费,但opengl的“顶点”是定义顶点(包括texcoords,法线等)的所有属性的集合。如果一个物理顶点位置由4个四元组共享,但该点的texcoord对于每个四元组都不相同,则必须创建4个唯一的顶点和索引来引用该点。

+0

谢谢你的澄清! 他们如何通过纹理化大地形网格来解决这个问题? – user1411499

+0

嗯,我敢打赌,这个问题的完整答案可以填充整个教科书,但请注意,重复只是位于纹理边界上的顶点的问题。如果你有一个大的细分网格,那么实际上在纹理之间共享的顶点的数量相对于顶点的总数是非常小的,所以重复并不像你绘制时那样大四边形(并且每个顶点必须重复4倍)。 @ user1411499 – Tim

+0

非常感谢 - 你帮了我很多好先生! – user1411499