我正在尝试使用c#(从python移植)进行简单的光线跟踪分配。 我已经设法让示例代码显示正确的图片,但是当我尝试将其调整到我的作业时出现了问题。
如果我知道出了什么问题,我会发布一些我认为可能有帮助的代码,但我不知道从哪里开始。
基本上我的作业输出如下:
http://i56.tinypic.com/2vcdobq.png
使用镜面反射突出显示,
http://i53.tinypic.com/2e1r38o.png
关闭它。 它假设看起来像:
http://i56.tinypic.com/2m7sxlh.png
My 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?
我从工作示例代码中复制了它,所以我知道它有效。
任何想法都会很棒,因为我很难过。
答案 0 :(得分:4)
您有两种相同算法的实现。你声称他们产生了不同的结果。找出错误似乎很简单:同时在各自的调试器中逐步运行两种算法。仔细观察两个程序的状态。他们产生不同程序状态的那一刻,就是你的错误。
答案 1 :(得分:0)
它不是那么简单,因为一个实现是在python中,另一个是在c#中。 事实证明有两件事是错的。
首先,在我的观点类中,我的一个重载运算符是错误的。 (操作员 - 在2点,我让它返回Vector(p1.x - p2.x,p1.y - p2.y,p1.x - p2.x)...最后一对应该是pz而不是
我犯的另一个错误是当我保存位图图像时,根据x和y,我得到了混合的列和行。 (Col = x,Row = y)
希望这可以帮助遇到像我这样的随机问题的其他人:P
答案 2 :(得分:0)
当我在写我的光线追踪器时,我研究了这篇文章,以便对Phong照明有一个很好的理解。 所以看看这里,我相信你会得到一个想法:
www.gamedev.net/page/resources / _ /技术/图形的编程和 - 理论/蓬照明说明的-r667