0

我需要在不使用 OpenGL 的情况下在 c/c++ 中制作一个球体光线追踪器。我对如何在没有任何 gl 功能的场景中放置球体或灯光感到困惑。有人可以解释一下如何做到这一点吗?

4

1 回答 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 回答