如何处理地图部分下方的角色?
How to deal with character going under parts of map?
在我的所有项目中,我一直在渲染整个地图,然后是所有实体。但是现在有些部分,实体必须进入地图的某些部分下方,而我只是坐在这里不知道该怎么做。
我的(伪代码)渲染器:
Render(){
For all Layers
For all Rows
For all Blocks
Block.Render()
For all Entities
Entity.Render();
}
最终导致实体透支了它们应该位于的部分地图。理论上如何正确地做到这一点?
这实际上取决于您的特定渲染方案,但假设自上而下的视图,大致如下:
Render(){
For all Layers from bottom to top
For all Rows in layer
For all Blocks in row
Block.Render()
For all Entities on layer
Entity.Render()
}
即按距相机的距离渲染事物 descending-ordered,对应于层数。
正如 yuri kilochek 在他的回答中所建议的,您确实可以在此处使用 painter's algorithm。
另一种处理方法是,根据您的 Block
和 Entity
类 的外观,将它们全部放在一个数组中,然后 sort
这个数组得到一个和以前类似的结构。我在这里看到的主要缺点可能是排序可能很昂贵(取决于您要渲染的项目数量),并且您可能需要您的对象知道它们的行/层才能对它们进行排序。
如果您使用 opengl 或 directx 来渲染您的场景,您也可以利用 the z-buffer。这个想法是用每个对象的 layer
丰富您的顶点数据,然后通过启用具有 greater or equal
图层值的对象来绘制 z-buffer
魔法。这将允许您保留实际的渲染循环,同时考虑对象所在的层。
在我的所有项目中,我一直在渲染整个地图,然后是所有实体。但是现在有些部分,实体必须进入地图的某些部分下方,而我只是坐在这里不知道该怎么做。
我的(伪代码)渲染器:
Render(){
For all Layers
For all Rows
For all Blocks
Block.Render()
For all Entities
Entity.Render();
}
最终导致实体透支了它们应该位于的部分地图。理论上如何正确地做到这一点?
这实际上取决于您的特定渲染方案,但假设自上而下的视图,大致如下:
Render(){
For all Layers from bottom to top
For all Rows in layer
For all Blocks in row
Block.Render()
For all Entities on layer
Entity.Render()
}
即按距相机的距离渲染事物 descending-ordered,对应于层数。
正如 yuri kilochek 在他的回答中所建议的,您确实可以在此处使用 painter's algorithm。
另一种处理方法是,根据您的 Block
和 Entity
类 的外观,将它们全部放在一个数组中,然后 sort
这个数组得到一个和以前类似的结构。我在这里看到的主要缺点可能是排序可能很昂贵(取决于您要渲染的项目数量),并且您可能需要您的对象知道它们的行/层才能对它们进行排序。
如果您使用 opengl 或 directx 来渲染您的场景,您也可以利用 the z-buffer。这个想法是用每个对象的 layer
丰富您的顶点数据,然后通过启用具有 greater or equal
图层值的对象来绘制 z-buffer
魔法。这将允许您保留实际的渲染循环,同时考虑对象所在的层。