首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >[0,1] (WebGL)外的UV纹理坐标

[0,1] (WebGL)外的UV纹理坐标
EN

Game Development用户
提问于 2014-03-16 00:06:38
回答 1查看 836关注 0票数 2

我正在用WebGL创建一个3D游戏,我使用波前物体作为基本模型格式。我最近发现了一些模型,它们的纹理坐标超出了典型的0,1范围,我真的不知道如何处理它们(在代码中)。

当然,我知道这是一个已知的问题,纹理坐标可以在0,1之外,解决方案是使用GL_REPEAT包装模式。

但这不是我的解决方案,因为我有很多非动力的2纹理,我需要使用CLAMP_TO_EDGE包装模式(非pow-2纹理的解决方案)。

我试图通过编写代码来绕过这个问题,因此将0-,1+范围转换为0,1,但没有取得多大的成功(尽管有些成功)。下面是我所做的:我循环了"vt“条目(来自我的解析器),我正在检查的情况如下(伪):

代码语言:javascript
运行
复制
U,V = texture coordinates as they come from file

if (U<0) {
   U = U + Math.abs( Math.floor(U) );
}
if (U>1) {
   U = U - Math.floor(U);
}
if (V>=0) {
   V = Math.ceil(V) - V;
}
if (V<0) {
   V = Math.abs( Math.floor(V) - V );
}

上面的片段将取一个U,V的未知范围,并将其转换为0,1,同时考虑到WebGL纹理协调系统(0,0,但左转WebGL,0,1表示波前,第三种情况)。

这些数字是正确计算的,但结果并不是预期的,恐怕我这方面对GL_REPEAT模式是如何工作的有误解。

所以我的问题(S)

  • 这可以通过代码来解决,所以我可以使用CLAMP_TO_EDGE吗?
  • 如果没有办法,是否有任何程序可以采用重复坐标的模型,并在0,1范围内生成一个?我已经在使用搅拌机,但在出口商找不到这方面的设置。
EN

回答 1

Game Development用户

回答已采纳

发布于 2014-03-16 11:04:53

我认为你最好把你的纹理调整到最近的二次幂。您不需要调整纹理坐标,因为它们相对于纹理图像的大小(尽管您可能需要设置v=1-v以考虑不同的来源)。

您自己包装纹理坐标的问题是,在“接缝”(值从1 -> 0突然下降)的“接缝”处,过滤将不能正常工作。

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

https://gamedev.stackexchange.com/questions/71985

复制
相关文章

相似问题

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