2011-05-19 37 views
2

我正在用c#寫一個簡單的raytracer/raycaster。我在Vector中已經過期了,所以我寫了一個名爲Vector3D的類,如下面的代碼所示。我也寫了一堂課來處理光線。就目前而言,我擔心的是確保光線從相機出發,然後被投射到屏幕上的所有像素,然後投射到場景中相機前面的物體。我已經將文本寫入輸出(Debug.WriteLine),儘管很難看到它是否真正起作用。下面的代碼是否合適,或者你會推薦其他方法或網站來引用/引導我?Raycasting/Raytracing:拍攝來自相機的光線

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

你的相機似乎是向z軸發射光線,如果這是你看起來很好後的樣子。請注意,您的光線方向未經過標準化,以後可能會或可能不會成爲問題。你必須記住它並採取相應的行動。無論如何,我認爲基本知識Phantom's tutorial是讓我用光線追蹤開始(並上癮!),我認爲這可能是一個很好的解讀。

+0

+1。斷開的鏈接。 – 2013-12-04 10:35:57

+0

謝謝,更新了一個仍在線的副本。 – Waldheinz 2013-12-04 15:24:02

1

我不知道我很明白你想達到什麼樣的,但也許這可以幫助:

  1. 從相機
  2. 輸出的光線將一個球在距離跟蹤結果到PPM文件。 PPM的格式是really trivial
  3. 它完成之後,只需打開PPM文件中的圖像編輯器,看看如果你看到圓

另外,如果你打算在具有複雜的場景,你可能要考慮的東西比通過迭代更有效每條光線上的所有場景物體。

+0

謝謝。這並不是我正在尋找的東西,但我相信當我去建立我的raytracer時,我會在附近的未來發現它。我會嘗試使用PPM文件,看看它是否工作。 – seesharper 2011-05-19 21:17:49