我需要在不使用 OpenGL 的情况下在 c/c++ 中制作一个球体光线追踪器。我对如何在没有任何 gl 功能的场景中放置球体或灯光感到困惑。有人可以解释一下如何做到这一点吗?
user1804036
问问题
1426 次
1 回答
1
光线追踪与opengl无关。它可以用桌面计算器来完成。
关键是它是用向量完成的纯几何,本质上是三个浮点变量。(甚至整数)。
您将相机“放置”在原点:ox=0,oy=0,oz=0。
您将球体“放置”在 5“米”或朝向 z 轴的单位:sx=0,sy=0,sz=5;
您开始以 90 度视野向 z 轴投射光线:
for (i=-1;i<1; i+=0.01) {
for (j=-1;j<1; j+=0.01) {
dx=i; dy=j;dz=1; // perhaps you then need to normalize the "vector" dx,dy,dz
// check if the ray hits the sphere with radius 2.3 (located at 0,0,5)
// if it does, calculate the angle of the normal of the hit point and
// the light source at position lx=1,ly=-0.5;lz=-2.33;
// if normal dot lightray is positive, calculate angle, apply Phong model
// add lambertian model, distance attenuation, fog, texturemapping
}
}
最后,您计算了 ~200 x 200 图像的像素强度或颜色值。此示例使用 90 度 FoV。
于 2012-11-06T19:22:28.663 回答