0

我有一个关于使用透视和正交相机让精灵与three.js一起工作的问题。

我在一个场景中渲染了一栋建筑物。在场景中的一个位置,所有的关卡都堆叠在一起,以提供建筑物的 3D 视图,并使用正交摄像机对其进行查看。在场景的另一部分,我只显示了建筑物的选定级别,并且正在使用透视相机。屏幕分为两个视图。想法是用户从建筑物视图中选择一个级别,并且该所选级别的更详细的地图显示在屏幕的另一部分。

据我所知,我玩了一点精灵;如果使用透视相机查看精灵,则精灵的 scale 属性实际上是它的 size 属性,如果使用正交相机查看精灵,则 scale 属性根据视口缩放精灵。

我将精灵放置在两个相机都可以看到的地方,这似乎是这种情况。如果我将精灵缩放 0.5,那么精灵占据了正交相机视口的一半,我无法用透视相机看到它(大概是因为对于它,精灵是 0.5px x 0.5px 并且四舍五入为 0px (未渲染,或 1px,实际上不可见)。如果我将精灵缩放 50,透视相机可以看到它(大概是因为它是一个 50px x 50px 的正方形)并且正交相机被精灵取代(大概是因为它被视口放大 50 倍)。

我的理解正确吗?

我问是因为在我渲染的场景中,建筑和细节区域在 x 轴上相距约 1000 个单位。如果我在细节贴图的某个地方放置一个精灵,我需要它是〜35x35像素,当我这样做时,它对细节视图工作正常,但建筑视图被超越了。我玩过这些数字,似乎如果我将精灵缩放 4 倍,它就会开始出现在我的建筑视图中,即使视图之间有 1000 单位的距离,并且透视相机看不到精灵。

所以。如果我的理解是正确的,那么我需要使用单独的场景;视图之间的差距更大;对两个视图使用相同的相机类型;或不使用精灵。

4

1 回答 1

1

基本上有两种不同的方式可以使用精灵,使用 2D 屏幕坐标或 3D 场景坐标。也许场景坐标是您需要的?有关两者的示例,请查看以下示例:

http://stemkoski.github.io/Three.js/Sprites.html

特别是,当您在该演示中放大和缩小时,请注意场景中的精灵会改变大小,而其他精灵不会。

希望这可以帮助!

于 2013-06-18T17:20:16.627 回答