使用ModelBuilder.createArrow创建箭头时,可以防止箭头被“拖拉”

时间:2019-03-07 15:18:03

标签: java libgdx

在我的libgdx android应用中,我使用以下代码创建箭头

 @Override
 public void onAxonConnected(Pos one, Pos two) {

  Model lineModel = build.createArrow(one.x, one.y, one.z, two.x, two.y, two.z, 0.15 f, 0.05 f, 5, GL20.GL_TRIANGLES, new Material(), VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
  ModelInstance line = new ModelInstance(lineModel);
  this.addArrowModelInstanceToRender(line);
 }

与较短的连接箭头相比,如何防止较长的箭头变得“笨拙”?

我假设某个地方正在进行乘法运算,但是我希望它们都以相同的宽度和箭头大小进行渲染。使用createArrow函数可以实现吗?还是我必须为此建立自己的模型?

Mix of small and big arrows

1 个答案:

答案 0 :(得分:1)

一种解决方案是计算代表箭头的起点和终点的两个向量之间的距离,然后将该值传递给乘以或除以常数(或两个)的capLength和stemThickness。

Vector3 start = new Vector3(one.x, one.y, one.z);
Vector3 end = new  Vector3(two.x, two.y, two.z);
float distance = start.dst(end);
Model lineModel = build.createArrow(one.x, one.y, one.z, two.x, two.y, two.z, CAP_LENGTH_CONSTANT / distance, STEM_THICKNESS_CONSTANT / distance, 5, GL20.GL_TRIANGLES, new Material(), VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);

您可能需要测试一些数字才能找到正确的常数