我已经写代码,从摄像机的“眼睛”的观看平面产生一个射线一定距离远离照相机的眼睛:射线产生不一致
R3Ray ConstructRayThroughPixel(...)
{
R3Point p;
double increments_x = (lr.X() - ul.X())/(double)width;
double increments_y = (ul.Y() - lr.Y())/(double)height;
p.SetX(ul.X() + ((double)i_pos+0.5)*increments_x);
p.SetY(lr.Y() + ((double)j_pos+0.5)*increments_y);
p.SetZ(lr.Z());
R3Vector v = p-camera_pos;
R3Ray new_ray(camera_pos,v);
return new_ray;
}
ul
是观看的左上角飞机和lr
是观看飞机的左下角。它们被定义如下:
R3Point org = scene->camera.eye + scene->camera.towards * radius;
R3Vector dx = scene->camera.right * radius * tan(scene->camera.xfov);
R3Vector dy = scene->camera.up * radius * tan(scene->camera.yfov);
R3Point lr = org + dx - dy;
R3Point ul = org - dx + dy;
这里,org
是观看平面与radius
被观看平面和照相机眼睛,dx
和dy
之间的距离的中心在x的位移和从y方向观看飞机的中心。
ConstructRayThroughPixel(...)
函数适用于眼睛在(0,0,0)处的相机。但是,当相机处于某个不同的位置时,不会为图像生成所有需要的光线。
有什么建议可能会出错?也许我的方程有问题吗?
感谢您的帮助。
我不认为你想要的矢量图形标记。矢量图形通常指的是以“从(x1,y1)到(x2,y2)绘制厚度为t,颜色为c的线条形式存储数据的文件格式”。而您将逐个像素地存储数据,不是吗? – dmckee 2010-03-27 16:01:15
好吧,我上午使用场景文件格式来显示我的图形,它以类似的形式存储数据,但是我的问题与此无关。我误解了“矢量图形意味着什么” - 。 - – Myx 2010-03-27 16:04:21