在我的所有项目中,我一直在渲染整个地图,然后渲染所有实体。但现在有些部分,实体必须在地图的某些部分下面,而我只是坐在这里不知道该怎么做。
我的(伪代码)渲染器:
Render(){
For all Layers
For all Rows
For all Blocks
Block.Render()
For all Entities
Entity.Render();
}
哪些结束于实体透支他们应该在的部分地图。如何在理论上正确地做到这一点?
答案 0 :(得分:0)
这实际上取决于您的特定渲染方案,但假设自上而下的视图,沿着这些方向:
header.addEventListener('click', ShowKeyboard)
即。渲染事物按照与相机的距离降序排序,对应于图层编号。
答案 1 :(得分:0)
正如yuri kilochek在他的回答中所建议的,你确实可以在这里使用painter's algorithm。
另一种处理方法可能是,根据您的Block
和Entity
类的样子,将所有类都放在一个数组中,然后sort
这个数组得到回到与以前类似的结构。我在这里可以看到的主要缺点可能是排序可能很昂贵(取决于你想要渲染多少项),并且你可能需要你的对象知道它们的行/层才能对它们进行排序。
如果您使用 opengl 或 directx 渲染场景,也可以获利the z-buffer。我们的想法是用每个对象layer
来丰富您的顶点数据,然后通过启用具有z-buffer
图层值的对象来实现greater or equal
魔法。这样可以保留实际的渲染循环,同时考虑对象所在的层。