球面全局参数化——图形学

这一切的前提是你的模型以(0.0,0.0,0.0)为中心

想象你的模型被一个球包裹住了在这里插入图片描述

如上图所示,从球心向外发出的半径射线能够过交模型上一点,同时交球面上一点,也就是模型上的点可以和球面上的点一一对应,只要按照球面上纹理坐标的指定方式为模型上每个点指定纹理就行了。

纹理坐标

在这里插入图片描述
假设上面是你的图片,那么OpenGL的纹理坐标范围是上面那种(0,0)-(1,1)的,你要把这样一个图片铺在一个球上,要为球面上的点指定纹理坐标。
glTexCoo……
好了我忘记了哪个函数了。

怎么指定球面的(u,v)纹理坐标呢?

想象你的球像经线和纬线那样
在这里插入图片描述
很明显,纬线上的点纹理坐标的y值是相同的,经线上的点纹理坐标的x是相同的。

先来看v

一条纬线在一个球上是圆的,上面每一个点都有(x,y,z)坐标,怎么样才能用各自的x,y,z 映射出一个从 0 - 1的纹理v呢?
在这里插入图片描述
北极点的位置纹理应当设为0.0,南极点设为1.0那么用下面的式子就可以了
v = 0.5*(1- z/sqrt(x^2+y^2+z^2))
这样就可以满足纹理坐标v 从北纬0度到南纬0度递增,而且范围正确。

现在到u

纹理坐标的u,上面图已经告诉你每一条经线上的u都要是一样的在模型坐标中,每一条经线上的x、y的比值是一样的!!!那么契机来了。
在这里插入图片描述
需要把它而分成8个部分,每个部分使用它前面那个确定了的u值加上 0.125*(以某种方式确定的从0到1的范围很明显这是可以用,模型坐标x/y或者y/x来表示)例如:0.0 - 0.125 区间的u=0.0+0.125*y/x

好了大致就是这样的,最终纹理坐标的u值使用模型坐标x,y的比值映射出来,纹理的v使用模型坐标的z/sqrt(……)映射出来

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值