gpt4 book ai didi

java - LibGDX:渲染基于可缩放 vector 的形状的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-02 11:10:20 24 4
gpt4 key购买 nike

在我的游戏(使用 LibGDX 创建)中,我有一个充满许多不断改变大小的圆圈的游戏世界。因为有这么多很多圆圈,我想最大化它们的渲染性能:我听说过 ShapeRenderer,但似乎它并不是最好的表现。 PixMap 也不是解决方案,因为我的圈子应该是基于 vector 。他们还有另一个更快的解决方案吗? ShapeRenderer 真的那么慢吗?

PS:我已经在使用 block 来减少渲染时间。

最佳答案

对于ShapeRenderer(特别是圆),如果我们看一下方法,半径不会影响性能,段才是工作所在。这很可能是对您造成伤害的原因,当您放大尺寸时,您会增加细节部分。

我也不确定是否有opengl native vector 图形...我认为最终要到达显卡,您最终需要成为顶点和多边形(如果您正在填充)。所以实际上,我认为 Pixmap 解决方案就是您可能正在寻找的解决方案。您计算要绘制一次的线段和多边形(以您需要的最高分辨率)。

使用 Pixmap,您应该能够以与使用缩放变量更改大小的任何其他纹理渲染一样高性能的方式执行此操作(应该与不更改比例一样高性能)。正如您从 ShapeRenderer 使用的圆绘制方法中看到的,圆实际上仍然只是描述一个多边形(您只是每次计算它的几何形状)。

如果您想尝试一下 Pixmap 选项,这里有一些代码可以帮助您引导。

这是一个用于构建 PolygonSprite 的 kotlin 函数。您必须进行数学计算来绘制圆的顶点,但您可以使用圆绘制方法来了解这一点。如果您计算半径为 1 的几何图形,那么您只需使用 x/y 比例即可将半径设置为您想要的任何大小。

    fun polygonSprite(points: Array<Vector2>): PolygonSprite {
val pix = Pixmap(1, 1, Pixmap.Format.RGBA8888)
pix.setColor(0xFFFFFFFF.toInt())
pix.fill()
val textureSolid = Texture(pix)
val vertices = FloatArray(points.size * 2)
val triangleIndices = triangulator.computeTriangles(vertices)
for (i in 0..points.size - 1) {
val point = points.get(i)
val offset = i * 2
vertices[offset] = point.x
vertices[offset + 1] = point.y
}
val polyReg = PolygonRegion(TextureRegion(textureSolid),
vertices, triangleIndices.toArray())
val poly = PolygonSprite(polyReg)
return poly
}

这是一些渲染代码。它考虑了父 Body 形状的相对定位和其他一些内容:

fun render(camera: OrthographicCamera) {
val parentRotation = (me().physicsRoot.rotationR() * MathUtils.radDeg)
val parentTransform = me().physicsRoot.transform
val myPosition = vec2(offsetX, offsetY)
parentTransform.mul(myPosition)
poly.color = color.get()
poly.setOrigin(0f, 0f)
poly.setPosition(myPosition.x, myPosition.y)
poly.rotation = parentRotation + rotationD
poly.setScale(scaleX, scaleY)
poly.draw(JJ.B.renderWorld.polyBatch)
recycle(myPosition)
}

另外,不要为每一个都制作一个新的,尝试重复使用它们。

PS:另一种选择是制作圆形着色器:D

关于java - LibGDX:渲染基于可缩放 vector 的形状的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50654625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com