Raycasting / Raytracing: съемка лучей с камеры - PullRequest
2 голосов
/ 20 мая 2011

Я пишу простой raytracer / raycaster в c #.У меня был опыт работы с Векторами, поэтому я написал класс под названием Vector3D, как вы можете видеть в приведенном ниже коде.Я также написал класс для обработки лучей.Сейчас я обеспокоен тем, чтобы лучи исходили от камеры и передавались ко всем пикселям на экране, а затем к объектам перед камерой на сцене.Я истек с записью текста в вывод (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!
                }
            }
        }

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Кажется, ваша камера излучает лучи вниз по оси z, если это то, чем вы были после того, как она выглядит хорошо.Обратите внимание, что направление вашего луча не нормировано, что может быть или не быть проблемой в дальнейшем.Вы должны помнить об этом и действовать соответственно.Во всяком случае, я думаю, что для самых базовых учебник Фантома - это то, что заставило меня начать (и увлекаться!) Трассировкой лучей, и я думаю, что это может быть хорошим чтением для вас.

1 голос
/ 20 мая 2011

Я не уверен, что полностью понимаю, чего вы пытаетесь достичь, но, возможно, это может помочь:

  1. Поместите сферу на расстоянии от камеры
  2. ВыводВаша трассировка лучей приводит к PPM-файлу.Формат PPM действительно тривиален .
  3. После того, как это сделано, просто откройте файл PPM в редакторе изображений и посмотрите, видите ли вы кружок

Кроме того,если вы планируете создавать сложные сцены, вы можете рассмотреть что-то более эффективное, чем повторение всех объектов сцены на каждом луче.

...