好的,所以我和一个朋友正在尝试创建各种3D引擎,我们最近已经超越了所有的初步错误。最后,我们设法得到了一块污垢(我发布了一张图片,但我还没有足够的声誉)。然而,现在我们遇到了更多问题,这次我们不知道出了什么问题。
看到,当你移动到块的任一侧时,孔开始在面中随机发展。 Example,example。我想我应该解释我们的渲染是如何工作的 - 我们正在使用Pygame(没有任何真正的3D库,这有点重要),并且无法弄清楚我们应该如何在移动时转换图像关于3D空间。因此,我们决定将所有像素分割成单独的Tile类,并将它们渲染为具有颜色的多边形 - 更容易,只需计算顶点而不是映射图像。我们确保这些洞不会发生的方式是根据与相机的距离对它们进行分类,然后按顺序渲染。
在某些时候我们会实施像背面剔除这样的优化,但在此之前我们遇到了这个大问题:我们的距离函数似乎没有正常工作!
这是我们计算距离的必要条件:
def pointdist(self, point):
return (self.x - point[0]) * (self.x - point[0]) + (self.y - point[1]) * (self.y - point[1]) + (self.z - point[2]) * (self.z - point[2])
我们有一个列表master_buffer,它包含所有的图块,并将那些图块放在draw_buffer中 - 现在就是所有图块,因为我们还没有实现任何过滤或优化
for tile in self.master_buffer:
self.draw_buffer.append(tile)
self.draw_buffer.sort(key=(lambda tile: c.pointdist(tile.center)))
之后,我们只需要经历draw_buffer,计算和渲染。这就是我们正在进行的所有过滤,因此我们无法理解为什么会形成这样的漏洞。
如果您需要其他示例或部分代码,请随时提出。一般来说,建议对我们的方法也很欢迎。
反应:
c
不在立方体内。绘图代码执行计算,并立即渲染 - 两者之间不会发生任何事情。编辑:
另外,如果有帮助,轴是:+ x向右,+ y向后,+ z向下。
看到没有人能够找到问题,我们将尝试采用计算每个面的距离而不是单个图块的方法。这将意味着我们被锁定使用立方体,但这是目前最好的路线。