3D编程:Texture Filtering

Texture Filtering

在讨论纹理坐标和采样时,你可能已经注意到了,没有一种纹理映射object能够做到使纹理图上的元素与渲染到屏幕上的像素之间一一对应。Camera位于textured object任意的位置,并从任意的角度观看。想像下这种情形,camera相对textured object进行放大,Rasterizer阶段确定哪些pixels会发送到pixel shader中,并对纹理坐标进行插值计算,此时纹理坐标表示的位置在纹理中的元素之间。换句话说,就是以比纹理图片本身分辨率更高的方式来渲染纹理。Texture filtering的目的就是确定哪些颜色值会被用于pixels中,因为这些pixels无法在纹理中直接一一对应的找到。

Magnification

上面所描述的情形就是magnification,在这种情况下,需要渲染的pixels比纹理图中包含的元素要多。Direct3D支持三种filtering用于确定这些pixels的颜色值:point filtering,linear interpolation,以及anisotropic filtering(点滤波,线性插值,和各向异性滤波)。

Point Filtering

Point filtering是计算速度最快的filtering选项,但图片的质量也是最低的。Point filtering也称为nearest-neighbor(邻近取样) filtering,只是简单的使用纹理中与pixel中心最接近的坐标颜色值。如图5.5,左图中显示了使用point filtering产生的blocky-looking(块状)图片。

图5.5 The results of point filtering (left) and bilinear interpolation (right) on a magnified texture.

(Texture by Reto Stckli, NASA Earth Observatory.)

Linear Interpolation

Linear Interpolation是一种比point filtering质量更高的filtering选项,在linear interpolation中颜色值是通过相邻的两个纹理元素插值计算出来的。对于2D textures,更准确的说应该叫bilinear interpolation(双线性插值),因为要在水平和垂直两个方向都进行插值。使用双线性插值,首先要确定围绕pixel中心的四个纹理元素,再沿着U轴执行两次一维的线性插值,然后沿着V轴执行第三次插值,就可以产生最终的颜色值。图5.5中,右边的图片是在相同的放大纹理中使用双线性插值的结果,可以明显的看出比point filtering更平滑。

Anisotropic Filtering

Anistropy是指,在一个相对camera处于倾斜角度的表面上,投影一个纹理产生的变形程度。Anistropic filtering(各向异性滤波)就是用于减小这种变形程序,并改善渲染的输出结果。这是一种计算成本最大的filtering选项,但是产生的结果却是质量最好的。图5.6展示了使用和不使用anisotropic filtering进行纹理映射的对比效果。

图 5.6 A mapped texture with bilinear filtering (top) and anisotropic filtering (bottom).

时间: 2024-08-02 04:43:04

3D编程:Texture Filtering的相关文章

J2ME 3D编程——第一个3D程序

编程|程序 J2ME 3D编程--第一个3D程序(附源代码) 更多文章请访问:http://blog.csdn.net/mailbomb 参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习. 关于3D编程的资料,可以查阅我的blog. 关于代码的编译和运行说明如下: 1. 以下代码在J2ME WTK2.2下面编译通过. 2. 代码分为两个文件:First3DCanvas.java和First3D

J2ME 3D编程——第一个3D程序(附源代码)

参考WTK2.2提供的demo,完成了第一个3D程序,虽然很简单,而且有些问题还不是很清楚,还是把代码共享出来和愿意学习J2ME 3D编程的朋友一起学习. 关于3D编程的资料,可以查阅我的blog. 关于代码的编译和运行说明如下: 1.以下代码在J2ME WTK2.2下面编译通过. 2.代码分为两个文件:First3DCanvas.java和First3DMIDlet.java. 3.使用J2ME WTK2.2建立新的工程,主MIDlet类为:first3d. First3DMIDlet 4.将

《OpenGL超级宝典(第5版)》——第1章,第1.4节3D编程的基本原则

1.4 3D编程的基本原则 现在,我们对实时3D的基本概念已经有了相当程度的认识.我们讨论了一些术语以及PC上的一些示例应用程序.那么,如何在自己的计算机上创建这样的图像呢?好吧,这正是本书剩余部分的任务所在.不过,读者还需要知道一些基础知识,这正是我们接下来将要讨论的. 1.4.1 并非工具包 OpenGL基本上是一种底层渲染API(应用程序接口).我们不能告诉它"在什么地方绘制什么"--我们需要自己动手,通过载入三角形,应用必要的变换和正确的纹理.着色器并在必要时应用混合模式来组合

3D编程:第五章 Texture Mapping

第五章 Texture Mapping 纹理映射就是在3D object表面添加细节的过程.可以比喻成包装礼品的过程,包装纸就是一种2D纹理.纹理映射是现代渲染的基础,并用于多种有趣的图形技术中. An Introduction to Texture Mapping 相比如上一章使用HelloShaders和HelloShaders effects产生的纯色效果,通常情况你会期望在3D objects中渲染更多的细节.正如之前所讲的,3D模型由vertices组成,并组织成三角形,这些verti

3D编程:Texture Addressing Modes

Texture Addressing Modes 你可能已经注意到了在TextureMapping.fx中对SamplerState对象成员AddressU = WRAP和AddressV = WRAP的赋值.这就是纹理寻址模式,当纹理坐标超出范围[0, 1]时,你可以自行控制应该怎么显示.Direct3D支持四种纹理寻址模式:Wrap,Mirror,Clamp,Border. Wrap 在Wrap寻址模式下,在范围[0, 1]之外的部分,纹理会被当作vertex coordinates重复映射

手机上J2ME的3D编程-简单创建3D立方体(1)

编程|创建 参考文档:JSR-184 工具:Eclipse3.0+Eclipseme API:Mobile 3D Graphics API 模拟器:Sony Ericsson 分析: 在现实生活中,我们所看到的是一个3维系统.透过双眼,可以看到的是一个丰富多彩的世界.我们所用的照相机,能够拍出很多漂亮的图片.拍摄每张图片时,可以根据拍摄距离的远近可以调整所拍摄画面上的内容. 在虚拟的世界里,可以模拟真实世界.欲将虚拟世界展示出来,就要利用一个虚拟的照相机,将虚拟的世界拍摄出来. 在JSR-184

3D编程:The Direct3D 11 Graphics Pipeline

Direct3D 11图形管线 个人电脑一般都有两个处理器:CPU和GPU,你需要对每一个处理器编写代码.这两个部件拥有完全不同的架构和指令集.在图形编程中,你需要对两个处理器都都编写软件,对于CPU应用程序使用通用的语言,比如C++,对于GPU则使用HLSL.DirectX是系统之间的桥梁.大部分关于图形编程的文章都集中讲述CPU部分或者GPU部分,但是这两部分都是非常难懂的.本书两个部分都会讲解.         在DirectX里面我们主要学习Direct3D.简单来说,Direct3D是

3D编程:第九章 Normal Mapping and Displacement Mapping

第九章 Normal Mapping and Displacement Mapping 本章主要讲述两种图形学技术,支持在不增加objects的poly primitive的情况下,在场景中增加更多的细节.第一种是normal mapping,通过创建一些"fake" geometry(虚设的多边形图元)模拟光照作用.第二种是displacement mapping,根据纹理数据moving vertices actually(与"fake"相对应,这里指真实的移动

3D编程:Environment Mapping

Environment Mapping Texture cubes的另一种应用是environment mapping.Environment mapping也称为reflection mapping,用于近似模拟reflective surfaces(反光表面),比如汽车上的镀了一层金属物的保险杠. Environment mapping的处理过程比skybox稍微复杂一些,因为需要计算光线与表面的反射向量.反射向量主要由view direction(限入射角向量)和表面的法向量计算得到.具体