首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在OpenGL中展开纹理

在OpenGL中展开纹理
EN

Stack Overflow用户
提问于 2011-11-04 00:44:12
回答 2查看 1.9K关注 0票数 1

假设我有一个纹理映射到网格屏幕对齐的网格。它看起来像是:

顶点位置是:

代码语言:javascript
运行
AI代码解释
复制
(-1, -1), (1, -1), (-1, 1), (1, 1)

UVs:

代码语言:javascript
运行
AI代码解释
复制
(0, 0), (1, 0), (0, 1), (1,1)

我通过在顶点周围移动来扭曲图像,并通过执行glReadPixels()保存输出。

新的翘曲顶点位置如下:

代码语言:javascript
运行
AI代码解释
复制
(-1, -1), (0.8, -0.8), (-0.6, 0.6), (0.4, 0.4)

生产的产出如下:

下一次作为输入,我使用刚才保存的扭曲图像。我想要做的是通过修改顶点坐标来扭转我之前做过的翘曲效应。最初,我认为要解开图像的坐标必须是这样的:

代码语言:javascript
运行
AI代码解释
复制
x_unwarp = 2 * x_original - x_warped

但这不管用。翘曲效应并没有消除。我得到的是:

你知不知道我做错了什么,应该如何修改顶点和弦或者uvs?我肯定我数学弄错了。

谢谢!

更新

看来我的公式错了。我应该用矩阵:

代码语言:javascript
运行
AI代码解释
复制
transform_matrix * x_original = x_warped

然后:

代码语言:javascript
运行
AI代码解释
复制
x_unwarped = inverse(tranform_matrix) * x_original

由于我正在进行的转换是纯缩放的,所以转换矩阵类似于:

代码语言:javascript
运行
AI代码解释
复制
/     \
| S  0 |
| 0  S |
\      /

其中S是尺度因子。因此,相反的情况是:

代码语言:javascript
运行
AI代码解释
复制
/         \
| 1/S  0  |
| 0   1/S |
\         /

因此,这将使展开顶点位置如下:

代码语言:javascript
运行
AI代码解释
复制
(-1, -1), (1.25, -1.25), (-1.67, 1.67), (2.5, 2.5)

看上去更直,但还是不正确:

第二次更新

我似乎从一开始就开始搞错了。所有渲染中都有一些随机因素。我要修好它,然后再试一次。

更新:紫外线经纱

这次是用紫外线变形做的。

扭曲使用这些UV:

代码语言:javascript
运行
AI代码解释
复制
(0.0, 0.0), (0.9, 0.0), (0.0, 0.8), (0.7, 0.7)

这就产生了:

然后试着用逆词解曲:

代码语言:javascript
运行
AI代码解释
复制
(0.0, 0.0), (1/0.9, 0.0), (0.0, 1/0.8), (1/0.7, 1/0.7)

看上去像是:

这也没做过。我开始担心我忽略的1/0病例。

完全毫无头绪。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-04 02:27:58

您遇到的一件事是透视不正确的纹理映射(您可以在第一张图片中看到,对于一个四角由两个三角形组成的每个三角形,纹理坐标都是不同的)。您可以在大的单个四角体上使用透视校正(使用片段着色器并在那里实现算法),也可以将四边形细分为较小的补丁。

现在,如果你这样想的话,倒转纹理扭曲是很简单的:第一步的变形协调成为第二步的UV坐标。当然,这需要了解变形顶点在一定范围内的位置。回想一下OpenGL转换管道:

模型视图→投影→裁剪→归一化设备坐标。屏幕空间是最后一步,并应用视口尺寸。NDC坐标在-1,1的范围内,但是到达0,1范围很容易:(x+1)/2。

因此,您所做的是执行转换管道(您可以省略裁剪,但您必须应用透视分割),这给您的紫外线坐标去失真。

票数 2
EN

Stack Overflow用户

发布于 2011-11-04 01:01:20

如果我正确地理解了你的问题(考虑到我的答案看上去太简单了:p),为什么不简单地通过应用纹理矩阵来修改你的纹理(即根据需要用平移、旋转、剪切等矩阵来转换UVs ),而不是移动应用它的四边形呢?

这将使逆转转换成为一个简单的问题,即反演您原来的转换矩阵。

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

https://stackoverflow.com/questions/8006734

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文