3D透视:最简单易懂的成像原理及实现教程(一)

3D透视:最简单易懂的成像原理及实现教程

    • 写在前面
    • 原理介绍
    • 一般模型
    • 计算一般模型时直线OA在P上的点坐标

写在前面

这篇文章已经构思很久了,一直不知道该如何下笔,就寻思着写了再说。由于本人英语不怎么好,有些变量命名会比较随意。如果这篇博客有什么错误,请指正,感谢。

原理介绍

3D透视图说到底是模拟人眼成像。将人眼作为视点O,以视点为三维坐标系的原点,过原点做一条射线,这条射线称为视线,过视线做一个垂直视线的平面,称为视平面P,P与视线的交点称为C,且OC长度已知,称为视距。从O做射线过P的四个顶点在空间中形成一个四棱锥,P以下的部分形成一个棱台,位于这个棱台内的点与O连线,这条线段与P的交点M即使人眼中点A所成的像。如下图所示。

3D透视:最简单易懂的成像原理及实现教程(一)_第1张图片

一般模型

三维坐标系中一条过原点的射线可以通过它与平面ZOY、平面ZOX的成角来确定,与平面ZOY的成角我称为ha,与平面ZOX的成角我称为va
一般模型的特殊情况是视线的va、ha均为0时候。

计算一般模型时直线OA在P上的点坐标

  1. 做A(ax, ay, az)在Z轴上的垂线与Z轴交于点N,计算这条垂线的长度:AN = sqr(ax ^ 2 + ay ^ 2)
  2. 计算ON的长度:因为N在Z轴上所以ON = abs(az)
  3. 做M垂直于Z轴于V,求MV的长度:因为三角形ONA于三角形OVM相似,所以VM与AN成比例,既:MV = AN / ON * OC
  4. 求mx:mx = ax / AN* MV
  5. 求my:my = ay / AN* MV
  6. 求mz:在一般模型中mz并不是那么重要——毕竟P上的点的z坐标都等于OC
  7. 将点绘制在屏幕上,这不难理解。P是和XOY平面平行的,所以可以直接用点M的坐标来绘制。
    暂且就写到这里吧,让我再缕缕思路。

你可能感兴趣的:(Android)