Articles of spritebatch

我无法理解batcher.draw在libgdx

这里是代码: batcher.draw(birdMid, bird.getX(), bird.getY(), bird.getWidth() / 2.0f, bird.getHeight() / 2.0f, bird.getWidth(), bird.getHeight(), 1, 1, bird.getRotation()); 这个方法中的每个参数是什么? 请详细解释

libgdx:SpriteBatch和ShapeRenderer的投影错误

我使用的是LibGDX,SpriteBatch和ShapeRenderer有一个透视问题或者什么东西。当我用两个(下面的代码)绘制东西时,地球纹理比它应该小。 我甚至可以手动设置尺寸值,但它仍然是错误的。 我正在设置: Matrix4 matrix = cam.combined; batch.setProjectionMatrix(matrix); sr.setProjectionMatrix(matrix); 和绘制代码是… // outline sr.begin(ShapeRenderer.ShapeType.Filled); sr.setColor(Color.BLACK); sr.circle(c.getPos().x,c.getPos().y,c.getSize()); sr.end(); // planet tex batch.begin(); batch.draw(c.getTexture(), c.getDrawPosition().x, c.getDrawPosition().y, c.getSize(), c.getSize()); batch.draw(c.getShadow(), c.getDrawPosition().x, c.getDrawPosition().y, c.getSize(), c.getSize()); batch.end(); 纹理和形状都居中正确和c.getSize()应始终返回相同的值,所以我想弄清楚为什么这是行不通的。 我已经尝试手动设置值的大小,它仍然这样做,所以无论是纹理呈现在错误的大小或以某种方式ShapeRenderer和SpriteBatch使用不同的相机/投影。

如何在LibGdx + SpriteBatch中使用多个着色器

我正在编写一个2D游戏libgdx。 我正在使用一个SpriteBatch来绘制一些Sprites 。 现在我想用SpriteBatch来使用多个ShaderPrograms ,但不幸的是,一次只能设置一个ShaderProgram。 例如,我想用特定的颜色绘制整个场景,并希望通过在着色器中操作texCoords来为某些精灵添加视差效果。 我知道,在原生的OpenGL中,您可以在绘制调用之前启用尽可能多的着色器。 但似乎在libgdx中是不可能的。

我的Sprite矩形移动,但我的精灵没有

这就是问题,当我建立时,一切正常,一切正常,但是当你进入游戏时,精灵就在那里。 但是,精灵不移动,精灵RECTANGLE。 这意味着,如果我使用箭头键移动“精灵”,就像我在我的类的更新方法中定义的那样,矩形将自由移动,并截断精灵的部分。 如果我把它移动到足够的距离,矩形将离开精灵,精灵将消失。 下面是它的样子: 另一个当我用我的箭头键移动: 这里是我的精灵类的代码: class Player : Sprite { const string PLAYER_ASSETNAME = "CharacterLeft"; const int START_POSITION_X = 125; const int START_POSITION_Y = 245; const int WIZARD_SPEED = 160; const int MOVE_UP = -1; const int MOVE_DOWN = 1; const int MOVE_LEFT = -1; const int MOVE_RIGHT = 1; enum State { […]

Spritebatch和Shaperenderer

当我使用相同的spritebatch绘制纹理,并在其中调用shaperenderer时,它是一种行为不端,像纹理没有得到绘制或字体不被绘制,为什么发生? 例如(pseusdo代码): spritebatch.begin() draw texture shaperenderer.begin() shaperenderer.end() spritebatch.end() 但是当我用不同的方式使用它,并开始它正在绘制我想要的方式,但绘制这么多的精灵,减less了手机的性能。原因我得绘制许多精灵,因为我想要一些纹理重叠上一些其他forms的function。有什么建议吗?

批量元素

我不明白配料是如何工作的。 我所理解的:批处理对将相似的元素重新组合在一起并在一个绘制调用(performance ++)中绘制它们是有用的,目前在我的应用程序中绘制元素的时间是90%。 我如何做到这一点:我需要用相同的材​​质(着色器,纹理,…)和他的types(静态或dynamic几何)重新组合元素。 这是我的渲染结构: // Get Visibles spacials. SpacialSet* spacials = this->scene; SpacialSet* visibleSpacials = this->culler->execute(spacials, this->scene->camera); // Render the scene (this method call "draw", for each spacial) this->renderer->render(visibleSpacials, this->scene->camera); 我如何画一个元素: void Renderer::draw( Spacial* spacial ) { this->setGeometry(spacial->geometry); // Bind buffers this->setMaterial(spacial->material); // Send data to shader/bind textures. this->drawPrimitive( material->drawingMode, geometry->indicesCount); } 我怎么想我会做到这一点: 我应该创建一个聪明的“批处理”类,他的目标是创建一个新的网格(大的VBO,指向纹理,材质),将所有空间合并为同一个服装。 […]

雪碧批量似乎缓慢

我已经在OpenGL中实现了一个sprite批处理系统,它将根据纹理批量生成sprites。 不过,当我使用相同的纹理渲染~5000个精灵时,我大约可以达到30fps。 过程如下 创建也创建一个设置大小的VBO的精灵批次,也创建着色器 调用开始并初始化渲染模式(此时只需设置alpha) 调用与精灵绘制。 这将检查是否已经加载了精灵的纹理,如果是这样,它只是创建一个指向该批处理项的指针并添加新的精灵坐标。 如果不是的话,它会创建一个新的批量项目,并将精灵坐标添加到该项目; 它将批次项目添加到主批次中。 如果达到最大精灵计数,将会调用渲染 调用结束调用渲染来渲染批处理中的左侧图片,并重置缓冲区偏移量 渲染循环遍历批处理中的每个项目,并绑定批处理项目的纹理,将数据映射到缓冲区,然后绘制数组。 然后缓冲区将被所绘制的精灵数量所抵消。 我有一种感觉,这可能是我用来存储批量精灵的方法,或者它可能是我失踪的其他东西,但我仍然可以解决它。 类文件位于以下URL中: http://pastebin.com/iCB608tA (表头) http://pastebin.com/ZAytErGB(class ) 最重要的是,我也遇到了一个奇怪的问题,其中两个精灵在第二个精灵之后将使用与最后一个相同的坐标。 但是,这是一个很好的画。 我似乎无法find是什么原因造成这个问题。

SpriteBatch深度在0.0到1.0之间最小的增量?

当我尝试混合两种不同的SpriteSort模式时,我遇到了XNA中SpriteBatch一些问题。 (从延期开始,结束,从BackToFront开始sorting不正确。)我已经决定给我绘制的一切,用SpriteBatch深度值。 为此,在浮点variables上可以使用的最小增量是什么,它将被用作深度参数而不会遇到舍入问题? 这个浮点数的有效值在0.0到1.0之间。 这是一个浮点数,而不是双精度数,语言是C#。 更新:我的testing显示,0.008f是我可以改变我的深度值的最小量,并确保sorting工作。 我猜在BasicEffect或SpriteBatch中还有其他的东西在玩。 我正在尝试使用的是我的游戏地图网格的渲染。 我想大量使用透明度和重叠来创建瓷砖,装饰品和角色的特定视觉外观。 从本质上讲,我使用画家的algorithm从后排到前面依次绘制拼图。 我有他们编号,所以我知道sorting是正确的。 我试图在地图顶部绘制的装饰物不会出现,当我的深度递减设置为足够低的数量来绘制我需要的一切。 它只能在一个范围内正常工作,我只能访问大约100个独特的深度。 更新有关SpriteSortMode问题(按要求): 到目前为止,在我的项目中,我已经得到了很好的使用SpriteSortMode.Deferred的一切。 我有你所期望的所有标准UI组件,窗口化,裁剪等工作。 现在我试图画我的地图网格。 就像窗口/裁剪一样,这需要按照特定的顺序完成才能看起来正确。 网格瓦片以特定的顺序绘制。 为了适应重叠,在绘制下一个瓦片之前,在瓦片顶部绘制装饰物/角色。 不管我做了什么,我的装饰品/角色总是会在瓷砖下绘制。 改变抽签顺序没有影响。 即使画出所有的瓷砖,然后画出这些瓷砖,结果它们出现在瓷砖下面。 特别奇怪的是,当我滚动地图时,我的UI元素继续出现在问题图块上方。 我切换到SpriteSortMode.BackToFront和足够高的深度差异(〜0.01)我看到的东西在网格上的预期,但这种深度差异太高,以支持地图的每个可见的瓷砖。 我正在寻找一个更好的解决scheme,而不是写代码,每次绘制结束和开始一个新的SpriteBatch。

雪碧分类问题

我为这个模糊的标题道歉,我不知道怎么说这个问题。 我正在使用tIDE来协助我进行游戏的世界发展。 为了给tIDE中的图层提供一个dynamic效果,在图层绘制之前或之后,可以将事件连接起来绘制精灵,以在运行时创建前景或背景效果。 这一切工作正常,但是,我明白这个工作的唯一方法是通过调用tIDE的内部spritebatch来创建这个效果。 这对我造成了一个问题,因为在tIDE的源代码中,它的spritebatch的调用块被设置为SpriteSortMode.Deferred,我的角色通过drawdepth值在前面和后面绘制了粒子元素。 我可以使用单独的spritebatch实例并调用我的角色的绘制方法,并在那里设置spritesorting,但是我的角色被绘制在我的tIDE地图的所有图层的顶部。 对我来说,这比我想要的那些没有被绘制的粒子还要糟糕。 所以,总而言之,我希望所有的垃圾都能工作,但是现在我唯一可以做的就是通过调用一个spritebatch.End();然后在我的角色的绘制方法中joinspritebatch。用SpriteSortMode.BackToFront开始一个新的调用Begin(),完成我所有角色的绘制逻辑,然后调用另一个spritebatch.End(); 接下来再次通过一个新的spritebatch.Begin()。 显然这是不可取的,但我不知道其他可行的select。 任何人有什么智慧可以传授给我,我该如何处理呢?

在XNA中堆叠SpriteBatch的绘图matrix

我正在尝试使用SpriteBatch为XNA制作2D引擎。 我的object unit是Entity ,可以包含其他Entities作为其子实体。 但是,绘制它们时,旋转和缩放堆叠效果不佳。 这是我的实体代码: protected virtual void PreDraw(Engine pEngine) { pEngine.PushMatrix(); { // Transform Matrix // Translate pEngine.DrawingMatrix *= Matrix.CreateTranslation(this.X, this.Y, 0); { // Scale float translateX = this.ScaleCenterY + this.X; float translateY = this.ScaleCenterX + this.Y; pEngine.DrawingMatrix *= Matrix.CreateTranslation(-translateX, -translateY, 0); pEngine.DrawingMatrix *= Matrix.CreateScale(this.ScaleX, this.ScaleY, 0); pEngine.DrawingMatrix *= Matrix.CreateTranslation(translateX, translateY, 0); } […]