我需要在不使用OpenGL的情况下用c / c ++制作球体光线跟踪器。我很困惑,但是如何在没有任何gl功能的场景中放置球体或光线。有人可以解释一下如何做到这一点?
答案 0 :(得分: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。