射线投射相机背后的点

时间:2015-03-07 22:56:20

标签: 3d 2d vectorization trigonometry raycasting

简而言之,我有一个使用旋转和一些三角函数的光线投射引擎,而不是矢量数学。我想添加一些从任意两点画出一条线的东西,但当其中一个点超出观察平面时,就会发现蝙蝠攻击疯狂(在可怕的方向上飙升)。

我还没有找到解决这个问题的任何信息,但在环顾四周之后,我怀疑矢量数学可能是解决方案。我想避免必须学习或调整我已经制造的引擎,特别是如果这不是解决方案或唯一的解决方案。

以下是我正在使用的一些代码:

pLoc is the x,y of the camera.
mLoc is the x,y of the point.
pRot is the rotation of the camera.
pHgh is the height (z) of the camera.
mHgh is the height (z) of the point.

在网格x上向右增加,向下增加y。世界的网格大小为128像素,这也是相机的最大高度。屏幕为320 x 200像素。

xxx = pLoc.x-mLoc.x
yyy = pLoc.y-mLoc.y

moo = atan(xxx,-yyy)*(180/pi)
if moo < 0 then moo = moo+360

tmp = pRot+120-moo

if moo < 180 and pRot > 90 then
    tmp = tmp-360
else if moo > 180 and pRot > 270 then
    tmp = tmp-360
end if

这里,m是从相机到该点的距离。

m = sqrt(power(pLoc.x-mLoc.x,2)+power(pLoc.y-mLoc.y,2))

boo = (tmp*-320/60)-160   -- this is x spot on screen.
poo = (64-pHgh+mHgh)*(300/(m))   -- this is the y spot.
goo = 128/m*2   -- this is a converted distance for whatever.

同样,如果该点离屏,它的位置会变得疯狂:它没有被正确表示。如果答案真的是这可以用于矢量数学,那很好,但是如果有机会甚至用这种方法伪造它,我非常想发现它。

我差点忘了,那里也有一些代码可以调整“鱼眼”。如果我正确记住它应用于m(距离),并使用cos。

感谢。拥抱。

0 个答案:

没有答案