光线投射/光线追踪:从相机拍摄光线

| 我在C#中编写一个简单的raytracer / raycaster。我过去曾使用Vectors到期,所以我写了一个叫做Vector3D的类,如下面的代码所示。我还写了一个课程来处理光线。现在,我担心要确保光线是从相机发出的,并投射到屏幕上的所有像素,然后投射到场景中相机前面的对象。我已经过期了将文本写入Output(Debug.WriteLine)的期限,尽管很难确定它是否确实有效。以下代码是否合适,或者您会推荐其他方法或站点来推荐/指导我?
for (int x = 0; x < sizeofoutput.Width; x++)
{
    for (int y = 0; y < sizeofoutput.Height; y++)
    {
                Vector3D lookat = new Vector3D(sizeofoutput.Width / 2, sizeofoutput.Height / 2, 0);
                Vector3D lookatrev = new Vector3D(lookat.X * -1, lookat.Y * -1, 0);
                Vector3D tmp2 = lookatrev + new Vector3D(x, y, 0);
                Vector3D campos = new Vector3D(0, 2, -6); // camera position.
                Vector3D raydir = tmp2 - campos; // ray goes into a pixel.
                Vector3D rayorg = campos; // ray starts at camera.
                Ray ray = new Ray(rayorg); // create the ray from the data provided.
                ray.Direction = raydir;
                for (int c = 0; c < sceneobj.Length; c++)
                {
                    // find object and render!
                }
            }
        }
    
已邀请:
如果这是您看起来不错的结果,则您的相机似乎正在沿z轴发射光线。请注意,光线的方向未标准化,以后可能会或可能不会出现问题。您必须牢记这一点并采取相应的行动。无论如何,我认为对于Phantom的基础教程来说,这是使我开始(而且上瘾!)进行光线跟踪的原因,我认为这对您来说可能是一本好书。     
我不确定我是否完全理解您要达到的目标,但这也许可以帮助您: 将球体与相机保持一定距离 将射线跟踪结果输出到PPM文件。 PPM的格式确实很简单。 完成后,只需在图像编辑器中打开PPM文件,看看是否看到圆圈 另外,如果您计划使用复杂的场景,则可能需要考虑比遍历每条射线的所有场景对象更有效的方法。     

要回复问题请先登录注册