【问题标题】:scenekit skybox flickering on camera movement场景包天空盒在相机移动时闪烁
【发布时间】:2015-03-16 00:21:40
【问题描述】:

天空盒具有 1500x1500 的高分辨率图像,适用于视网膜

SCNScene *scene = [SCNScene scene];

scene.background.contents = @[[UIImage imageNamed:@"left.png"],[UIImage imageNamed:@"left.png"],[UIImage imageNamed:@"top.png"],[UIImage imageNamed:@"botom.png"],[UIImage imageNamed:@"back.png"],[UIImage imageNamed:@"front.png"]];

并且相机配置为:

_cameraNode                 = [SCNNode node];
_cameraNode.camera          = [SCNCamera camera];
_cameraNode.position        = SCNVector3Make(0, 0, 10000);
_cameraNode.camera.xFov     = 55;
_cameraNode.camera.zFar     = 2100000;
_cameraNode.camera.aperture = 1/50;

我将相机的 z 值增量移动 100。当相机到达 252000 左右时,天空盒开始闪烁,好像它在放大和缩小一样。如果相机走得更远直到场景变黑(黑色是 SCNView 的背景颜色),问题会变得更糟。如何避免这种闪烁并能够在非常二的场景中对相机?我做错了什么?

【问题讨论】:

  • 你解决过这个问题吗?
  • 是的,我确实尝试过,它奏效了。我重新设计了我的 3D 场景,其中测量值和对象大小被缩小并且它停止闪烁。我还了解到,不能使用真实世界的对象大小。最好按比例缩小所有对象。

标签: ios scenekit


【解决方案1】:

正如我在 cmets 中所说,我重新设计了我的 3D 场景,其中测量值和对象大小都被缩小了。我还了解到,不能使用真实世界的对象大小。按比例缩小所有对象会更好。不需要创建具有真实世界大小和测量值的巨大场景。缩小也需要更小的纹理,这对于内存优化很有用。自从应用这些更改后,我没有看到任何闪烁。

【讨论】:

  • 接受理论答案对其他人没有帮助。请分享一些您的决议代码,以便每个人都可以受益。
  • 3D 对象由 3D 创作工具建模。所以不涉及(目标c)代码或Xcode。如果您已经对所有对象进行了建模,那么您应该注意几何尺寸和与其他对象的比例。例如,如果一堵墙高 3 米,那么老鼠的高度将是 0.05 米。所以人们应该考虑这些尺寸和测量值。 (我想您正在使用建模工具来创建鼠标和墙。可以只使用代码来对几何图形进行建模,但那是另一回事了。)
  • @HashmatKhalil 是否可以通过代码或场景编辑器帮助缩小模型?
  • 我用 scenekit 对我的资产进行了建模。我建议使用您的建模工具缩放资产,例如,如果您的模型高度为 1 米,并且纹理适合该高度,但对于 10 厘米缩小的模型则不好。它将使用大量内存.但是如果你没有那么大的缩放比例,那么用代码来缩放模型是可以的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 2014-07-31
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多