【问题标题】:Raytracing spherical texture光线追踪球面纹理
【发布时间】:2012-06-03 04:02:06
【问题描述】:

我正在尝试在球体上拟合世界纹理。它几乎可以工作,但纹理重复了两次。这是我的映射代码:

v = acosf(sp->coll->z / (double)sp->radius) / M_PI ;
u = asinf(sp->coll->y / ((double)sp->radius * sinf(v * M_PI))) / M_PI;
u += 0.5;
// u and v are between 0 and 1
i = (int)((float)texture->xsize * (v - ((int)v)));
j = (int)((float)texture->ysize * (u - ((int)u)));
this->color = texture->map[j][i];

可能导致此问题的原因是什么?

【问题讨论】:

    标签: c math geometry textures raytracing


    【解决方案1】:

    我认为问题在于你在 u 计算中丢失了一些符号信息。

    对于给定的 z 和 y 对,球面上有一些点。要解决这种歧义,您应该使用atan2 而不是asin。代码大致如下:

    u = atan2(sp->coll->y, sp->coll->x)/(2*PI);
    

    您可能需要将参数标准化为atan2 - 但在大多数实现中您不需要。

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多