使用端点和起点在libgdx中绘制CatmullRomSpline

所以我的目标是绘制一个类似于这个样条的样条线(线穿过每个点): 在此处输入图像描述

但是样条曲线循环(从终点2回到起点):

在此处输入图像描述

我尝试在catmullromspline中更改“连续”布尔值,但这导致只在屏幕中心绘制一个点。

当它到达最后一点时我也结束了线条画,但结果很难看,因为线条在起点和终点仍然弯曲。

我在源代码中到处查找,找不到可以阻止它循环的函数。

据我所知,贝塞尔样条线不会经过所有点(它们只能在它们附近通过)。

所以我该怎么做?

这是我的代码:

... public class GameScreen implements Screen { final game game; float w=800; float h=480; OrthographicCamera camera; long startTime; Texture baseTexture=new Texture(Gdx.files.internal("white.png")); public GameScreen(final game gam) { this.game = gam; startTime = TimeUtils.millis(); camera = new OrthographicCamera(); camera.setToOrtho(false, w, h); setup(); } //https://github.com/libgdx/libgdx/wiki/Path-interface-&-Splines int k = 10000; //increase k for more fidelity to the spline Vector2[] points = new Vector2[k]; Vector2 cp[] = new Vector2[]{ new Vector2(w/2, h), new Vector2(w/2, h/2),new Vector2(50, 50) }; ShapeRenderer rope=new ShapeRenderer(); public void setup(){ CatmullRomSpline myCatmull = new CatmullRomSpline( cp, true); for(int i = 0; i < k; ++i) { points[i] = new Vector2(); myCatmull.valueAt(points[i], ((float)i)/((float)k-1)); } } @Override public void render(float delta) { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); Gdx.gl20.glLineWidth(50); game.batch.begin(); rope.setAutoShapeType(true); rope.begin(); for(int i = 0; i < k-1; ++i) { //rope.line(points[i], points[i+1]); //shaper.line(myCatmull.valueAt(points[i], ((float)i)/((float)k-1)), myCatmull.valueAt(points[i+1], ((float)i)/((float)k-1))); game.batch.draw(baseTexture, points[i].x, points[i].y, 5, 5); } rope.end(); for(int i=0;i<cp.length;i++){//draw the location of each point game.font.draw(game.batch, "point "+i, cp[i].x, cp[i].y); } //logging systems for(int i=0;i<20;i++){ if(Gdx.input.isTouched(i)) game.font.draw(game.batch, "x:"+Gdx.input.getX(i)+" y:"+Gdx.input.getY(i), 0, (game.font.getCapHeight()+10)*(i+1)); } game.font.draw(game.batch, "fps:"+Gdx.graphics.getFramesPerSecond()+" log:"+log, 0, h-game.font.getCapHeight()); game.batch.end(); } ... 

Interesting Posts