Tyl*_*230 3 linear-algebra ios glkit
我使用GLKit创建了一个简单的3D世界.我正在尝试根据屏幕点击在我的3D世界中找到一个特定的点.看来我想要使用GLKMathUnproject.该方法的签名是:
GLKVector3 GLKMathUnproject (
GLKVector3 window,
GLKMatrix4 model,
GLKMatrix4 projection,
int *viewport,
bool *success
);
Run Code Online (Sandbox Code Playgroud)
有些事情让我对它需要的参数感到困惑.首先不应该窗口坐标是GLKVector2?最重要的是,不会将屏幕上的点投射到3D空间中而是创建光线而不是单个点.当您将3D空间中的点投影到2D平面(也称为屏幕)上时,您会丢失关于该点的一维信息.那么如何才能将2D屏幕点转换为3D世界点,而无需指定您希望"取消投射"您的观点的深度?在互联网上的任何地方都没有关于这种方法的评论(除了苹果文档).
第一个参数是GLKVector3,因为z组件存储了所需的z深度.
窗口x,y是屏幕坐标,窗口z是所需的深度.
例如,当z = 0时,GLKMathUnproject将给出近平面上物体的坐标,其中z = 1,GLKMathUnproject将给出远处平面上物体的坐标.
这是必要的,因为GLKMathUnproject从平面映射到由投影平截头体形成的3d空间中的线.截锥体的z - 边界受到近和远平面的约束.
所以说你想要在平截头体中的z = 0(对象空间)平面上映射未投影的鼠标点.
然后用窗口z = 0和窗口z = 1取消投影2个点.使用这些点在对象空间中形成一条线.将此线与平面z = 0相互交叉以确定最终目标点.
希望这有助于某人 -
你可以在这里阅读更多CasualDistraction博客
| 归档时间: |
|
| 查看次数: |
1732 次 |
| 最近记录: |