当前位置: 首页 > 面试题库 >

在模型上重复纹理

楚羽
2023-03-14
问题内容

我正在创建一个小游戏,您在迷宫中。迷宫是在组织2D Array,描述x and z positionblock type。就是这样Tile- based。可以说每个街区都是1 m³。现在我的角色是 2m 高,迷宫应该是 4m
高。因此,如果该瓷砖上有墙,我会在彼此之间添加4个块。当然100 * 100,即使使用,这在米/瓦迷宫中也是巨大的性能影响Viewfrustum- and backface culling。因为这是我的第一个3D游戏,所以我想使其保持简单,并且我不想使用高级剔除技术(八叉树或其他:P)。因此,我尝试创建1*4*1块而不是1*1*1将其添加Walls到我的世界中。效果不错,性能再次达到完美(60
FPS),但是Texture (64*64px) 被拉长了,看起来真的很丑。

所以我的问题是:

  1. 是否可以每米重复纹理一次,而不是拉伸它呢?
  2. 还是我需要修改纹理使其具有4倍高的纹理?
  3. 还是有更好的解决方案

编辑:
我发现,TextureTextureWrap模式。我将其设置为TextureWrap.Repeat,但无法在UV上设置Texture。如果您要创建a
Sprite以外的项目,则Texture可以轻松地将它们设置为4,以重复Texture4次。但我不能添加Sprite到我的Model,只有Textures为可能的。有没有办法重复这些Texture


问题答案:

将纹理应用于模型的方式取决于模型中每个顶点的UV值。

如果考虑立方体的一个平面-它是由4个顶点组成的矩形。如果顶点的UV值像::(0,0), (1,0), (1,1), (0,1)那么整个纹理将在整个平面上渲染一次(如现在一样)。

您需要将某些UV值更改为4而不是1-您应该使用类似方法(0,0), (1,0), (1,4), (0,4)-这样,您的纹理将重复4次。

不幸的是,我不知道如何更改Libgdx中的UV,也许其他人会在这里提供帮助。

编辑评论中的问题:

您知道渲染的每个顶点都有自己的3D位置矢量,该矢量由x,y,z组件组成。这表示3D空间中的位置。

如果要添加纹理,则需要告诉顶点在纹理的哪个点。您可以定义一些2D向量来表示纹理中的一个点(您也可以使用3D纹理,但现在让我们继续使用2D示例)。

您也可以命名您的纹理矢量分量x,y,但是为了避免与位置数据混淆,有人决定将它们称为它们u,v(在数学中,经常这样做,即使您存储相同类型的数据,也使得某些方程式更易于阅读和理解。理解)。这些向量称为texture coordinatesUVs简称。

现在,想象一下您的纹理在您的面前,它的一个角在(0,0),相反的在在(1,1)。取一个三角形的3个顶点,对于每个顶点,取其UV,并在纹理上标记该点。然后,当您连接所有三个点时,您将获得与渲染相同的三角形。

但是,如果您的UV成分之一大于1或小于0?为了简单起见,我们可以说GPU将采用相同的纹理并在原始纹理之后复制它(它不能完全以这种方式工作,但结果是相同的)。这回答了有关4数字的问题-
如果我们使用纹理坐标,(1,4)就意味着我们要从原点移动4 * textureHeight,这样您的纹理将重复4次。

我认为目前您应该找到一种将UV添加到顶点的方法,并对此进行一些试验。尝试将0、0.1、1、10等设置为纹理坐标,然后看它能给您带来什么。这样,您应该对UV的工作原理有一些基本的了解。



 类似资料:
  • 我有一个简单的场景,包括一个带有月亮漫反射和凹凸纹理的球体模型,烘焙到一个“.GLTF”文件中我使用GLTFJSX导入了模型,但只显示了模型。我打开了灯,但这似乎并没有解决问题。我把同样的模型放在另一个场景中,纹理加载得很好。 问题沙箱:https://codesandbox.io/s/patient-framework-3holn?file=/src/App.js

  • 我只需要从4个相关表的查找中获取详细信息。我查看了文档,我可以从两个表中获取数据,但不能从其他表中获取数据。我有一个课程表,在那里我只显示相关的导师id行。这个很好用。我有一个与FK课程id上的课程表相关的课程学生表。从这个课程学生表中,我有一个链接到另一个表的字段。 课程表(fk tutor_id,但没有学生id)tutors表(链接到具有tutor_id的课程表)LESSIONS_学生表(链接

  • 我们是一家小型初创企业,大约两个月前开始。我们使用Stripe作为主要支付处理器,同时使用PayPal作为次要选项。 我们的计划是每月订阅,每月从$ 5到$ 25不等。我们的付款表单当前收集用户的姓名,CC,到期日期和CVC安全代码。 第一个月后,我们开始注意到用户的定期付款在 Stripe 上开始失败。我们不知道为什么会发生这种情况。如果第一笔付款成功,为什么未来的订阅付款会失败?到目前为止,我

  • 我有一个页面模板,它应用于我的wordpress页面上的特定页面。通常,对于我的所有其他脚本,我将它们放在我的footer.php中,然后从那里漂亮地加载。在这个特定的页面上,我想加载一个脚本,这个脚本应该只在这个页面上运行。因此,在我的模板中,我将其包括如下内容: 不幸的是,在执行此操作时,我只会遇到如下错误: 未捕获类型错误:$(…)。任何不是函数的 WordPress中是否有一些方法只在特定

  • 我创建了一个类来保存我的模型信息。我必须正确渲染模型并正确包装纹理,但是由于某种原因,如果我有多个模型,它会将我所有的模型纹理化为仅1个纹理,正如您在这张图片中看到的:http://imgur.com/d0glIwF 知道为什么会这样吗? 这是我的代码: 提前谢谢你。

  • 这是我的密码: 我已经安装了Python3(MacOSX),并将其与virtualenv一起使用。这段代码在2.7中运行良好,但在python3中不起作用。5.它总是给出