【问题标题】:Putting a particle on the upper side of a mesh at a random point?将粒子放在网格的上侧随机点?
【发布时间】:2016-01-19 23:07:24
【问题描述】:

我想在网格的上侧放置一个粒子。我看过几个添加粒子的教程。但在我见过的所有教程中,只有当它们是立方体或球体时它才有效。在这种情况下,我有一个自定义网格。对我来说,将一个粒子放入网格的几何形状中没有任何效果。如何在网格的上侧随机点放置一个粒子?

var extrusionSettings = {
      bevelEnabled: false,
      extrudeMaterial: 1,   amount:3, 
    };

var Hexagon=new Array();
Hexagongeometry[0]= new Array();
Hexagongeometry[0].push(new THREE.Vector3(-3,  0.0, 0.0)); 
Hexagongeometry[0].push(new THREE.Vector3( -3,  3, 0.0)); 
Hexagongeometry[0].push(new THREE.Vector3( 0,  5, 0.0)); 
Hexagongeometry[0].push(new THREE.Vector3( 3,  3, 0.0)); 
Hexagongeometry[0].push(new THREE.Vector3( 3,  0, 0.0));
Hexagongeometry[0].push(new THREE.Vector3( 0,  -3, 0.0));
Hexagongeometry[0].push(new THREE.Vector3( -3,  0, 0.0));

var HexagonShape=new Array();
HexagonShape[0] = new THREE.Shape( Hexagongeometry[0] );

var HexagonExtrude=new Array();
HexagonExtrude[0] = new THREE.ExtrudeGeometry( HexagonShape[0],      extrusionSettings );
var material=new Array();
material[0] = new THREE.MeshBasicMaterial( { color: 0xffff00 } );

var Hexagon=new Array();
Hexagon[0] = new THREE.Mesh( HexagonExtrude[0],material[0] );
scene.add(Hexagon[0]);

var particleMaterial = new THREE.ParticleBasicMaterial({  size: 2, color:  0xff0000, transparency: true, alphaTest: 0.5 });
var particle = new THREE.ParticleSystem( HexagonExtrude[0], particleMaterial );   
scene.add( particle);

它不起作用我将粒子放在网格的任何部分。在本例中,我将放入六边形 [0],它是一个网格。我尝试了很多方法,也看过几个教程,但正如我之前所说,它仅适用于立方体或球体。如果我能帮助让粒子在严重的网格点上有所帮助。那么你需要知道如何在我的网格中定位随机点时实现各种粒子。

我是 Three.js 的新手,我的英语不太好。希望你能理解。

http://jsfiddle.net/6z8f3eq3/

【问题讨论】:

  • 你还没有问过this question。此处已为您提供答案,请考虑支持/验证它。
  • @Atrahasis 他们是不同的,我问你一件事,另一件事是另一个问题。另一方面,我正在添加细节,我特地要求在上面放置一个粒子。

标签: javascript three.js


【解决方案1】:

让我们把问题稍微分一下来找到解决办法。

对于任意网格,您需要选择一个随机多边形、该多边形上的一个点以及一个位于该多边形“上方”的点,这意味着您需要了解多边形的方向面对。执行这些步骤的方法不止一种,哪种方法“最好”在一定程度上取决于网格的性质和目的的性质。

考虑第一部分:选择一个多边形。您可以仅使用列表来选择多边形 [n]。但是,如果您的网格混合了巨大和微小的多边形怎么办?你可能更喜欢大的。所以:一组选择。

接下来考虑第二部分:多边形上的一个随机点。如果您只有三角形,这可能是最简单的,尝试使用重心坐标作为开始。它们非常容易应用并提供良好的分布(当然还有其他可能的!)。

最后,最后一部分:如果您的网格有表面法线,只需将表面法线的一部分添加到您在上一步中找到的点。如果您有面部法线,这将给出与平滑法线不同的分布。作为以后的改进,您可能还想使用光线投射来避免与其他相邻多边形的偏移量相交(取决于您的网格的形状)。

如有疑问,只需尝试这三个步骤中最简单的版本,并将它们用作进一步改进的出发点。

对不起,我不能只给你代码,但口头描述最适合这类问题。祝你好运!

【讨论】:

  • 朋友,我很高兴你花了这么多时间来回答!。你说什么我都清楚。显然我有其他想法。代码往往不是一切。但对于需要在这个问题上取得进展并继续我需要的人的人。我可以应用你所说的,但如何做到这一点?如果通过代码 Three.js 我不知道在网格顶部放置一个粒子。通过更清晰的逻辑,在这种情况下,我需要有关代码的帮助。所以有人帮我建立一个粒子或一个网格点,你也许可以做剩下的。
  • 考虑到它不允许我继续是新的 Three.js 但再次非常感谢你,如果你知道有人可以帮我一把,你会很感激。
  • webgl(和three.js)越成熟,问题越有趣,尤其是海报的立场。
猜你喜欢
  • 1970-01-01
  • 2017-10-04
  • 2015-08-24
  • 2014-10-10
  • 1970-01-01
  • 2012-10-27
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多