首页 > 球面贴图,立方体贴图的比较

球面贴图,立方体贴图的比较

因为要设计AR系统,但是纠结是用cube还是Sphere mapping,cube mapping比较熟悉,但是网上关于sphere mapping的资料少之又少,只怪智商太低太原理的又看不懂,所以花了很长时间,主要是靠下面几个链接和那篇论文理解透的。总之,还是用Cube吧。。。。

参考资料:

http://www.twinklingstar.cn/2014/1322/environment-mapping/

https://forums.oculusvr.com/developer/discussion/39590/cube-vs-sphere-for-pano-projection

http://www.inf.ed.ac.uk/teaching/courses/cg/lectures/slides9.pdf

https://blog.csdn.net/seamanj/article/details/9416935

最后的链接比较直接:

Sphere mapping 是基于这样一个事实:将一个理想高反射的球体置于场景中央,从一个角度无穷远处拍摄此球体,将得到一张全景图。

例如:

当然说是全景图,但是在球体背对拍摄方向的场景是看不到的,所以这个全景图是言过其实的,但是的实际效果上是不错的。

通常我们在场景建模中朝z轴正方向,利用正交投影模拟无穷远处进行渲染就可以得到这个纹理图 或者其它方法。

得到全景图纹理,如何将这个纹理应用与其他物体上呢?

举个例子,比如需要映射茶壶上的一个点(A点),首先计算眼睛(E点)在这点的反射向量r。如何计算r?

很简单 r = 2 * (v · n)*n - v

其中v为顶点A到E的单位方向向量:v =normalize( E - A);

n为顶点A的单位法线向量。 这样得到的r也为单位向量。

现在我们得到了茶壶上A点眼睛在这点的反射向量,那么如何从纹理上找出与之对应的点呢?

很简单,我们只需要找出纹理上的某点(B点),眼睛在B点的反射向量与A点中眼睛在A点的反射向量一致即可。

注意:这里观察A点和观察B点的眼睛坐标是不一样,另外A点的单位法向量已经知道,B点的单位法向量并不知道

所以,这里我们需要假设B点中眼睛的反射向量与A点中眼睛的反射向量一致即也为r,从而求出B点的球面坐标

这里最最重要的一点是需要知道的是:纹理是从(0,0,1)方向拍摄的(即B点眼睛的坐标)(注意DX里面是(0,0,-1)),所以将知道的反射光线和(0,0,1)相加,就得出了对应的法线值。 即(r.x,r.y,r.z+1)为B点法线的值,将它进行单位化(r.x,r.y,r.z+1)/sqrt(r.x*r.x+r.y*r.y+(r.z+1.0)*(r.z+1.0)).这样就得到B点处的单位法线向量n'。

由于点B是在球面上,所以单位法线向量可以想像成点B在单位球面上,为了从3维的球面(当然只是前半球)映射到2维的单位圆上(注意只是个圆,不是正方形),只需要取n'.x,n'.y为2维纹理坐标即可完成映射。

最后这样得到的2维纹理坐标范围为[-1,1],由于纹理坐标的范围为[0,1],我们需要将坐标范围缩小一半,并右移0.5就得到纹理坐标范围。 OK,整个流程结束!

 

论文:Spherical, Cubic, and Parabolic Environment Mappings

 

更多相关:

  • 2009年3月17日 阅读评论 发表评论     这个应该算是补遗漏,去年在MSN Space上写过一篇关于凹凸贴图的,当时写了半天其实写的一点也不明白,呵呵,因为有很多细节其实我也没搞太清楚,现在这里发一点关于其中一个用来完成凹凸贴图计算中将光向量转向顶点所在的切向量的细节,这个在当时的例子中是通过API实现的,这里简单描述一...

  • 2020.2.5 疫情持续蔓延,在家无聊便解决标题所述问题。 若纹理加载是initializeGL()中,而在QtOpenGL的initializeGL()在程序运行时只运行一次,如果我的图像是通过上一步得到而不保存在本地,那么更换纹理变成了一个棘手的问题。 我曾尝试用extern、static等方法在类与类之间传递数据,但是依然...

  • 为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。 纹理坐标在x和y轴上,...

  • Blender纹理基础学习视频教程 CGCookie – Fundamentals of Texturing in Blender Blender纹理基础学习视频教程 CGCookie – Fundamentals of Texturing in Blender Blender纹理基础学习视频教程 CGCookie –...

  •  风格化手绘纹理包 CGTrader – Stylized Mix Vol. 41 – Hand Painted Texture Pack CGTrader–风格化混合第41卷–手绘纹理包 大小解压后:343M 信息: 7种风格化材料的包装。格式:. png .uproject .unitypackage 特点: 7种独特...

  • 在进行UI设计中常会遇到各种数值单位,开始使用时也常搞混,于是搜集了单位解说的文章与大家一同分享 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。   px: pixels(像素). 不...