Ray-tracer循环排序

时间:2014-02-18 04:11:14

标签: raytracing

追踪并发现了一个意想不到的问题。如果我写了光线跟踪器的两个主要循环,负责图像像素的那个循环:

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

我得到了这个扭曲的图像。 (实际上,facebook以某种方式将图像固定在图像上,甚至比真实图像还要多,但重点是代码会生成多个带有某种扫描线的镜像球体(实际上更小)

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

getHeightgetWidth为我提供了图像的高度和宽度。 以下是一些我认为可能有用的代码:

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

第一部分是摄像机位置,第二部分是方向 我不知道为什么会这样,并会感激任何意见。如果需要更多代码来评估问题,请询问。

1 个答案:

答案 0 :(得分:0)

问题在于,虽然你正在改变for循环的顺序,但你并没有改变索引。你应该试试:

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

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