2014-02-18 36 views
0

追踪器发现了一个意想不到的问题。如果我写的光线追踪的两个主要环路,负责图像像素的,这种方式:射线追踪器回路订购

for (int y=0; y<image.getWidth(); y++) { 
    for (int x=0; x<image.getHeight(); x++) { 

我得到这个扭曲的图像。 (实际上,脸谱螺钉图像,以某种方式,比实际更,但问题是,代码生成与某种扫描线的多个镜面球(即实际上是小)

http://s72.photobucket.com/user/john_smith140/media/zz_zps907cb287.jpeg.html?filters[user]=139318132&filters[recent]=1&sort=1&o=0

然而,如果如果我做一个小的变化,以:

for (int y=0; y<image.getHeight(); y++) { 
    for (int x=0; x<image.getWidth(); x++) { 

它可以作为一种魅力,因为可以看到下面:

http://s72.photobucket.com/user/john_smith140/media/s_zps4e50e49f.jpeg.html?filters[user]=139318132&filters[recent]=1&sort=1&o=1

getHeight,getWidth给我的图像的高度和宽度。 下面是一些更多的代码,我认为可能会有所帮助:

Ray viewRay = { {float(x), float(y), -1000.0f}, { 0.0f, 0.0f, 1.0f}}; 

,第一部分是相机的位置,第二个它的方向 我不知道为什么发生这种情况,并希望任何输入。如果需要更多的代码来评估问题,请询问。

回答

0

问题是,尽管您正在更改for循环的顺序,但您并未更改索引。您应该尝试:

for (int x=0; x<image.getWidth(); x++) { 
    for (int y=0; y<image.getHeight(); y++) { 

与您发布的两个片段进行比较。

+0

它没有工作,虽然不正确的图像不同于以前不正确的。这是结果:http://s72.photobucket.com/user/john_smith140/media/zzz_zps83ed0c45.jpeg.html?filters[user]=139318132&filters[recent]=1&sort=1&o=0 – user2752471

+0

我发布的循环是一个非常标准的 - 我不能看到更多的代码真的帮助。如果您可以发布循环内部的内容,那么对于调试这将会很有帮助。 –

+0

对不起,需要很长时间才能回答。我会发布链接到一个光线跟踪器,遭受同样的问题,我做:http://www.scratchapixel.com/assets/Uploads/Lesson001/Source%20Code/raytracer.cpp交换循环导致相同的问题我有。据我所知,我所引用的第二个代码片段构造了水平图像,您应该纵向构建图像,逐列而不是逐行构建图像,但两者都应该工作 – user2752471