我正在尝试根据外观方向创建图像的透视投影。我在这个领域没有经验,但是我自己无法做到这一点。请你帮帮我好吗?
有一个图像和一个观察者(相机)。如果相机可以被认为是一个不可见球体上的物体,而图像是一个穿过球体中间的平面,那么相机位置可以表示为:
x = d cos(θ) cos(φ)
y = d sin(θ)
z = d sin(φ) cos(θ)
其中 θ 是纬度,φ 是经度,d 是距图像中心所在球体中心的距离(半径)。
我在某个地方找到了这些公式,但我不确定坐标(我不知道,但在我看来 x 应该是 z,但我想它取决于坐标系)。
现在,我需要做的是对我的图像进行适当的转换,使其看起来好像是从相机(以正确的视角)观看的。你能告诉我几句话,这是怎么做到的吗?我应该采取哪些步骤?
我正在开发一个 iOS 应用程序,我想我可以使用 QuartzCore 中的以下方法。但我不知道我应该将什么角度传递给这个方法,以及如何从相机位置推导出新的 x、y、z 坐标。
CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle,
CGFloat x, CGFloat y, CGFloat z)
到目前为止,我已经通过以下方式成功创建了一个简单的查看透视图:
- 使用 .m34 设置为 1/-1000 的单位矩阵(作为 CATransform3D 参数),
- 使用 (0, 1, 0) 向量将我的图像旋转 φ 的角度,
- 将结果与旋转 θ 和 (1, 0, 0) 向量连接起来,
- 基于 d 的缩放被忽略(我根据其他一些标准缩放图像)。
但是我得到的结果不是我想要的(这很明显):-/。只要这两个角度中的一个接近 0,透视图看起来就很逼真。因此我认为有一种方法可以以某种方式计算出适当的角度以及 x、y 和 z 坐标以实现适当的变换(这可能是错误的,因为这只是我的猜测)。