Articles of sorting

Unity中包含多个链接对象的数组

这可能是太原始了,但对于我的用例,我需要维护一个数组,其中两个属性相互链接…例如 – 如果我想要做分数收集…然后我需要一个数组,其中有分数和相应的玩家名称作为每个元素。 所以,当我做Array.Sort(PlayerScorearray)我甚至需要按照顺序对玩家名进行sorting,这样如果我想知道玩家得分最低的玩家,我只需要find第一个元素,然后转到相应的玩家名..有可能以更简单的方式做到这一点? 我的想法不能想到一个简单的方法来做到这一点。 编辑:我正在使用C#的脚本

如何按最近的实体距离sorting实体的顺序?

我创建了一个名为DistanceSquaredComparator的比较器类,并使用Comparator<Entity>实现它。 然后在重载比较方法中,我得到每个附近位置的距离平方的所有者位置,然后得到signum int值返回。 现在的问题是我不知道这是否是按照最近距离sorting数组的有效方法。 Entity owner @Override public int compare(Entity o1, Entity o2) { Vector2 ownerPosition = Mapper.transform.get(owner); Vector2 nearby1 = Mapper.transform.get(o1).position; Vector2 nearby2 = Mapper.transform.get(o2).position; return (int) Math.signum(nearby2.dst2(ownerPosition) – nearby1.dst2(ownerPosition)); } // usage DistanceSquaredComparator comparator = new DistanceSquredComparator(); ImmutableArray<Entity> players = … ImmutableArray<Entity> enemies = … Array<Entity> sortedEnemies = … … // fill sortedEnemies […]

粒子系统和精灵,绘制顺序问题

我有一个粒子系统,我的角色,这是一个精灵。 我想创造一个从地面上升起的烟尘,我希望我的角色能够移动它。 问题在于,即使精灵位于烟雾中间,粒子也被全部吸引到精灵的前面或后面: 如果我把精灵向前移一点,所有的粒子都在后面: 就像所有的粒子共享粒子系统本身的Z相同。 我长期以来一直在面对这个问题,我尝试着使用其他着色器,新的sorting层,以及搞乱粒子系统软糖,但结果总是一样的。 我希望粒子按照正确的顺序渲染,那些在角色背后更远的粒子; 和那些更接近,在角色面前的人。 想知道这里发生了什么?

如何在一个实体组件系统中管理变化的Z-Index?

如果有一个基于实体组件系统的游戏项目(如经典的塞尔达)。 Player和Enemys都是具有精灵和变形组件的实体。 武器也是具有精灵和变形成分的实体。 玩家和敌人可以拾起武器。 武器得到了一个ParentComponent,所以他们将被赋予载体实体的真实性。 有一个脚本/系统的。 每当一名玩家/敌人向上走时,武器必须放在背后的载体上,以便玩家走到屏幕的顶端。 我将通过使用武器之一切换载体变换部件的Z索引来做到这一点。 不幸的是,渲染系统是一个Sorted-Iterating-System,它包含一个带有Sprite-Components的所有实体的sorting列表,所以每次Im改变一个Entity的Z-Index时,我都要强制重新sorting列表。 这工作,但在java中sorting整个列表几乎每个gamellop更新听起来非常糟糕。 这真的是一个好主意,还是应该尝试别的? 顺便说一下:在实践中,我使用libGdx和Ashley作为ECS。

如何控制哪些多边形首先在一个批处理(例如绘制叶子)?

排列透明物体是一个众所周知的问题。 如果您将一堆透明多边形(例如树上的叶子和树枝)发送到GPU并使用alpha混合function进行渲染,GPU将随机排列多边形。 但是我注意到,虽然他们随机sorting,渲染的顺序也是一样的。 如果不是,叶子会随着颜色的变化而闪烁,这取决于它们在哪一层上。 我怎样才能控制哪些多边形被渲染? 也许他们的顺序取决于索引缓冲区? [编辑]澄清事情:我知道不同的Draw()调用按照发出的顺序执行。 我想弄清楚如何在一个Draw()调用中操作多边形的顺序。 如果一棵树有一百多个多边形,那么单独绘制一个单独的一个,并且在艺术家的背后会感到痛苦。 所以我需要的是在一对顶点和索引缓冲区中影响渲染一堆多边形的顺序。 是的,我正在使用XNA 4.0。

三维边界体积的2D瓦片的绘制顺序

我想知道哪个algorithm被用来以正确的顺序绘制video游戏突击队的精灵。 每个精灵都有一个3D边界体积(多边形或圆柱体),这就是开发人员存储信息的方式: POLY "NONAME",73,987,0,54,7,1 ;Name,CenterX,CenterY,CenterZ,Height,#Vertices,#Tiles POINT 0,-37 ;Coord. X, Coord. Y POINT 36,-18 POINT 36,-1 POINT 28,28 POINT -21,37 POINT -36,1 POINT -36,-9 TILE 37, 581, 74, 83, 0, 0, 0,"ROC10010.RLE"," " ;PosX,PosY,Width,Height POLY "NONAME",70,816,0,120,4,1 POINT 0,-8 POINT 8,6 POINT 0,10 POINT -8,-3 TILE 48, 434, 50, 98, 0, 41, 0,"POST0001.RLE"," " POLY "NONAME",1557,4094,0,44,0,1 RADIO […]

为什么制服的顺序被编译器改变了?

我有以下着色器,当设置其中一个matrix的值时,一切正常,但我发现获取一个返回值对于View和Projection是不正确的,它们是相反的。 #version 430 precision highp float; layout (location = 0) uniform mat4 Model; layout (location = 1) uniform mat4 View; layout (location = 2) uniform mat4 Projection; layout (location = 0) in vec3 in_position; layout (location = 1) in vec4 in_color; out vec4 out_color; void main(void) { gl_Position = Projection * View * Model * […]

在Unity中,为什么在尝试对我的对象列表进行sorting时出现“没有实现正确接口”的错误?

我正在尝试创建一个制作面板,将您可以按字母顺序排列的项目列表sorting,但我无法弄清楚为什么.Sort()不起作用。 我所拥有的是一个游戏对象,其中包含所有可以制作的项目和需求的列表,然后在我的制作脚本中访问列表的游戏对象并显示信息。 一切工作正常,直到我尝试sorting任何东西。 craftDatabase是我需要sorting。 此外,它需要按ItemIDsorting。 using UnityEngine; using System.Collections; using System.Collections.Generic; public class CraftDatabase : MonoBehaviour { public List<Blueprint> craftDatabase = new List<Blueprint>(); } [System.Serializable] public class Blueprint { public string itemId; public int itemAmount; public float itemCraftTime = 1f; public CraftPanel.subsections subsection; public CraftPanel.workstations workStation; public List<requiredItem> requiredItems = new List<requiredItem>(); [HideInInspector] public string […]

3D世界中的透明度sorting与不同的渲染types

我正在渲染一个古老的游戏格式的世界,对象和模型。 世界是在BSP树中呈现的,所以我可以快速迭代。 不透明的表面从前到后呈现。 然后透明的表面回到前面。 对于世界而言,这一切都很好。 我将这些透明的碎片join到一个堆栈中,一次一个地popup它们并渲染。 现在我意识到,在世界上移动的角色也支持透明度,如果我在世界之后渲染它们,而且恰好与其他半透明表面重叠,那么就有可能出现错误。 同样,我有对象来处理。 我一直在头上踢的解决scheme是创建一个容器的vector,它保存我现在的渲染结构和相机的距离。 然后,我会根据距离对这些结构进行sorting,然后逐一渲染。 现在,我的渲染调用接受一个非常通用的对象: struct RenderCall { GLuint textureID; int indexStart; int indexCount; }; struct TransparentRenderCall { float distanceToCamera; RenderCall call; }; 你怎么看? 有没有更简化的方法来做到这一点?

重新sorting一组点以绘制一个三角形风扇(示例)

我正在做一个光引擎(c ++,使用sfml),并连接光顶点,我想绘制一个三角形风扇。 这里是一个三角形风扇(sfml文档)的表示forms: 点必须“有序”来正确绘制形状,否则会弄乱我想的形状。 我在ms paint中画出了所需的效果: 正如你可能看到的,有一个中心点,一个灯光和其他要连接在一起的点。 问题是,点并不总是…“连续/有序”? 我们来看一个例子并简化这个问题。 在上面的例子中,我不能连接从0到8的点,因为它会弄乱形状。 我想重新sorting点,以便我可以正确连接它们,如: 你有什么想法 ? 我考虑做一些基于“多边形点”algorithm的东西,比如检查点是“左/右”还是复杂。 我不一定需要代码(如果你有时间,这将是很好的),但我可以尝试做一些,我只需要想法。 谢谢