二维图案映射到球体:
应用软件:VS2010;如有侵权,请联系小编;
基本原理:对球细化,我们将球等分成n块,尽量足够多,然后每一块可以看成是一个高度相同的圆柱。对图案细化,将二维图案等分成足够多的n条,与n块圆柱一一对应,这样我们可以将球体纹理映射看作成圆柱的侧表面纹理映射,所用映射函数是相同的。
细化后,设二维图案上一点P(x,y),对应在圆柱侧表面的三维坐标P1(x1,y1,z1),A是参数,调节图案的映射位置,r是圆柱半径。转换关系如下:
x1=r*cos(x/r+A);
y1=r*sin(x/r+A);
z1=A*y;
映射效果如下:
工程在MFC框架下完成。
二维图案分数维算法实现:
void CTestView::ReadSpherePoint()
{
for (int i = 0; i < 12; i++)
{
k0 = 1;
for (j = 0; j< i; ++j)
k0 = k0 * 2;
step = 4096 / (2 * k0);
for (j = 1; j <= k0; j++)
{
m = 2 * j*step;
n = 2 * (j - 1)*step;
l = (2 * j - 1)*step;
dx = x[m] - x[n];
dy = y[m] - y[n];
x[l] = x[n] + (dx + dy) / 2;
y[l] = y[n] + (dy - dx) / 2;
}
}
///分数维
tx = -20 * PI / 180;
ty = 0;
cx = 0, cy = 0;///分数维图案映射原点
r = 200;
x[0] = 200;
y[0] = 0;
x[4096] = -200;
y[4096] = 0;
w