Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3d DirectX 11,天空圆顶在移动时保持形状_3d_Directx_Directx 11 - Fatal编程技术网

3d DirectX 11,天空圆顶在移动时保持形状

3d DirectX 11,天空圆顶在移动时保持形状,3d,directx,directx-11,3d,Directx,Directx 11,我的问题很烦人,因为我无法掌握如何解决它 基本的想法是,我创建了一个天空球体,它被成功地渲染并随相机位置移动。天空球体的渲染通过打开Z缓冲来完成,然后再打开Z缓冲,天空的移动通过将其世界矩阵转换为摄影机位置值来完成 当我将相机隐式地移动到天空圆顶相当长的距离时,比如说,在Deptz(Z)轴上的1000000.0f单位,天空球体开始改变其形状。。。距离越长,情况就越糟 我通过打开线框来检查它是否与纹理渲染有关,我可以看到基本上球体的多边形正在改变 有人有什么想法吗???谢谢。正如Trillian所

我的问题很烦人,因为我无法掌握如何解决它

基本的想法是,我创建了一个天空球体,它被成功地渲染并随相机位置移动。天空球体的渲染通过打开Z缓冲来完成,然后再打开Z缓冲,天空的移动通过将其世界矩阵转换为摄影机位置值来完成

当我将相机隐式地移动到天空圆顶相当长的距离时,比如说,在Deptz(Z)轴上的
1000000.0f
单位,天空球体开始改变其形状。。。距离越长,情况就越糟

我通过打开线框来检查它是否与纹理渲染有关,我可以看到基本上球体的多边形正在改变


有人有什么想法吗???谢谢。

正如Trillian所建议的,你应该渲染一个相当小的天穹,它总是围绕着你的相机。该过程可能如下所示:

  • 清除颜色和深度缓冲区
  • 禁用深度缓冲区写入
  • 使用摄影机的旋转(而不是平移)作为视图矩阵渲染天空圆顶
  • 重新启用深度缓冲区写入
  • 渲染场景的其余部分

  • 这样,即使天空很小,你也永远不会有“走过”天空的问题。

    这是一个非数学家、非天文学家的回答。你的问题纯粹是平行轴。在我个人的绘画经验中,我经常遇到这个问题。想象一下艺术家,当视点位于圆柱体外部,距离底部一定距离时,绘制圆柱体的线条图。圆柱体的顶部显示为椭圆。观察点越接近底部中心,椭圆形圆柱体顶部就越呈圆形。将视点移动到圆柱体外部,直到与圆柱体顶部完全相同的平面,然后圆柱体顶部显示为一条线

    因此,您在天空圆顶中看到的是线框多边形形状的变化,这是由于您离圆顶较近,使得线框多边形中的(虚拟)内接圆显示为椭圆,而多边形显示为不规则图形而非对称图形。您在圆顶中看到的不是错误,而是精确的渲染。祝贺你的程序运行正常。唯一的困难是,我们的天空和你的天空穹顶之间的区别是,你将天空穹顶视为一个从中心到每个对象有固定距离的实心球体。一个真实的天空视图,一个真正的挑战是根据每个物体在空间中的实际位置,将其编程为距离“中心”可变的距离。用几十个物体(例如行星)试试这个方法,它们与地球的距离是已知的,然后在空间中移动“相机”,即视点,注意星座、行星轨道等的形状是如何变化的。如果您使到每个对象的距离足够大,那么您的相机可以在不失真的情况下大量移动。如果您保持实心圆顶概念,但与摄影机的移动距离相比,使圆顶的直径变大,则情况也是如此


    这一评论是有帮助的,也是值得思考的。实施这取决于像你这样的程序员和天文学家。祝你的项目好运

    在这种情况下,您可能会遇到浮点精度问题。为什么不始终渲染天空圆顶,就像摄影机位于原点一样?就平移而言,唯一重要的是圆顶与摄像机的相对位置,这是一个恒定的零。这是我最初的想法。我总是用相机的位置来转换skydome矩阵,正如你所说的,在这个值上,可能浮点数在返回精确数字时遇到了一些问题,因此我的转换是无序进行的。你的建议给了我一个如何重新设计的想法,尽管我认为我会采用旧的方式,保持相机居中,而不是移动世界。谢谢,谢谢你的建议。正如我对特里莲的回答,我的天穹有一个1的比例,它保持在最小值。问题是,我正在用摄影机位置值转换圆顶的世界矩阵,以使圆顶保持在摄影机的中心。在非常大的值(相机位置)下,浮标开始出现一些精度问题(正如Trillian告诉我的),因此我采用了旧的fassion方法,保持相机居中,并移动周围的世界。非常感谢。