我有一个带可移动相机的3D场景。我有相机的3D坐标(x,y,z - > Y是高度)和X和Y旋转(上/下,左/右)。
我想在我正在看的地板上找到坐标(x1,z1)。
基本上如果相机处于(0,4096,0)(4096是高度)并且我的xRotation是45º而我的yRotation是0,我将看到地板上的点(4096,0,0)
我试图对它进行编程但是我被三角测量法困住了。帮助我。
以下代码是我现在所拥有的并且没有完全正常工作:
float x1, z1, anguloX, anguloY;
anguloX = (90 - Xrotation) / 180 * Pi;
anguloY = (90 - Yrotation) / 180 * Pi;
x1 = Yposition * tan(anguloX) * cos(anguloY);
z1 = Yposition * tan(anguloY) * cos(anguloY);
x1 += Xposition;
z1 += Zposition;
答案 0 :(得分:1)
不要用这种三角函数来打扰自己。使用矩阵和转换来做这种事情通常更实际,也更容易理解。我建议尝试这种方法,而不是称为Ray Casting:
现在关于第一个,这里是伪代码:
XRotMat = CreateRotationMatrixAroundXAxis(verticalCameraAngel);
YRotMat = CreateRotationMatrixAroundYAxis(horizentalCameraAngel);
CameraSightDir = YRotMat*XRotMa*initialCameraDir;
关于第二步:
SightRay.Source = Camera.Position;
SightRay.Direction = CameraSightDir;
Intersection = IntersectRayWithPlane(SightRay , FloorPlane);
IntersectRayWithPlane
是一个非常简单的程序,您可以阅读 here 。