Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/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 三个使用精灵和精灵表的人_3d_Three.js_Sprite_Sprite Sheet - Fatal编程技术网

3d 三个使用精灵和精灵表的人

3d 三个使用精灵和精灵表的人,3d,three.js,sprite,sprite-sheet,3d,Three.js,Sprite,Sprite Sheet,我正在进行一个three.js项目,该项目要求我创建一大群人,作为可视化的一部分 我已经确定使用精灵而不是3d模型将是一个不错的性能解决方案,因为从理论上讲,我可以让照片级真实感的人以最小的性能影响 我已经在创造一个粒子系统方面取得了相当的成功,这个粒子系统中有许多相同的女性精灵。不过,很明显,当相机移动,女人继续面对相机时,这种错觉就消失了。也就是说,我的问题是: 第一部分-精灵表 有没有办法让three.js根据相机相对于指定对象方向的角度调整(或替换)精灵使用的实际图像的可见部分 这项技术

我正在进行一个three.js项目,该项目要求我创建一大群人,作为可视化的一部分

我已经确定使用精灵而不是3d模型将是一个不错的性能解决方案,因为从理论上讲,我可以让照片级真实感的人以最小的性能影响

我已经在创造一个粒子系统方面取得了相当的成功,这个粒子系统中有许多相同的女性精灵。不过,很明显,当相机移动,女人继续面对相机时,这种错觉就消失了。也就是说,我的问题是:

第一部分-精灵表 有没有办法让three.js根据相机相对于指定对象方向的角度调整(或替换)精灵使用的实际图像的可见部分

这项技术在许多视频游戏中都很明显,比如《马里奥卡丁车64》,在这些游戏中,高级3D模型的图像只需从多个角度抓拍,并包含在一个大型精灵表中。角色图像根据需要替换为图纸的正确部分,以创建高质量角色的错觉

(请注意精灵对角色和项目的巧妙使用)

这种错觉对我来说是非常完美的,因为人群中人的真实感加上流畅的表演很容易弥补从一个角度跳到另一个角度的轻微不和谐的视觉效果,特别是因为人群不是主要焦点

第二部分-粒子系统 如果这是可能的,有没有一种方法,我可以创建一个由这些特殊的精灵对象组成的粒子系统,以低成本的性能填充一个需要的区域

旁注

  • (理想情况下,我当然希望这个地区能有来自第一部分的不同人群,但有些事情告诉我,这是最不重要的)

  • (另一方面,我最初的测试场景在通过精灵的透明部分观看其他许多场景时产生了一些奇怪的效果——只有一些场景会被渲染——尽管我仍在研究这个问题)


我非常感谢在这个话题上的任何帮助。恐怕我的三分之二不符合我在这里需要做的事情。如果这一切都不可能实现,那么对于如何创建一大群人的幻觉,而不需要渲染数百个复杂3d模型的巨大性能成本,有谁会有其他建议吗


事先非常感谢你

有趣!还有很多东西要考虑,所以不要写一个文本墙,这只是我大脑中的一个垃圾堆:

  • 3.ParticleSystem用GL_点渲染,你就知道了
  • 粒子系统只是渲染平面。但是你需要考虑相机的高度,因此相机和人之间的角度,并扭曲图像,使透视图看起来正确。我为我的叶子引擎做了类似的事情:
    viewHeight=cos(atan(abs(cameraPosition.y-position.y)/length(position.xz-cameraPosition.xz))
  • 让人从几个360度角(比如说8个角度)看,每个图像之间的夹角为45°。为了涵盖这一点,我将计算摄影机和点之间的距离(在片段着色器中),并考虑法线贴图以在其中执行一些灯光计算!仅适用于附近的人,您可以对每个角色使用相同的法线贴图:)(可能不值得,所以我先省略它)
  • 角色的简单行走和站立动画为
    (2(行走)+1(站立))*8(角度)=每个角色24个图像
    ,加上一个法线贴图。因此,我建议使用不同的角色,将它们从3D模型渲染到sprite表上,然后重新构建它们,以便使用几个不同的角色
  • 你想让你的角色四处走动,对吗?为此你需要
    • 在粒子系统上启用深度排序
    • 动态位置,因为您总是从计算的新位置更新它们(这是“天真”的方式,在这种情况下更好的方式是DataTextures)
我想到的(相对较小的)缺点是:

  • 精灵有透明度,你有深度排序。这也是一个有点性能的打击
  • 人们互相穿行(否则你的表现会下滑)
顺便说一句:在3D术语中,精灵表是一个“纹理图集”,你可以在片段着色器中对精灵表进行“纹理图集查找”


如果我想起来的话,明天我会写更多关于它的内容:)gl-hf

哇!谢谢你的草率和参与的答复,伙计。让我仔细看看你说的话,很可能会回击你,回答是“没问题”。可能是明天。(另外——事实上,现在我实际上不需要它们四处移动。我的“纹理图谱”和深度排序的查找次数减少了,这可能解释了我在旁注中所说的透明精灵出现错误的原因)我在这里工作得相当成功。我得到了一个精灵,34帧png环绕180度旋转。我正在调整UV偏移以选择所需的“帧”。当我们超过180度时,我也在做同样的事情,但是将UV比例翻转到-1,在水平面上“翻转”图像。我用了两个键来触发这个“旋转”,这真是太棒了,但现在我得想办法让它发生在摄像机位置上。我在数学方面不是最好的,但你的“叶子引擎”代码的引用看起来是“正确的”。你能详细说明一下我怎么用这个吗?对不起,我离开了几天。无论如何,我提供的代码只是为了定义实际的he