如何把纹理映射到一个球体的表面

archer_hao 2005-04-29 10:46:45
怎样把纹理映射到一个球体或者其它任何物体的表面?纹理一般是一块矩形区域吧,就是说怎样把这块矩形“铺”到球体上,请赐教!
...全文
1127 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsq7118 2005-05-24
  • 打赏
  • 举报
回复
不好意思打扰一下:
有兴趣一边上网一边赚钱吗?,赚的还是美元呢。
您想轻松做兼职,超过自己的薪水!!
这绝对是真实的,cctv-10都报道了它的可信性!
特别是上班时能上网的朋友,只要能上网就能赚钱,不用你费心
详情请登陆http://freemoneycn.home4u.china.com/
立即注册http://www.cashfiesta.com/php/join.php?ref=freemoneynj
寻开心 2005-05-24
  • 打赏
  • 举报
回复
那是你的纹理图案在左右边界上图像不连续
是必然的现象,需要找无缝贴图工具处理一下
寻开心 2005-05-24
  • 打赏
  • 举报
回复
从纹理坐标的角度上考虑就是了,在H角度0和360的地方形成的是交线
对应的纹理坐标就是u的数值为0和1的地方

纹理坐标v是0和1的地方对应出来的球体的两级坐标,在这两个点u的数值从0到1都是可能的
寻开心 2005-05-24
  • 打赏
  • 举报
回复
这个线应该是从连接两级的

对于一个texture图片,它的上下两个边都被映射到了球体的上下两级了,在那里图片看起来有些拥挤
而左右边,在上下极点的一个连线上相连在一起的

所以正常的效果是,一条线连接两极,这条线是半圆,不是圆
所以让你怀疑是一半球体有,一半没有
archer_hao 2005-05-24
  • 打赏
  • 举报
回复
还有就是,这条线并不是环绕球体一周,而是一半球体有,另一半却是非常完好的,这种现象是正常的么?
archer_hao 2005-05-23
  • 打赏
  • 举报
回复
syy64(太平洋) ( ) , DX里有现成的函数完成这个工作么
archer_hao 2005-05-23
  • 打赏
  • 举报
回复
happy__888([顾问团]寻开心) , 非常感谢你的帮助,我用你的方法已经成功把一副纹理映射到了球面上,但是有一个问题,在球面上有一条“沟”,我不知道你是否能明白我的意思,就是说球面上有一条线不能被纹理正确的覆盖,请你加我的QQ:28726263,我想详细的请教你这个问题,谢谢!
gamedragon 2005-05-03
  • 打赏
  • 举报
回复
你可以这样理解,在球的两个极点间画一条线,沿着这条线剖开这个球面,在把它铺平,那么球就变成了一个平面。当然接缝地方的点要有两份,分别映射到平面的两端。
Cybergate 2005-05-02
  • 打赏
  • 举报
回复
借用cube mapping的思想。先想想怎么把纹理映射到立方体上,然后再利用cube mapping的方式往球体上映射。。。。呵呵,可能有些怪
archer_hao 2005-04-29
  • 打赏
  • 举报
回复
谢谢,还有个问题,下面这些我没怎么看明白:

把P对应到纹理的V方向, 把H对应到纹理的U方向,假定UV的范围都是0到1
那么
P->V: (P+Pi/2)/Pi
H->U: (H+Pi)/2/Pi

请你详细解释一下好么
寻开心 2005-04-29
  • 打赏
  • 举报
回复
另外,如果单纯是为了获取纹理坐标的目的,不妨从3dmax当中建模设置纹理后直接导出方便。
寻开心 2005-04-29
  • 打赏
  • 举报
回复
http://www.ciw.com.cn/media/ciw/811/d1501.htm
寻开心 2005-04-29
  • 打赏
  • 举报
回复
是的,球面只要有一个洞就在拓扑上和平面是等价的了
但是纹理会在那个洞的位置发生奇变的,必须特殊处理

常用的球面到球面的变换就是
球面点 可以用 (r, h, p) 来表示, r表示半径, h和p是两个角度,一个是俯仰角度一个是方位角度,方位角度是0到2PI范围的, 俯仰角度是-Pi/2到 Pi/2范围的
sphere(x,y,z) = {r*cosP*cosH, r*cosP*sinH, r*sinP}
反向变换就是
P = asin( z / r)
H = atan2( y / r/ cosP, x/r/cosP);
就atan2函数来说 H = atan2(y,x)
把P对应到纹理的V方向, 把H对应到纹理的U方向,假定UV的范围都是0到1
那么
P->V: (P+Pi/2)/Pi
H->U: (H+Pi)/2/Pi

因此,知道球面坐标x,y,z以及半径r后,球面点对应的纹理坐标就是:
V = asin(z/r)/Pi + 0.5;
U = 0.5* ( atan2(y,x)/Pi + 1.0 )
gamedragon 2005-04-29
  • 打赏
  • 举报
回复
happy__888:
纯数学上,球面和平面的确有质的区别。但是只要在球面上有个洞,那么球面就可以被拉伸成一个平面(拓扑学上),如果这个洞缩小成一点(歧义点被分成两个点),在坐标映射的时候,就可以实现映射。
这是我的理解。
archer_hao 2005-04-29
  • 打赏
  • 举报
回复
能否给点具体的代码呢?球体确实是由三角形组成的,问题在于,我怎么把纹理分成相对应的一个个三角形,并给每个顶点的纹理坐标赋值呢?
寻开心 2005-04-29
  • 打赏
  • 举报
回复
在拓扑学的角度上,矩形和球面之间是无法形成无障碍的对接的
因为球面是一个封闭的面,而矩形或者平面是开放的面

在映射转换的时候,肯定会存在一个歧异点

铺贴纹理的方案有很多种,比如投影的方式,包裹的方式,坐标映射的方式等等
但是就球面的纹理映射来说,那种方式都会有问题的
gamedragon 2005-04-29
  • 打赏
  • 举报
回复
如果球体是三角形组成的,就跟平面的没多大区别吧。
如果是raytacing里面的几何体(就是一个球心和一个半径),那么就要用特殊的映射方式了,比如极坐标(这个东西简直就是为球面几何设计的^_^)
syy64 2005-04-29
  • 打赏
  • 举报
回复
球体的纹理映射一般都有现成的函数啊。
寻开心 2005-04-29
  • 打赏
  • 举报
回复
这个只是一个比例和平移变换而已

通过前面的公式,你知道了从xyz坐标到r,h,p的变换了
但是计算得到的h和p的范围分别是[-pi/2, pi/2]和[-Pi, Pi]这个范围的
而你实际需要的纹理坐标的范围是[0,1]
这里就是做这个变换呢

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧