gpt4 book ai didi

java - 使用 libgdx 渲染椭圆

转载 作者:行者123 更新时间:2023-11-30 11:42:17 25 4
gpt4 key购买 nike

我正在尝试使用 ShapeRenderer 渲染椭圆,并提出了以下部分解决方案:

void drawEllipse(float x, float y, float width, float height) {
float r = (width / 2);
ShapeRenderer renderer = new ShapeRenderer();
renderer.setProjectionMatrix(/* camera matrix */);
renderer.begin(ShapeType.Circle);
renderer.scale(1f, (height / width), 1f);
renderer.circle(x + r, y, r);
renderer.identity();
renderer.end();
}

这会在指定的坐标处绘制一个具有正确宽度和高度的椭圆;然而,比例变换似乎导致圆圈在视口(viewport)中平移,而我未能成功确定平移背后的数学原理。我正在使用 y-up 的正交投影,其中坐标映射到屏幕上的像素。我对 OpenGL 不是很熟悉。

如何使用 libgdx 绘制椭圆,并让它在我指定的精确坐标处绘制椭圆?理想情况下,如果椭圆包含在矩形中,这意味着椭圆的原点位于左上角。

最佳答案

新的 Libgdx ShapeRenderer API(当前版本,在 v0.9.8 之后的任何版本中)包含一个 ellipse drawing method所以你可以忽略这个答案的其余部分。 ShapeRenderer 方法在其他方面也发生了变化(例如,ShapeType 只是 FilledLine、或现在)。

对于坚持使用旧 API 的人,您应该能够通过确保围绕原点进行缩放来解决失真问题。这是一个标准的 OpenGL 实践(所以它有点迟钝,但他们遵循 OpenGL 的领导)。参见 Opengl order of matrix transformationsOpenGL: scale then translate? and how? .更好的是(同样是标准的 OpenGL 实践)你最终以你希望它们发生的相反顺序列出操作,所以要制作一个圆圈,将它扭曲成一个椭圆形,然后将它移动到你实际编写代码的特定目的地,例如:

renderer.begin(ShapeType.Circle);
renderer.translate(x, y, 0);
renderer.scale(1f, (height/width), 1f);
renderer.circle(0, 0, r);
renderer.end();

关于java - 使用 libgdx 渲染椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820848/

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