0

我想在使用 GL 加速图形的游戏(ANSI C、C99 由于 Windows 兼容性而无法使用)中绘制瓷砖地图,尽管该游戏是使用纹理四边形的自上而下的 2D 透视图。处理时间图的流行观点似乎是使用我即将编写的 GL 顶点缓冲区对象。然而,我意识到我想要一些瓷砖超出垂直界限,假装倾斜的鸟瞰图。这将使块正上方的任何东西都被瓷砖部分覆盖。如果我在这里使用 VBO,我需要一次绘制整个瓷砖地图。这意味着我之后绘制的任何对象都将直接位于图块地图的顶部。

解决这个问题的最明智的方法是什么?我应该先绘制瓷砖地图,然后是实体(玩家/敌人),然后是多余的垂直空间,以便它们覆盖实体,最后是在两者上显示的效果?(例如射击、爆炸等)。但这会给我带来射击没有被地形覆盖的问题,如果我改变顺序,地形会笨拙地覆盖大爆炸。或者,我可以对所有视觉对象进行排序并以自上而下的方式绘制它们,但这意味着我需要经常更改纹理,因为在这种特定情况下按纹理排序并没有太大帮助。

同样,我希望能够以动态方式修改网格中每个单独顶点的颜色,以便实体可以将颜色投射到地图中。据我了解,实现这一点的方法是使用顶点着色器。这个对吗?

编辑:最后一件事。如果我通过平移绘制一个比屏幕大的瓦片地图的 VBO,GL 是否会自动剔除视线之外的面孔,还是每次移动“相机”时都需要重新调整 VBO?

4

2 回答 2

1

VBO 只是保留在图形内存中的一块抽象内存。您可以根据需要以任何布局和排列方式放置数据。您可以使用单个 VBO 来存储多个独立的网格。gl{Vertex,Normal,TexCoord,Color,Attrib}指针函数用于设置内存的偏移量,这意味着进程地址空间或绑定VBO的偏移量。

此外,通过在索引缓冲区中选择适当的第一个元素或索引,可以轻松地使用glDrawArraysglDrawElements仅绘制绑定数据的子集。

所以,不,您不必绘制整个 VBO。

于 2011-08-18T07:18:29.433 回答
0

我实际上回答了我自己的问题。我需要将地图分成两部分:顶部直接有空白区域的块,然后是其余块。效果将分两次绘制,“常规”和“顶部”“图层”

不过,我觉得有一个无用的问题很糟糕,所以如果一些管理员需要清除它,请继续。

于 2011-08-18T01:27:53.510 回答