我想在(ANSI C,C99因窗口兼容而无法使用)平面图中绘制一个使用GL加速图形的游戏,尽管该游戏是使用纹理四边形的自顶向下2D视角。 处理时间映射的流行观点似乎使用了GL顶点缓冲区对象,我即将编写。然而,我意识到我想要一些瓷砖超出垂直边界,伪造一个倾斜的鸟瞰图。这将使得块正上方的任何内容被区块部分覆盖。 如果我在这里使用VBO,我将需要一次性绘制整个tilemap。这意味着我之后绘制的任何对象都将直接位于tilemap的顶部。
解决这个问题的最佳方法是什么?我应该首先绘制tilemap,然后是实体(玩家/敌人),然后是多余的垂直空间,以便它们覆盖实体,最后是显示在两者上的效果? (如射击,爆炸等)。但是这会给我一些没有被地形覆盖的射击问题,如果我改变顺序,地形覆盖大的爆炸笨拙。 或者,我可以对所有视觉对象进行排序并以自上而下的方式绘制它们,但这意味着我需要经常更改纹理,因为在这种特定情况下按纹理排序不会有太多帮助。
同样,我希望能够以动态方式修改网格中每个顶点的颜色,以便实体可以将颜色投射到地图中。根据我的理解,实现这一点的方法是使用顶点着色器。这是对的吗?
编辑:最后一件事。如果我像平面图那样绘制一个大于屏幕的VBO,通过翻译,GL会自动剔除视野面部,还是每次移动“相机”时都需要改造VBO?答案 0 :(得分:1)
VBO只是图形内存中保留的一段抽象内存。您可以根据需要以任何布局和排列方式放置数据。您可以使用单个VBO来存储多个独立的网格。 gl {Vertex,Normal,TexCoord,Color,Attrib}指针函数用于将偏移量设置到内存中,这意味着进程地址空间或偏移到绑定的VBO中。
此外,通过在索引缓冲区中选择适当的第一个元素或索引,只需使用 glDrawArrays 和 glDrawElements 轻松绘制绑定数据的子集。
所以,不,你不必画完整个维吾尔族。
答案 1 :(得分:0)
我实际上回答了我自己的问题。我需要将地图分成两部分:直接在顶部有空白空间的块,然后是其余部分。效果将在两个过程中绘制,“常规”和“顶部”“层”
我觉得自己有一个无用的问题很糟糕,所以如果有些管理员需要清除它,请继续。