- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在从头开始构建光线追踪器。我的问题是:当我更改相机坐标时,球体变为椭圆。我不明白为什么会这样。
这里有一些图像来显示工件:
Sphere: 1 1 -1 1.0 (Center, radius)
Camera: 0 0 5 0 0 0 0 1 0 45.0 1.0 (eyepos, lookat, up, foy, aspect)
但是当我改变相机坐标时,球体看起来扭曲了,如下所示:
Camera: -2 -2 2 0 0 0 0 1 0 45.0 1.0
我不明白哪里出了问题。如果有人可以提供帮助,那就太好了!
我将我的 imagePlane 设置如下:
//Computing u,v,w axes coordinates of Camera as follows:
{
Vector a = Normalize(eye - lookat); //Camera_eye - Camera_lookAt
Vector b = up; //Camera Up Vector
m_w = a;
m_u = b.cross(m_w);
m_u.normalize();
m_v = m_w.cross(m_u);
}
之后,我从相机位置(眼睛)计算每个像素的方向,如下所述:
//Then Computing direction as follows:
int half_w = m_width * 0.5;
int half_h = m_height * 0.5;
double half_fy = fovy() * 0.5;
double angle = tan( ( M_PI * half_fy) / (double)180.0 );
for(int k=0; k<pixels.size(); k++){
double j = pixels[k].x(); //width
double i = pixels[k].y(); //height
double XX = aspect() * angle * ( (j - half_w ) / (double)half_w );
double YY = angle * ( (half_h - i ) / (double)half_h );
Vector dir = (m_u * XX + m_v * YY) - m_w ;
directions.push_back(dir);
}
之后:
for each dir:
Ray ray(eye, dir);
int depth = 0;
t_color += Trace(g_primitive, ray, depth);
最佳答案
在玩了很多之后,在你们所有人的评论的帮助下,我能够正确地成功创建我的 rayTracer。很抱歉回答晚了,但我想用几句话结束这个话题。
所以,上面提到的代码是完全正确的。基于我自己的假设(如上述评论中所述),我决定像这样设置我的相机参数。
我上面提到的问题是相机的正常行为(正如上面评论中提到的)。
我现在得到了很好的结果,但是在编写 rayTracer 代码时几乎没有什么要检查的:
double angle = tan((M_PI * 0.5 * fovy) / 180.0);
double y = angle;
double x = aspect * angle;
2) 在计算三角形交集时,确保正确实现叉积。
3) 在使用不同对象的交点时,确保找到与相机距离最短的交点。
这是我得到的结果:
上面是一个非常简单的模型(由 UCBerkeley 提供),我对其进行了光线追踪。
关于c++ - 光线追踪 : Sphere distortion due to Camera Movement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186663/
您好,我想使用 Fisheye Distortion plugin对于我在 d3.js 中的力导向图,但是当我想应用这个插件时,图的行为很奇怪。我是 d3.js 的新手,不擅长计算机图形学。 comp
我正在使用python编写一个音频文件。以下是我的代码片段。。。问题是,我显示生成的音频样本,然后编写它。然而,当我在写入后阅读相同的文件时,它被完全改变/扭曲。这两个图显示了写入音频样本之前和之后的
我正在尝试在powershell中构建一个“连接四个”,可通过控制台命令使用,而没有任何GUI。 我已经编写了通过数组输出初始化游戏场的代码。但是,在数组中换行符之后的第一行之后,输出将向左移动一点:
我有一组值,例如(想象一下这些是小部件销售): year | Sarah | Elizabeth | Jones | Robert | --------------------------------
我实际上正在实现一个 C++ 光线追踪器,并且我正面临一个关于光线追踪的经典问题。当放置高垂直 FOV 时,形状离边缘越近,变形越大。 我知道为什么会发生这种失真,但我不知道如何解决它(当然,减少 F
此图是直接从被测广角摄像机拍摄的,目的是通过相机校准使图片不失真。然而,据我所知,目前的技术是基于畸变是径向的(切向畸变可以忽略不计)的假设,然后用高阶多项式对径向畸变进行建模。径向畸变在每个径向方向
我有一个支持 CATiledLayer 的 UIScrollView,它显示了一个非常大的图像。我想要实现的是将此 View 捕获到 UIImage 中(将其用作进度条 View 的背景)。有几个问题
我想构建一个类似轮播的东西,你可以使用滚动条滑动它。每张幻灯片中都有一行文本,应水平和垂直居中。设置 align-items: center 会更改父 div 的高度。 .carousel { w
我想构建一个类似轮播的东西,你可以使用滚动条滑动它。每张幻灯片中都有一行文本,应水平和垂直居中。设置 align-items: center 会更改父 div 的高度。 .carousel { w
我想就 .tga 文件格式解析问题获得一些帮助。我有我使用了很长时间的代码: int fileLength = Input.tellg(); vecto
今天我一直在尝试用 three.js 构建我的第一个天空盒。我已经阅读了很多教程,我最终得到的代码是基于这个:http://learningthreejs.com/blog/2011/08/15/le
下图说明了一切。 为什么对象在模拟器上重叠?如何使它们大小相同。 最佳答案 xib 中的顶级 View 使用的是 iPhone 5 屏幕尺寸,但您在 iPhone 4 屏幕尺寸下运行模拟器,该屏幕尺寸
我为 Android 和 iPhone 编写了一个 JQM 网络应用程序,该应用程序在一个自定义 native 容器中运行,该容器带有一堆供应商库,包括一个自定义版本的 iScroll。最近,我们升级
是否可以在 SpriteKit 中为 SKSpriteNode 创建一个 SKAction,通过编辑->变换->扭曲选项生成与“Photoshop”相同的效果? 例子: 最佳答案 我用这个实现来解决:
我有一个俄语字符串,以 cp1251 编码存储在 cpp 源文件中。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
我目前正在为图片库构建水平滚动条。 到目前为止,滚动条可以正常工作,但不幸的是,图像部分变形或部分被截断。 我怀疑和Flexbox有关系... 这里可以看到滚动条的代码(markup + scss)
我想创建一个深度图以获得每个像素的 3D 位置,这样我就可以在图片上获得某些选定项目的 3D 位置。为了查看我的深度数据是否正确,我使用 MeshLab 将其可视化。 我使用 KITTI 数据集的立体
我正在从头开始构建光线追踪器。我的问题是:当我更改相机坐标时,球体变为椭圆。我不明白为什么会这样。 这里有一些图像来显示工件: Sphere: 1 1 -1 1.0 (Center, radius)
我刚刚注意到 gMap View 工具正在显示……相当不寻常。他们的区域似乎仍然被正确定义——我可以很好地与他们互动,只是他们的外表看起来很乱。 我没有将任何 CSS 应用到任何 map 片段,我应用
你知道为什么当正方形的边是奇数时下面的代码会产生扭曲的正方形吗? from turtle import * s = 67.0 pu();fd(s/2.0);rt(90.0);fd(s/2.0);pd(
我是一名优秀的程序员,十分优秀!