如果我尝试用一个球体和点光源按比例放大工作场景以使对象之间的距离非常大(> 1E5),则渲染的光照是不正确的-它看起来像是一条狭缝在对象上移动当我在Oculus Quest或Google Cardboard上显示时,VR视点会发生变化。在桌面上的非VR网络浏览器中,该场景看起来正确。
这显然是距离,精度和非球面物体以及它如何与远距离的灯光和相机反应的问题。但是我需要一种解决方法。我正在尝试以真实比例(至少就行星之间的距离而言)模拟太阳系。为了使月亮离观察者足够远,使其在我四处走动时不会移动,我需要对其进行缩放,以使月亮距离相机至少2000 m。这样一来,太阳就在800000 m之外,这就是太阳光的来源。结果,其他行星无法正确渲染。 如果我向下缩放,则一切正常,但是当我站起来或四处走动时,月亮相对于其他物体移动。
我可以在这里使用替代方法吗?是否有已发布的限制说明了系统的哪一部分是问题所在-显然比框架更低,但我不确定它是不是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>
这使用两个距离不同的灯。我希望火星球被均匀照亮。取而代之的是,从第一个光线来看,它始终是绿色的,但是从第二个光线来看,红色是一个带状的,随着我移动眼睛,带状物体在怪圈中移动。
答案 0 :(得分:0)
不要使用点光源。如果光源很远或很大,最好用directional light
近似我还建议使用小数字。易于使用,不会遇到精度或溢出问题。最好专注于正确设置距离和尺寸比。