首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在真三维等轴测视图中拾取

在真三维等轴测视图中拾取
EN

Stack Overflow用户
提问于 2013-07-29 17:44:55
回答 2查看 907关注 0票数 0

为了查看我的3D环境,我使用“真正的”3D等距投影( XZ平面上的平面正方形,Y“总是”0)。我使用了维基百科上的解释:http://en.wikipedia.org/wiki/Isometric_projection来说明如何进行这种转换:投影矩阵是某个最小和最大坐标之间的正交投影矩阵。视图矩阵有两次旋转:一次绕Y轴(n * 45度),一次绕X轴(arctan(sin(45度)。结果看起来不错,所以我想我做得很对。

但是现在我希望能够用鼠标选择一个坐标。我已经成功地实现了这一点,方法是将坐标渲染到一个不可见的帧缓冲区中,然后获取鼠标光标下的像素来获取坐标。虽然这很好用,但我真的希望看到一个数学解决方案,因为我将需要它来计算边界框,屏幕上区域的平截体和类似的东西。

我的直觉告诉我:-从屏幕坐标到2D投影坐标(或者怎么说,我的意思是将屏幕坐标转换为两个轴的-1和+1之间的坐标,y反转)-不使用视图矩阵的逆变换坐标。是的.用投影矩阵的逆变换这个坐标,但是我的直觉告诉我,这不会起作用,因为所有的东西都有相同的Z坐标。

这一点,虽然在等轴测视图上每个信息都是完全可用的(我知道Y值始终为0)。所以我应该能够将等轴测的2Dx,y坐标转换成计算的3d (x,0,z)坐标,而不需要使用扫描或类似的东西。

我的数学并不差,但这似乎是我不能理解的。

编辑: IMO。在等轴测视图中,每个不同的(x,0,z)坐标对应一个不同的(x2,y2)坐标。所以我应该能够简单地计算出从(x2,y2)到(x,0,z)的方法。但是怎么做呢?

有没有人?

EN

回答 2

Stack Overflow用户

发布于 2013-07-29 17:48:22

有一种叫做projectunproject的东西可以将屏幕转换为世界,反之亦然……

票数 0
EN

Stack Overflow用户

发布于 2013-07-29 19:25:29

你似乎错过了这里的一些核心概念(自从我做这件事已经有一段时间了,所以包括一些小错误):

  • 这里涉及到3种坐标(还有更多,这些是相关的):Scene、Projection和Window

代码语言:javascript
复制
- **Scene (3D)** are the coordinates in your world
- **Projection (3D)** are those coordinates after being transformed by camera position and projection
- **Window (2D)** are the coordinates in your window. They are generated from projection by scaling x and y appropriately and discarding z (z is still used for “who’s in front?” calculations)

您可以使用矩阵从窗口到场景进行not变换,因为窗口中的每个点都对应于场景中的一整条线。如果需要(x,0,z)坐标,可以生成这条线并将其与y平面相交。

如果要手动执行此操作,请在投影中生成具有相同(x,y)和不同(任意)z坐标的两个点,并通过与投影变换的逆相乘将它们变换为场景。现在,将通过这两个点的直线与y平面相交,就完成了。

请注意,对于这个问题应该有一个“静态”的解决方案(一个单一的公式)--如果你在纸上解决了这个问题,你就应该得到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17920745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档