2012-05-28 3 views
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]; 

: 이것은 내 매핑 코드?

답변

1

저는 문제는 당신이 u 계산에서 일부 사인 정보를 잃어 버렸다고 생각합니다.

주어진 z 및 y 쌍에 대해 구면에 점이 있습니다. 이 모호성을 해결하려면 asin 대신 atan2을 사용해야합니다. 코드는 다음과 거의 같을 것이다

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

당신은 atan2에 인수를 정상화해야 할 수도 있습니다 -하지만 대부분의 구현에 당신이 필요하지 않습니다.

+0

완벽하게 작동합니다. :) – gfauchart