2

球にワールドテクスチャをフィットさせようとしています。ほぼ機能していますが、テクスチャが2回繰り返されています。これは私のマッピングコードです:

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];

この問題の原因は何ですか?

4

1 に答える 1

1

問題は、uの計算でいくつかの符号情報が失われたことだと思います。

与えられたzとyのペアの球上に点があります。このあいまいさを解決するatan2には、の代わりにを使用する必要がありasinます。コードはおおよそ次のようになります。

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

引数を-に正規化する必要があるかもしれatan2ませんが、ほとんどの実装では、正規化する必要はありません。

于 2012-05-29T00:07:12.000 に答える