投影矩阵的教程 Introduction Projective texture mapping is a method of texture mapping described by Segal [3] that allows the texture image to be projected onto the scene as if by a slide projector. Figure 1 shows some example screen shots from the projspot demo, available in the NVIDIA OpenGL SDK. Projective texture mapping is useful in a variety of lighting techniques, including shadow mapping [4]. This document provides some background and describes the steps involved in projective texture mapping in OpenGL. Projective texture mapping refers both to the way texture coordinates are assigned to vertices, and the way they are computed during rasterization of primitives. We usually think of texture mapping as “the application of a texture image to a primitive,” and while it certainly is that – there is more math going on than most folks think. If you have ever written your own rasterizer with support for mipmap filtered, perspective-correct, projective texture mapping, you no doubt became aware of the many subtle issues involved. We will begin by discussing the way that texture coordinates are computed during rasterization, and then we will discuss methods for assigning the texture coordinates to the vertices. We do not discuss filtering here, but there is a paper on Anisotropic Filtering at the NVIDIA developer web site that provides a good introduction to that topic. Figure 1. ### 项目式纹理映射(Projective Texture Mapping) #### 引言 项目式纹理映射是一种由Segal在文献[3]中所描述的纹理映射方法,它允许将纹理图像像幻灯片投影一样投射到场景中。图1展示了一些来自NVIDIA OpenGL SDK中的projspot演示的屏幕截图示例。项目式纹理映射在多种光照技术中都非常有用,包括阴影映射[4]。本文档提供了一些背景知识,并描述了在OpenGL中实现项目式纹理映射的步骤。 #### 项目式纹理映射概念 项目式纹理映射不仅指定了如何为顶点分配纹理坐标,还包括了这些纹理坐标在绘制原始图形时是如何计算的。通常我们会认为纹理映射是“将纹理图像应用于原始图形”,但实际上涉及到的数学原理远比大多数人想象的复杂。如果你曾经编写过支持mipmap过滤、透视校正、项目式纹理映射的自定义光栅化器,那么你很可能已经意识到了其中的许多微妙问题。本文将首先讨论纹理坐标的计算过程,然后讨论为顶点分配纹理坐标的方法。这里不讨论过滤技术,但NVIDIA开发者网站上有一篇关于各向异性过滤的论文可以作为入门参考。 #### 图1:不同视图下的笑脸纹理映射实例 图1展示了两个不同的视角下,笑脸纹理被投射到场景中的效果。可以看出,在不同的角度下,纹理仍然能够保持正确的比例和位置,这正是项目式纹理映射的优势所在。 #### 光栅化细节 在进行项目式纹理映射时,我们使用齐次纹理坐标或称项目空间坐标。而在进行非项目式纹理映射时,则使用实纹理坐标或称实空间坐标。对于2D项目式纹理映射,3维的齐次坐标(s,t,q)会在原始图形上进行插值处理,然后在每个片段处,插值得到的齐次坐标会被投影成实的2D纹理坐标(s/q,t/q),以此来索引纹理图像。而对于非项目式的2D纹理映射,2维的实坐标(s,t)会在原始图形上进行插值处理,并直接用于索引纹理图像。 图2中的图像说明了在项目空间与实空间中插值的区别。在项目空间中插值时,纹理坐标在原始图形的不同部分之间的变化更加平滑且符合透视原理,而实空间中的插值则无法实现这样的效果。 #### 齐次坐标系统 齐次坐标是一种在计算机图形学中常用的坐标表示方式,特别是在三维空间中。使用齐次坐标的主要优势在于能够用线性变换表示仿射变换(如缩放、旋转和平移)。在项目式纹理映射中,我们采用齐次坐标系统来处理纹理坐标,因为这种坐标系统能够更好地处理透视效应。 #### 纹理坐标插值 在进行光栅化时,为了确定每个像素(片段)的颜色,需要对顶点之间的纹理坐标进行插值。对于项目式纹理映射,纹理坐标是以齐次坐标的形式进行插值的,这意味着在顶点之间插值时,会保留齐次坐标的形式,直到最终在片段着色器中将其转换回实纹理坐标。 #### 纹理坐标转换 在片段着色器中,齐次纹理坐标(s,t,q)通过除以其齐次分量q(即(s/q,t/q))被转换为实纹理坐标。这一操作确保了纹理坐标能够正确地根据视点的位置进行透视校正。 #### 应用案例 项目式纹理映射在许多场景中都有广泛的应用,尤其是当需要模拟光线或光源投射的纹理效果时。例如,在游戏开发中,它可以用来实现动态光影效果,比如地面投影、环境光遮蔽等。此外,它还可以用于阴影映射,从而实现更真实的场景渲染效果。 #### 总结 项目式纹理映射是一项重要的计算机图形学技术,它允许开发者在三维场景中应用复杂的纹理效果。通过理解其基本原理,开发者可以更好地利用这项技术来提高渲染质量和真实感。无论是游戏开发还是其他图形应用程序,掌握项目式纹理映射都是一个非常有价值的技术点。
- shangxuan20112014-08-19讲的到时挺好,可惜没有源码实现啊
- 粉丝: 2
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助