首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三维地图上无休止的滚动

三维地图上无休止的滚动
EN

Stack Overflow用户
提问于 2016-10-11 14:16:47
回答 2查看 131关注 0票数 3

我有一些金属经验和相当多的团结,并熟悉设置网格,缓冲区,和支持数据绘制;但没有那么多的数学/阴影方面。我在挣扎的是如何建立一个无穷无尽的滚动世界。所以,如果我向右偏远,我可以看到左边,然后继续前进。

这一应用将是一个无缝的地形,玩家可以永远滚动任何方向,并让它只是包装。

我不想重复所有的抽签和抵消,这似乎是可怕的低效。我希望有一种方法,要么使用一些神奇的矩阵数学,或某种着色器,以获得东西包装/绘图,他们应该在哪里,当平移地图。我到处找一些关于如何让这件事奏效的指南或解释,但没有想出任何办法。

我知道很多古老的(dos)游戏都是这么做的,它还可能吗?为什么这个行业似乎已经从这种类型的滚动(边界到边缘和包装)转移了呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-12 09:36:14

我已经创建了一个简单例子来演示您正在寻找的内容(我认为)。

它的基本思想是在重复网格中使用drawPrimitives(type:vertexStart:vertexCount:instanceCount:)方法在MTLRenderCommandEncoder上绘制映射。当实例计数时,您希望传递要绘制的相同映射的数量,并将其扩展到需要的范围,以不查看其结束位置。在我的例子中,我使用了一个简单的5x5网格。

为了不让用户看到地图的边缘,我们将计算他们的位置模1 (或您的地图大小):

代码语言:javascript
复制
func didDrag(dx: CGFloat, dy: CGFloat) {
    // Move user position on drag, adding 1 to not get below 0
    x += Float(dx) * draggingSpeed + 1
    z += Float(dy) * draggingSpeed + 1

    x.formTruncatingRemainder(dividingBy: 1)
    z.formTruncatingRemainder(dividingBy: 1)
}

这就是它的样子:

票数 3
EN

Stack Overflow用户

发布于 2017-01-29 02:39:08

只是跟进一下我实际执行的内容。首先,我基本上有一个x,y点阵列的高度,地形类型和所有的爵士乐。使用一些简单的%和加法/减法,就很容易得到点周围的节点来生成三角形。

在抽签时,我计算第一个显示点和最后一个显示点,并计算在这些点之间显示的三角形组。第一点/最后一点考虑到包装,然后有一个无穷无尽的包装世界是非常琐碎的。对于每个组,一个平移偏移将通过该组的统一矩阵传递,该矩阵将将该区段定位到它应该属于的位置。

我通过renderEncoder.setVertexBytes(&uniform, length:..., offset:...)设置它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39979352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档