美文网首页
纹理映射(一)

纹理映射(一)

作者: android小奉先 | 来源:发表于2022-08-21 18:54 被阅读0次

本篇介绍

使用纹理可以表示比较复杂的图形,比如磨损的金属,粗糙的皮肤,有褶皱的衣服等,而纹理映射也不是简单的坐标映射下就行,最容易想到的就是直接映射其实就是冲采样,会有走样问题。本篇就看下纹理映射涉及的问题。

查找纹理值

根据原始图像的像素坐标转换成对应的问题坐标,那纹理上对应坐标的值就是需要给图像渲染的值,如下所示:


image.png

这本质上就是一个从图像到纹理坐标的映射。
最简单的实现就是坐标按比例映射:


image.png
这样的确也有效果,一个实际的应用效果如下:
image.png

但是对于图像和纹理像素差异大,而且观察角度比较刁钻的场景就不太行了,走样会比较明显,如下所示:


image.png
看到这儿可以看出纹理映射的2个关键问题了:
  1. 建立纹理坐标映射函数
  2. 确定对应坐标的纹理值并且不引入过多的走样

纹理坐标函数

纹理坐标函数用来做坐标的映射,在选择坐标函数的时候,,有几点需要考虑:
Bijectivity:不同的点最好对应不同的纹理坐标
Size distortion: 在图像上两点的距离应该和对应纹理坐标的距离比例固定
Shape distortion:图像变形不能太严重,比如对于一个圆,对应的纹理坐标也应该是一个圆
Continuity:图像上相邻的点对应的纹理坐标也应该相邻

接下来看几种常见的映射函数,对应的测试图像如下:


image.png

Plannar Projection
方法是:

image.png
对应的效果是:
image.png
Spherical Coordinates
这时候的物体最好是球体,对应的公式如下:
image.png
对应的效果如下:
image.png
Cylindrical Coordinates
对于柱状物体,用类似柱状的映射方法会效果更好:
image.png
对应的效果如下:
image.png
Cubemaps
还有一种方式是把坐标映射到6个立体声面上,然后针对各个面找对应的问题坐标:
image.png
OpenGL用的方法如下:
image.png

插值纹理坐标

通过插值的方式也可以做纹理映射,通过记录纹理的三角形顶点坐标,就可以通过重心定理插值了。


image.png

不过会引入Size Distortion,如果图像和纹理的三角形面积差不多,那么差异会小一些,如果面积区别大,那么对应的差异也会很明显。
如下图所示:


image.png
人脸上灰色的正方形,鼻子处明显会小于太阳穴处。
当图像和纹理大小不一样的时候,比如纹理映射函数计算出的坐标超过了纹理的范围,这时候就可以采取一些措施,或者是返回一个默认值,或者是进行回绕。
image.png

下面是回绕的效果:


image.png

透视纠正插值

在映射的时候,还需要考虑到视图的场景,如下图所示:


image.png

左边是正确的结果,右边是错误的,在计算纹理坐标的时候就需要考虑到透视的场景,方法如下:


image.png

连续和接合

有时候连续性是避免不了的,这时候就需哟啊引入接合处,表示纹理坐标会突然变化。不过结合处也需要对一些场景进行特殊处理。在球面映射的时候,如下图所示:


image.png

对于左边的地球,在插值处涉及到了经度变化,这时候插值就可能不是相邻点插值,而是反方向绕地球一圈,比如167E到179W,这时候就需要在接合处共享纹理坐标,在遇到167E到179W场景时,不需要绕地球一圈,只需要按照167E到181E处理即可,也就是右边的效果。

相关文章

  • 纹理映射(一)

    本篇介绍 使用纹理可以表示比较复杂的图形,比如磨损的金属,粗糙的皮肤,有褶皱的衣服等,而纹理映射也不是简单的坐标映...

  • 投影纹理映射与阴影 |《GPU编程与CG语言》笔记(三)

    投影纹理映射 这部分《Unity》一书里只是提了下概念,没有详细的说明。投影纹理映射和普通的纹理贴图不同,它是像用...

  • 透视纹理映射

    伪3D中的贴图纹理的透视矫正深入探索透视纹理映射(上)深入探索透视纹理映射(下)Perspective Textu...

  • 八、OpenGL - 纹理金字塔

    一 初始化数据 生成纹理对象 绑定纹理 读取纹理文件 设置纹理参数 载入纹理 创建金字塔并设置纹理顶点映射 二 渲...

  • 10.OpenGL 纹理知识与API学习记录

    一、什么是纹理 纹理,英文是texture,中文可以翻译成纹理、纹理图、纹理映射等等一堆东西。不过不管翻译成啥,讲...

  • Mip映射纹理

    Mipmap是一个功能强大的纹理技术,它可以提高渲染的性能以及提升场景的视觉质量。它可以用来解决使用一般的纹理贴图...

  • Opengles 纹理映射

    在纹理坐标系中有一个命名为 S 和 T 的 2D 轴(类似于 X 轴 和 Y 轴)。纹理的尺寸为从 S 轴上从 0...

  • 一看就懂的OpenGL ES教程——临摹画手的浪漫之纹理映射(理

    通过阅读本文,你将获得以下收获:1.什么是纹理2.纹理如何进行映射3.纹理映射相关细节要点 上篇回顾 上一篇一看就...

  • 高级纹理

    这章介绍 立方体纹理(cubeMap)实现环境映射,渲染纹理(Render Texture)和程序纹理(Proce...

  • 《Unity Shader入门精要》| 读书笔记(三)

    继续来看纹理! 第7章 基础纹理 普通纹理 纹理映射:用一张纹理贴图来代替物体的漫反射颜色,漫反射颜色类似于绘画里...

网友评论

      本文标题:纹理映射(一)

      本文链接:https://www.haomeiwen.com/subject/pyogmrtx.html