저는 RayTracer에서 작업 중입니다. 원뿔과의 교차점을 계산하려고 할 때 내가 잘못하고있는 것을 파악할 수 없습니다. 나는 광선 벡터와 축이있는 원뿔의 위치를가집니다. 간단한 축을 따라 원뿔을 계산하는 것은 쉽지만 임의의 축을 사용하여 원한다는 것을 알고 있습니다. 나는 그것을 회전 할 수 있도록임의의 축을 따라 원뿔을 Raytracing
alpha = cone->angle * (PI/180);
axe.x = 0;
axe.y = 1;
axe.z = 0;
delt_p = vectorize(cone->position, ray.origin);
tmp1.x = ray.vector.x - (dot_product(ray.vector, axe) * axe.x);
tmp1.y = ray.vector.y - (dot_product(ray.vector, axe) * axe.y);
tmp1.z = ray.vector.z - (dot_product(ray.vector, axe) * axe.z);
tmp2.x = (delt_p.x) - (dot_product(delt_p, axe) * axe.x);
tmp2.y = (delt_p.y) - (dot_product(delt_p, axe) * axe.y);
tmp2.z = (delt_p.z) - (dot_product(delt_p, axe) * axe.z);
a = (pow(cos(alpha), 2) * dot_product(tmp1, tmp1)) - (pow(sin(alpha), 2) * dot_product(ray.vector, axe));
b = 2 * ((pow(cos(alpha), 2) * dot_product(tmp1, tmp2)) - (pow(sin(alpha), 2) * dot_product(ray.vector, axe) * dot_product(delt_p, axe)));
c = (pow(cos(alpha), 2) * dot_product(tmp2, tmp2)) - (pow(sin(alpha), 2) * dot_product(delt_p, axe));
delta = pow(b, 2) - (4 * a * c);
if (delta >= 0)
{
t1 = (((-1) * b) + sqrt(delta))/(2 * a);
t2 = (((-1) * b) - sqrt(delta))/(2 * a);
t = (t1 < t2 ? t1 : t2);
return (t);
}
내가 y 축으로 내 축 초기화 :
여기 콘 방정식에 대해 (7-8 페이지)을 링크 http://mrl.nyu.edu/~dzorin/rend05/lecture2.pdf를 사용하고있어 내 코드입니다. 다음은 내가 얻은 것입니다. http://i.imgur.com/l3kaavc.png 원뿔 대신 오른쪽에 포물선 모양의 빨간색이 있으며, 원뿔과 거의 같은 방정식입니다.
구현해야 할 필요가 있음을 알고 있습니다. 그러나 지금은 공식이 올바른지, 내가 잘 사용했는지 알고 싶었습니다. – Frolanta
@Frolanta 흠, 행운을 빌어 요 - 게시 한 PDF 링크를 읽으려고하는데 그 안에 수학 표기법이 있습니다. – Alnitak
알았지 만 내가 찾은 유일한 사람이었다. 신경 쓰지 마라. 내가 구현 한 방식을 바꿨다. 이제는 더 일반적으로 이차 방정식의 해를 구합니다. 시도해 줘서 고마워! – Frolanta