ios - 在 SceneKit 中更改“视野”
问题描述
我有一些带有透视投影的相机和(0,0,0)中的对象。我根据这个相机计算了这个对象的“边界框”(屏幕上的像素大小)并缩放它以适应屏幕大小。现在它在屏幕中间。
scnView 的框架等于屏幕大小,并且我在此视图上方有一些 UI 组件(例如导航栏和视图底部的一些大透明视图)。scnView 有一些全屏背景,这个对象可以缩放/移动/......因此我需要 scnview 全屏。
然后我将这个对象移动到“透明区域”(没有 UIComponents 的区域)的中间,并看到这个对象的底部(好像它在我的上方),因为我的投影是透视的。
我想把这个物体移动到清晰区域的中心,让它看起来像在我面前,没有任何扭曲。我怎样才能做到这一点?
我看到了 2 个解决方案。1)在纹理中将我的对象绘制到屏幕外,然后在屏幕上所需位置绘制此纹理。2)创建 scnView 高一点。例如将帧大小设置为 = (0, (bottomHeight - topHeight) / 2, width, height + (bottomHeight - topHeight) / 2) 以将 scnView 的中心移动到所需位置。
但是我不喜欢第一个解决方案,因为添加了绘制调用,而第二个解决方案甚至听起来很糟糕。
PS对不起那张照片
更新:基本上我想使用透视投影并像 SceneKit 中的 2D 图像一样移动 3D 对象。
解决方案
抱歉,如果我没有正确理解,但是您可以将相机扫射并居中吗,还是不够清楚?
func strafeY(vAmount: XFloat)
{
nPosition = cgVecAdd(v1: nPosition, v2: cgVecScalarMult(v: nTarget, s: vAmount))
}
推荐阅读
- docker - docker-compose 和覆盖变量
- ios - 通过端口号识别调试
- database - 如何删除符合特定条件的 MongoDB 数据库?
- javascript - 如何使用 (CSS/HTML/Javascript) 在 Hover 上添加带有动画的字母
- html - 如何确保跨度的内容在 CSS 中向右而不是向左增长
- c# - 无法将证书粘贴到受信任的根证书颁发机构存储中。访问被拒绝
- java - 为什么不能通过两个参数交换数组的两个元素?
- netcdf - NetCDF 重新排序维度
- reactjs - 从 React 中的表单发布方法获取响应
- php - 选择数据时子查询返回多于 1 行