光线追踪出了问题

本文关键字:问题 光线追踪 | 更新日期: 2023-09-27 18:10:06

我试图做一个简单的光线追踪分配,在c#(从python移植)。我已经设法使示例代码显示正确的图片,但是当我试图将其适应我的任务时,出现了问题。

如果我知道哪里出了问题,我会发布一些我认为可能有帮助的代码,但我不知道从哪里开始。

基本上我的赋值输出是这样的:

http://i56.tinypic.com/2vcdobq.png

使用镜面高亮,和

http://i53.tinypic.com/2e1r38o.png

把它关掉。它应该看起来像:

http://i56.tinypic.com/2m7sxlh.png

我的Phong照明公式如下:

Colour I = diffuse_colour;
Vector L = light.vector;
Vector N = normal; //FIXME!
Colour Is = diffuse_colour * light.intensity;
Colour Ia = new Colour(1,1,1) * light.ambient;
Colour Kd = specular_colour;
Colour Ka = Kd;
double Ks = sharpness ?? 0.4;
Vector H = Vector.unit(view + L);
//Phong Illumination
//I = KaIa + KdIs max(0,L.N) + KsIs (H.N)^n
I = Ka * Ia
+ Kd * Is * Math.Max(0, L.dot(N))
+ Ks * Is * Math.Pow(H.dot(N),200); //FIXME?

我从工作示例代码中复制了它,所以我知道它可以工作。

有什么想法就太好了,因为我被难住了

光线追踪出了问题

同一算法有两个实现。你声称它们会产生不同的结果。查找错误似乎很简单:同时在各自的调试器中一步一步地运行这两种算法。仔细观察这两个程序的状态。当它们产生不同的程序状态时,你的错误就出现了。

事情并没有那么简单,因为一个是用python实现的,另一个是用c#实现的。原来有两件事是错的。

首先,在point类中有一个重载操作符是错误的。在2个点上,我让它返回向量(p1)X - p2。x, p1。Y - p2。y, p1。X - p2.x)……最后一对应该是p.z

我犯的另一个错误是当我保存位图图像时,我得到了列和行混合,在x和y方面(Col = x, Row = y)

希望这能帮助到像我一样遇到随机问题的人:p

当我在编写我的光线追踪器时,我已经研究了这篇文章,以便更好地了解Phong Illumination。所以,看看这里,我相信你会有一个想法:

www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/phong-illumination-explained-r667