away3d的贴图原理



我正在做这样一个东西,在球体的表面,贴上多张图片,如四张图片,其实很简单,如果你明白它的贴图原理。
away3d空间中的最小单位是Face(surface的简称),也就是一个三角形Triangle(但是Face和Triangle分别是两个不同的类),每一个模型(sphere,cube等)都是由很多个Face组成的。Face中最重要的内容是:
(1)三个x,y,z坐标的点a(x1,y1,z1),b(x2,y2,z2),c(x3,y3,z3),这三个点决定了三角形在三维空间中的位置;
(2)三个U,V坐标的点(u1,v1),(u2,v2),(u3,v3),这三个坐标是二维平面上的坐标,范围是0~1,决定了三角形的贴图信息。如果要给三角形贴上一个长为w,宽为h的图片,那么,空间中的点(x1,y1,z1)就对应着图片上(u1*w,v1*h)这个点,同理其他两个点也是如此,所以贴图时,只是把图片上(u1*w,v1*h),(u2*w,v2*h),(u3*w,v3*h) 这三个点围起来的三角形的颜色值完全拷贝出来绘制到三维空间的那个目标三角形上。

明白了这个道理。要给球体贴4张图,有两个办法,如下:
1.取出组成球体的所有三角形,改变每个三角形的材质和uv坐标即可。假设4张图要贴在球体上,我们假设四张图组成一张大图globeImg,球体上每个三角形的uv是相对于这张大图globeImg的,所以只要改变uv的值为相对于4张小图就可以。例如某一点的uv为(0.75,0.70),经过计算,假设经过计算这个点对应于第3张小图,那么改变后的uv就是(0.25,0.20),其他两个点同理,再把这个三角形的材质改为第3张图就可以。 要注意的问题是,有可能三角形的3个点不在同一张小图上,遇到这种情况就要自己处理(把三角形再分割,或者其他方法)。

2.知道球体的投影算法,把四张小图以某种方法进行分割,分割成连续的三角形集合,并对每个三角形进行球体投影(即把平面上的uv坐标投影成球体上的某一点(x,y,z)),成为三维空间的一个三角形(有uv,有x,y,z坐标,有材质),绘制这些三角形。属于同一张小图上的三角形的材质就是这张小图。要注意的问题是:每个三角形的uv值是相对于小图片的,而进行球体投影时要把uv转换成相对于整张地图的x,y坐标值,再进行球体投影。-------->因为我最终要实现的是B/S模式的球体地图,所以最终采用了这种方法。

原文出处:http://www.cnblogs.com/jdksummer/articles/2592612.html

  • No Comments Yet

添加新评论 »

captcha