如果我试图用一个球体和点光源放大一个工作场景,使物体之间的距离非常大(> 1E5 ),那么渲染的光源是不正确的-当我在Oculus Quest或Google Cardboard上显示时,它看起来像是一个很小的狭缝,当一个人的VR视点改变时,它在物体上移动。在桌面上的非VR web浏览器中,场景看起来是正确的。
这显然是一个距离、精度和a-sphere物体的问题,以及它如何与远距离的光线和相机反应。但我需要的是一种变通方法。我正在尝试模拟真实规模的太阳系(至少是行星之间的距离)。为了让月亮离观察者足够远,当我四处移动时,不会移动,我需要缩放它,使月亮离相机至少2000米。太阳离太阳800000米远,这就是阳光的来源。因此,其他行星无法正确渲染。如果我向下缩放,一切都会正常工作,但当我站起来或四处走动时,月亮会相对于其他物体移动。
这里有没有我可以使用的变通方法?有没有一个公开的限制来解释系统的哪一位是问题所在--它显然比aframe更有可能处于较低的水平,但我不确定它是three.js还是oculus上的webgl实现,或者其他什么。
<a-scene background="color:black;">
<a-sphere id="mars" position="0 500E3 -2000E3" radius="40E3" color="#FFBBBB"></a-sphere>
<a-entity id="sunlightnear" light="color: #00FF00; type: point;" position="0 0 -1000"></a-entity>
<a-entity id="sunlightfar" light="color: #FF0000; type: point;" position="0 0 -1000E3"></a-entity>
<a-entity id="mainCamera" camera="far:1E10;" position="0 1.6 0" look-controls></a-entity>
</a-scene>
这使用了两个不同距离的灯光。我希望火星球体被均匀地照亮。取而代之的是,它总是从第一个光线看起来是绿色的,但是来自第二个光线的红色看起来像一个带,当我移动我的眼睛时,它在球体上移动着奇怪的人造物。
转载请注明出处:http://www.ydsst.com/article/20230316/1079937.html