opengl - OpenGLSkybox (CubeMap) 与相机移动一起移动
问题描述
我一直在关注一个开放世界项目的一些 OpenGL 教程,我目前正在研究其中的目标是拥有一个开放世界场景,其中包含多个对象(山脉等......)以及一个 SkyBox,所有对象都放置在其中。
我想问一下相机是否有任何方式可以在天空盒内自由移动,与其中的潜在物体“交互”,但实际上并没有脱离盒子的边界。在教程中移除了相机的平移,所以它只能环顾四周而不能四处移动。
将相机实际移动到天空盒内是一种常见的做法,还是我应该以某种方式将天空盒与相机一起移动,从而永远不会到达盒子的边界?
解决方案
Skybox 通常是在没有偏移到相机的情况下渲染的,因为它的内容代表了非常远的东西(比实际相机运动大很多倍),比如几公里外的星星或山脉。因此,即使您向任何方向移动 100 m,渲染结果也不会发生任何变化(或几乎无法识别)。
如果你的天空盒包含你想要移动的东西而不是可行的,但你需要限制移动,这样你就不会靠得太近,因为这会导致天空盒的像素化,甚至最终穿过它。这可以通过游戏地形来完成(你不能跳过边界山脉或游泳离岛屿太远等。
另一种选择是将摄像机距离天空盒中心的距离限制在某个安全距离内。如果更远那么限制移动天空盒以再次匹配距离......这样你就可以靠近/远离天空盒到一个点(它在近/远侧变得更大/更小)并且永远不会越过它.. . 没有任何实际的相机位置限制...
推荐阅读
- ubuntu - Yubikey 分发 u2f_keys
- javascript - tensorflow.data.webcam():“未捕获(承诺中)类型错误:无法设置只有 getter 的属性消息”
- jupyter-notebook - Jupyter Notebook 无法添加新单元格
- sweetalert2 - 如何使用 SweetAlert2 对队列链中的单个 Swal 使用 Promise
- node.js - 尽管应用程序以 0 错误运行,但未使用 nodejs 通过 sendgrid 接收邮件
- javascript - Javascript 在哪里为函数调用的结果分配内存?堆栈还是堆?
- mongodb - 安装 MongoDB 时出现错误
- apache-kafka - 动态生成到新目的地,在 kstream 中读取它并在 Spring Cloud Stream Kafka 中删除目的地
- android - Flutter - 在构建 APK 上看不到通知图标
- javascript - 如何垂直为 Svg 路径设置动画?