gpt4 book ai didi

ios - 如何使用 GLKMathUnproject

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:11:56 25 4
gpt4 key购买 nike

我使用 GLKit 创建了一个简单的 3D 世界。我正在尝试根据屏幕点击在我的 3D 世界中找到一个特定点。看来我想使用 GLKMathUnproject。该方法的签名是:

GLKVector3 GLKMathUnproject (
GLKVector3 window,
GLKMatrix4 model,
GLKMatrix4 projection,
int *viewport,
bool *success
);

有几件事让我对它需要的参数感到困惑。首先,窗口坐标不应该是 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 1 的 2 个点。使用这些点在对象空间中形成一条线。将此直线与z=0平面相交,确定最终目标点。

希望这对某人有帮助-

您可以在此处阅读更多信息 CasualDistraction Blog

关于ios - 如何使用 GLKMathUnproject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com