有条件地渲染 aframe 中的组件

搬运工

我有一个包含三个二十面体的 aframe 场景、一个复杂的粒子系统和一个与场景中物体融合的光标。由于粒子可见,场景运行速度太慢,因为光标试图融合在每个粒子上。我只需要它融合在三个二十面体上。

所以,我正在尝试做两件事之一:

  • 只告诉光标融合在二十面体上(如果它有助于性能,可能不会)
  • 仅在所有二十面体融合/单击后才显示粒子系统。

我目前不知道如何做这两件事。这是我的场景:

  <a-scene xrweb xrextras-tap-recenter xrextras-almost-there xrextras-loading xrextras-runtime-error>

    <a-camera position="0 8 2">
      <a-entity position="0 0 -3" geometry="primitive: ring; radiusInner: 0.25; radiusOuter: 0.3;" color="#CCCCCC"
        material="shader: flat; opacity: 0.7" cursor="maxDistance: 10; fuse: true" events-cursor>
        <a-animation begin="fusing" easing="ease-in" attribute="scale" fill="forwards" from="1 1 1" to="0.5 0.5 0.5"
          dur="1500"></a-animation>
          <a-animation begin="mouseleave" easing="ease-in" attribute="scale" fill="forwards" from="0.8 0.8 0.8" to="1 1 1"
          dur="500"></a-animation>
        </a-animation>
      </a-entity>
    </a-camera>
    <!-- should only render this particle system after icosahedrons have been clicked -->
    <a-entity position="0 2.25 -15"
      particle-system="preset: dust; particleCount: 500; type: 2; rotationAngleSpread: .05; texture: ./images/debris.png; velocityValue: .5 0.15 .5;"
    >

    <a-entity rotation="0 0 0" animation="property: rotation; to: 360 0 0; loop: true; dur: 10000; easing: linear">
      <a-icosahedron position="0 1 -4" radius="1.25" material="roughness: 0.8; metalness: 0.2; color: #D65C66;"
        animation="property: rotation; to: 0 360 0; loop: true; dur: 10000; easing: linear" id="redOrb" events-red>
      </a-icosahedron>
    </a-entity>

    <!--- 3 of these, hiding code for brevity-->

  </a-scene>

这是处理二十面体是否已融合/点击的javascript:

AFRAME.registerComponent('events-red', {
  init: function () {

    el.addEventListener('click', function(){
      redClicked = true;
      //when all 3 have been clicked, hide them, and show the particle system.
    })
  }
});

我试过这个,但它不起作用(函数在正确的条件下触发,但屏幕上没有显示任何内容):

addParticleSystem = function(){
      let particleSystem = document.createElement('a-entity');
      particleSystem.setAttrbute('position','0 2.25 -15');
      particleSystem.setAttribute('particle-system',"preset: dust; particleCount: 500; type: 2; rotationAngleSpread: .05; texture: ./images/debris.png; velocityValue: .5 0.15 .5;");
      document.querySelector('a-scene').appendChild(particleSystem);
    }
托马斯·威廉姆斯

当您想要选择一些要融合(或单击)的对象并排除其他对象时,您可以使用 raycaster 组件来执行此操作,该组件可与光标一起使用(或可以在没有它的情况下工作,但要进行融合,请与光标组件一起使用)。

<a-entity cursor raycaster="far: 20; interval: 1000; objects: .clickable"></a-entity>

然后在要包含在光线投射中的每个实体上,添加属性 class="clickable"

<a-box id="redBox" class="clickable" color="red"></a-box>

这是关于光线投射和游标的文档:

https://aframe.io/docs/0.9.0/components/cursor.html#fuse-based-cursor

我很惊讶粒子会参与光线投射,因为它们只是 gpu 实例。它们实际上不是场景中的 3D 实体,而是作为图形卡上的几何着色器生成和渲染的。光线投射发生在所有几何图形被发送到图形卡之前。您是否测试过在粒子可见时打开和关闭光线投射以查看是否会导致速度变慢?

您的代码未显示光标或光线投射,因此我不知道您是否正在过滤实体,但您似乎并未在实体上使用类过滤器,因此您似乎没有过滤光线投射器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何有条件地包装React组件?

来自分类Dev

有条件地渲染转发器中的元素

来自分类Dev

根据属性值有条件地包含组件

来自分类Dev

更改单选按钮时有条件地渲染其他组件

来自分类Dev

在React JSX中有条件地渲染组件部分

来自分类Dev

仅当验证通过时,才有条件地使用ajax渲染组件

来自分类Dev

如何在有条件的组件上有条件地添加道具?

来自分类Dev

如何有条件地渲染原因反应组件?

来自分类Dev

React JS在上传时有条件地渲染动画乐透组件

来自分类Dev

有条件地反应测试库渲染组件

来自分类Dev

样式化的组件-根据道具有条件地渲染整个CSS块

来自分类Dev

有条件地在反应片段中渲染多个元素

来自分类Dev

根据功能组件中的数据有条件地渲染元素

来自分类Dev

在v5中有条件地渲染Navigator

来自分类Dev

根据使用中的prevState有条件地设置状态效果导致指数重新渲染

来自分类Dev

如何有条件地渲染使用钩子的React组件

来自分类Dev

使用hidden属性与有条件地渲染组件

来自分类Dev

有条件地渲染JSX的React组件的更新周期如何表现?

来自分类Dev

有条件地渲染组件而不会丢失“空”空间-ReactJS

来自分类Dev

React有条件地在特定路径中渲染组件

来自分类Dev

如何在useEffect中更新状态的条件组件中有条件地渲染?

来自分类Dev

根据数组中某些值的存在情况有条件地渲染图标

来自分类Dev

有条件地在react jsx中渲染className

来自分类Dev

如何在redux-form的<Field>中有条件地渲染组件

来自分类Dev

在特定路线和视口高度上有条件地渲染组件

来自分类Dev

使用高阶组件有条件地渲染列表

来自分类Dev

如何有条件地渲染两个组件?

来自分类Dev

在 React 组件中有条件地渲染 <td>

来自分类Dev

如何有条件地渲染 Angular 组件

Related 相关文章

  1. 1

    如何有条件地包装React组件?

  2. 2

    有条件地渲染转发器中的元素

  3. 3

    根据属性值有条件地包含组件

  4. 4

    更改单选按钮时有条件地渲染其他组件

  5. 5

    在React JSX中有条件地渲染组件部分

  6. 6

    仅当验证通过时,才有条件地使用ajax渲染组件

  7. 7

    如何在有条件的组件上有条件地添加道具?

  8. 8

    如何有条件地渲染原因反应组件?

  9. 9

    React JS在上传时有条件地渲染动画乐透组件

  10. 10

    有条件地反应测试库渲染组件

  11. 11

    样式化的组件-根据道具有条件地渲染整个CSS块

  12. 12

    有条件地在反应片段中渲染多个元素

  13. 13

    根据功能组件中的数据有条件地渲染元素

  14. 14

    在v5中有条件地渲染Navigator

  15. 15

    根据使用中的prevState有条件地设置状态效果导致指数重新渲染

  16. 16

    如何有条件地渲染使用钩子的React组件

  17. 17

    使用hidden属性与有条件地渲染组件

  18. 18

    有条件地渲染JSX的React组件的更新周期如何表现?

  19. 19

    有条件地渲染组件而不会丢失“空”空间-ReactJS

  20. 20

    React有条件地在特定路径中渲染组件

  21. 21

    如何在useEffect中更新状态的条件组件中有条件地渲染?

  22. 22

    根据数组中某些值的存在情况有条件地渲染图标

  23. 23

    有条件地在react jsx中渲染className

  24. 24

    如何在redux-form的<Field>中有条件地渲染组件

  25. 25

    在特定路线和视口高度上有条件地渲染组件

  26. 26

    使用高阶组件有条件地渲染列表

  27. 27

    如何有条件地渲染两个组件?

  28. 28

    在 React 组件中有条件地渲染 <td>

  29. 29

    如何有条件地渲染 Angular 组件

热门标签

归档