DirectX 11,Sky dome在移动时会改变形状

时间:2014-04-06 15:05:13

标签: 3d directx directx-11

我的问题非常烦人,因为我无法掌握如何修复它。

基本思想是我创建了一个成功渲染的天空球体,并随着摄像机位置移动。天空球体的渲染是通过转动Z缓冲并在之后将其重新打开来完成的,并且通过将其世界矩阵通过相机位置值进行平移来完成天空的移动。

当我隐式地移动相机时,天空穹顶真的很长距离,让我们说在Deptz(Z)轴上的1000000.0f个单位,天空球体开始改变它的形状......随着距离的增加它变得更糟......

我通过打开WIRE-FRAME来检查它是否不是纹理渲染的东西,我可以看到球体的多边形基本上都在变化。

有人有想法吗?谢谢。

2 个答案:

答案 0 :(得分:0)

正如Trillian所说,你应该渲染一个相当小的天幕,它总是以你的相机为中心。该程序可能看起来像这样:

  1. 清除颜色和深度缓冲区
  2. 禁用深度缓冲区写入
  3. 使用相机的旋转渲染天空圆顶但不作为视图矩阵进行平移
  4. 重新启用深度缓冲区写入
  5. 渲染场景的其余部分
  6. 这样天空将始终落后于场景的其余部分,即使它只是很小,你永远不会有“走过”天空的问题。

答案 1 :(得分:-1)

这个答案来自非数学家,非天文学家。你的问题纯粹是平行的。根据我在绘画和绘画方面的个人经验,我经常遇到问题。想想艺术家,当视点位于圆柱体外时,与底座相距一段距离时,绘制圆柱体的线条图。圆柱体的顶部显示为椭圆形。越靠近视点越接近基座的中心,椭圆柱顶出现的越圆。将视点移动到圆柱外部,直到与圆柱顶部完全相同的平面,然后圆柱顶部显示为一条直线。

所以你在天空圆顶中看到的是线框多边形的变化形状,因为你更接近圆顶,使线框多边形中的(虚拟)内切圆呈现为椭圆形,并且你的多边形是不规则的而不是对称的数字。您在圆顶中看到的不是错误,而是准确的渲染。恭喜。你的程序有效。唯一的困难,我们的天空和你的天空圆顶之间的区别在于你将天空圆顶视为一个实心球体,从中心到每个物体有一个固定的距离。一个真实的天空视图,真正的挑战是将每个对象编程为基于其在空间中的真实位置可变地远离“中心”。尝试使用几十个物体 - 例如行星 - 与地球已知距离,然后移动“相机”,即在太空中观察周围,并注意星座,行星轨道等形状如何变化。如果你使每个物体的距离足够大,那么你的相机可以移动很多而不会失真。如果您保持坚固的圆顶概念,但与相机的移动距离相比,使圆顶的直径变大,那么情况也是如此。

这条评论是有用的,值得深思。实现?这取决于像你这样的程序员和天文学家。祝你的项目好运。