com.badlogic.gdx.math.Matrix4.getTranslation()方法的使用及代码示例

x33g5p2x  于2022-01-25 转载在 其他  
字(11.7k)|赞(0)|评价(0)|浏览(81)

本文整理了Java中com.badlogic.gdx.math.Matrix4.getTranslation()方法的一些代码示例,展示了Matrix4.getTranslation()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Matrix4.getTranslation()方法的具体详情如下:
包路径:com.badlogic.gdx.math.Matrix4
类名称:Matrix4
方法名:getTranslation

Matrix4.getTranslation介绍

暂无

代码示例

代码示例来源:origin: libgdx/libgdx

private Vector3 getTranslation (Matrix4 worldTransform, Vector3 center, Vector3 output) {
  if (center.isZero())
    worldTransform.getTranslation(output);
  else if (!worldTransform.hasRotationOrScaling())
    worldTransform.getTranslation(output).add(center);
  else
    output.set(center).mul(worldTransform);
  return output;
}

代码示例来源:origin: libgdx/libgdx

private Vector3 getTranslation (Matrix4 worldTransform, Vector3 center, Vector3 output) {
  if (center.isZero())
    worldTransform.getTranslation(output);
  else if (!worldTransform.hasRotationOrScaling())
    worldTransform.getTranslation(output).add(center);
  else
    output.set(center).mul(worldTransform);
  return output;
}

代码示例来源:origin: libgdx/libgdx

/** Checks if entity is inside camera frustum.
 *
 * @param entity An entity
 * @return True if entity is inside camera frustum */
private boolean entityInFrustum (BulletEntity entity) {
  entity.modelInstance.transform.getTranslation(tmpV1);
  return frustumCam.frustum.sphereInFrustum(tmpV1.add(entity.boundingBox.getCenter(tmpV2)), entity.boundingBoxRadius);
}

代码示例来源:origin: libgdx/libgdx

/** Renders a bounding box to the depth buffer. Does not need to be axis aligned, but will use the translation, rotation and
 * scale from the matrix parameter.
 *
 * @param worldTransform World transform of the box to render.
 * @param halfExt Half extents of the box. */
public void drawBB (Matrix4 worldTransform, Vector3 halfExt) {
  Vector3 center = tmpV1.setZero();
  setAABBVertices(center, halfExt, box);
  worldTransform.getTranslation(center);
  for (Vector3 vertex : box) {
    vertex.rot(worldTransform);
    vertex.add(center);
  }
  drawBox(box, Policy.DRAW);
}

代码示例来源:origin: libgdx/libgdx

public void renderSkeleton (final ModelInstance instance) {
  shapeRenderer.setProjectionMatrix(cam.combined);
  shapeRenderer.begin(ShapeType.Line);
  for (Node node : instance.nodes) {
    shapeRenderer.setColor(node.isAnimated ? Color.RED : Color.YELLOW);
    node.globalTransform.getTranslation(tmpV);
    shapeRenderer.box(tmpV.x, tmpV.y, tmpV.z, 0.5f, 0.5f, 0.5f);
    for (Node child : node.getChildren())
      renderSkeleton(tmpV, child);
  }
  shapeRenderer.end();
}

代码示例来源:origin: libgdx/libgdx

public void renderSkeleton (final Vector3 from, final Node node) {
  final Vector3 pos = vectorPool.obtain();
  node.globalTransform.getTranslation(pos);
  shapeRenderer.setColor(node.isAnimated ? Color.RED : Color.YELLOW);
  shapeRenderer.box(pos.x, pos.y, pos.z, 0.5f, 0.5f, 0.5f);
  shapeRenderer.setColor(Color.WHITE);
  shapeRenderer.line(from.x, from.y, from.z, pos.x, pos.y, pos.z);
  for (Node child : node.getChildren())
    renderSkeleton(pos, child);
  vectorPool.free(pos);
}

代码示例来源:origin: libgdx/libgdx

/** Averages the given transform with this one and stores the result in this matrix. Translations and scales are lerped while
 * rotations are slerped.
 * @param other The other transform
 * @param w Weight of this transform; weight of the other transform is (1 - w)
 * @return This matrix for chaining */
public Matrix4 avg (Matrix4 other, float w) {
  getScale(tmpVec);
  other.getScale(tmpForward);
  getRotation(quat);
  other.getRotation(quat2);
  getTranslation(tmpUp);
  other.getTranslation(right);
  setToScaling(tmpVec.scl(w).add(tmpForward.scl(1 - w)));
  rotate(quat.slerp(quat2, 1 - w));
  setTranslation(tmpUp.scl(w).add(right.scl(1 - w)));
  return this;
}

代码示例来源:origin: libgdx/libgdx

/** Averages the given transform with this one and stores the result in this matrix. Translations and scales are lerped while
 * rotations are slerped.
 * @param other The other transform
 * @param w Weight of this transform; weight of the other transform is (1 - w)
 * @return This matrix for chaining */
public Matrix4 avg (Matrix4 other, float w) {
  getScale(tmpVec);
  other.getScale(tmpForward);
  getRotation(quat);
  other.getRotation(quat2);
  getTranslation(tmpUp);
  other.getTranslation(right);
  setToScaling(tmpVec.scl(w).add(tmpForward.scl(1 - w)));
  rotate(quat.slerp(quat2, 1 - w));
  setTranslation(tmpUp.scl(w).add(right.scl(1 - w)));
  return this;
}

代码示例来源:origin: libgdx/libgdx

@Override
public <T extends RenderableProvider> void analyze (BaseLight light, Camera camera, Iterable<T> renderableProviders) {
  getRenderables(renderableProviders);
  prepareCamera(camera);
  bb1.inf();
  for (Renderable renderable : renderables) {
    renderable.worldTransform.getTranslation(tmpV);
    tmpV.add(renderable.meshPart.center);
    if (camera.frustum.sphereInFrustum(tmpV, renderable.meshPart.radius)) {
      bb1.ext(tmpV, renderable.meshPart.radius);
    }
  }
  computeResult(bb1, camera);
  renderablesPool.flush();
  renderables.clear();
}

代码示例来源:origin: libgdx/libgdx

/** Averages the given transforms with the given weights and stores the result in this matrix. Translations and scales are
 * lerped while rotations are slerped. Does not destroy the data contained in t or w; Sum of w_i must be equal to 1, or
 * unexpected results will occur.
 * @param t List of transforms
 * @param w List of weights
 * @return This matrix for chaining */
public Matrix4 avg (Matrix4[] t, float[] w) {
  tmpVec.set(t[0].getScale(tmpUp).scl(w[0]));
  quat.set(t[0].getRotation(quat2).exp(w[0]));
  tmpForward.set(t[0].getTranslation(tmpUp).scl(w[0]));
  for (int i = 1; i < t.length; i++) {
    tmpVec.add(t[i].getScale(tmpUp).scl(w[i]));
    quat.mul(t[i].getRotation(quat2).exp(w[i]));
    tmpForward.add(t[i].getTranslation(tmpUp).scl(w[i]));
  }
  quat.nor();
  setToScaling(tmpVec);
  rotate(quat);
  setTranslation(tmpForward);
  return this;
}

代码示例来源:origin: libgdx/libgdx

/** Averages the given transforms with the given weights and stores the result in this matrix. Translations and scales are
 * lerped while rotations are slerped. Does not destroy the data contained in t or w; Sum of w_i must be equal to 1, or
 * unexpected results will occur.
 * @param t List of transforms
 * @param w List of weights
 * @return This matrix for chaining */
public Matrix4 avg (Matrix4[] t, float[] w) {
  tmpVec.set(t[0].getScale(tmpUp).scl(w[0]));
  quat.set(t[0].getRotation(quat2).exp(w[0]));
  tmpForward.set(t[0].getTranslation(tmpUp).scl(w[0]));
  for (int i = 1; i < t.length; i++) {
    tmpVec.add(t[i].getScale(tmpUp).scl(w[i]));
    quat.mul(t[i].getRotation(quat2).exp(w[i]));
    tmpForward.add(t[i].getTranslation(tmpUp).scl(w[i]));
  }
  quat.nor();
  setToScaling(tmpVec);
  rotate(quat);
  setTranslation(tmpForward);
  return this;
}

代码示例来源:origin: libgdx/libgdx

/** Averages the given transforms and stores the result in this matrix. Translations and scales are lerped while rotations are
 * slerped. Does not destroy the data contained in t.
 * @param t List of transforms
 * @return This matrix for chaining */
public Matrix4 avg (Matrix4[] t) {
  final float w = 1.0f / t.length;
  tmpVec.set(t[0].getScale(tmpUp).scl(w));
  quat.set(t[0].getRotation(quat2).exp(w));
  tmpForward.set(t[0].getTranslation(tmpUp).scl(w));
  for (int i = 1; i < t.length; i++) {
    tmpVec.add(t[i].getScale(tmpUp).scl(w));
    quat.mul(t[i].getRotation(quat2).exp(w));
    tmpForward.add(t[i].getTranslation(tmpUp).scl(w));
  }
  quat.nor();
  setToScaling(tmpVec);
  rotate(quat);
  setTranslation(tmpForward);
  return this;
}

代码示例来源:origin: libgdx/libgdx

/** Averages the given transforms and stores the result in this matrix. Translations and scales are lerped while rotations are
 * slerped. Does not destroy the data contained in t.
 * @param t List of transforms
 * @return This matrix for chaining */
public Matrix4 avg (Matrix4[] t) {
  final float w = 1.0f / t.length;
  tmpVec.set(t[0].getScale(tmpUp).scl(w));
  quat.set(t[0].getRotation(quat2).exp(w));
  tmpForward.set(t[0].getTranslation(tmpUp).scl(w));
  for (int i = 1; i < t.length; i++) {
    tmpVec.add(t[i].getScale(tmpUp).scl(w));
    quat.mul(t[i].getRotation(quat2).exp(w));
    tmpForward.add(t[i].getTranslation(tmpUp).scl(w));
  }
  quat.nor();
  setToScaling(tmpVec);
  rotate(quat);
  setTranslation(tmpForward);
  return this;
}

代码示例来源:origin: libgdx/libgdx

instances[i].transform.getTranslation(tmp);
  if (cam.frustum.sphereInFrustum(tmp, 1)) {
    ((ColorAttribute)instances[i].materials.get(0).get(ColorAttribute.Diffuse)).color.set(Color.WHITE);
batch.begin();
for (int i = 0; i < instances.length; i++) {
  instances[i].transform.getTranslation(tmp);
  cam.project(tmp);
  if (tmp.z < 0) continue;

代码示例来源:origin: libgdx/libgdx

chassis.transform.getTranslation(camera.position);
tmpV.set(camera.position).sub(5, 0, 5).y = 0f;
camera.position.add(tmpV.nor().scl(-6f)).y = 4.f;
chassis.transform.getTranslation(tmpV);
camera.lookAt(tmpV);
camera.up.set(Vector3.Y);

代码示例来源:origin: libgdx/libgdx

@Override
  public void set (BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) {
    if (renderable.environment == null)
      shader.program.setUniform3fv(shader.loc(inputID), ones, 0, ones.length);
    else {
      renderable.worldTransform.getTranslation(tmpV1);
      if (combinedAttributes.has(ColorAttribute.AmbientLight))
        cacheAmbientCubemap.set(((ColorAttribute)combinedAttributes.get(ColorAttribute.AmbientLight)).color);
      if (combinedAttributes.has(DirectionalLightsAttribute.Type)) {
        Array<DirectionalLight> lights = ((DirectionalLightsAttribute)combinedAttributes
          .get(DirectionalLightsAttribute.Type)).lights;
        for (int i = dirLightsOffset; i < lights.size; i++)
          cacheAmbientCubemap.add(lights.get(i).color, lights.get(i).direction);
      }
      if (combinedAttributes.has(PointLightsAttribute.Type)) {
        Array<PointLight> lights = ((PointLightsAttribute)combinedAttributes.get(PointLightsAttribute.Type)).lights;
        for (int i = pointLightsOffset; i < lights.size; i++)
          cacheAmbientCubemap.add(lights.get(i).color, lights.get(i).position, tmpV1, lights.get(i).intensity);
      }
      cacheAmbientCubemap.clamp();
      shader.program.setUniform3fv(shader.loc(inputID), cacheAmbientCubemap.data, 0, cacheAmbientCubemap.data.length);
    }
  }
}

代码示例来源:origin: libgdx/libgdx

@Override
  public void set (BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) {
    if (renderable.environment == null)
      shader.program.setUniform3fv(shader.loc(inputID), ones, 0, ones.length);
    else {
      renderable.worldTransform.getTranslation(tmpV1);
      if (combinedAttributes.has(ColorAttribute.AmbientLight))
        cacheAmbientCubemap.set(((ColorAttribute)combinedAttributes.get(ColorAttribute.AmbientLight)).color);
      if (combinedAttributes.has(DirectionalLightsAttribute.Type)) {
        Array<DirectionalLight> lights = ((DirectionalLightsAttribute)combinedAttributes
          .get(DirectionalLightsAttribute.Type)).lights;
        for (int i = dirLightsOffset; i < lights.size; i++)
          cacheAmbientCubemap.add(lights.get(i).color, lights.get(i).direction);
      }
      if (combinedAttributes.has(PointLightsAttribute.Type)) {
        Array<PointLight> lights = ((PointLightsAttribute)combinedAttributes.get(PointLightsAttribute.Type)).lights;
        for (int i = pointLightsOffset; i < lights.size; i++)
          cacheAmbientCubemap.add(lights.get(i).color, lights.get(i).position, tmpV1, lights.get(i).intensity);
      }
      cacheAmbientCubemap.clamp();
      shader.program.setUniform3fv(shader.loc(inputID), cacheAmbientCubemap.data, 0, cacheAmbientCubemap.data.length);
    }
  }
}

代码示例来源:origin: libgdx/libgdx

@Override
public void render () {
  GL20 gl = Gdx.gl20;
  gl.glClearColor(0, 0, 0, 0);
  gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
  gl.glEnable(GL20.GL_DEPTH_TEST);
  cam.update();
  modelBatch.begin(cam);
  int visible = 0;
  for (int i = 0; i < instances.length; i++) {
    instances[i].transform.getTranslation(pos);
    if (cam.frustum.sphereInFrustum(pos, 1)) {
      ((ColorAttribute)instances[i].materials.get(0).get(ColorAttribute.Diffuse)).color.set(Color.WHITE);
      visible++;
    } else {
      ((ColorAttribute)instances[i].materials.get(0).get(ColorAttribute.Diffuse)).color.set(Color.RED);
    }
    modelBatch.render(instances[i]);
  }
  modelBatch.end();
  if (Gdx.input.isKeyPressed(Keys.A)) cam.rotate(20 * Gdx.graphics.getDeltaTime(), 0, 1, 0);
  if (Gdx.input.isKeyPressed(Keys.D)) cam.rotate(-20 * Gdx.graphics.getDeltaTime(), 0, 1, 0);
  gl.glDisable(GL20.GL_DEPTH_TEST);
  batch.begin();
  font.draw(batch, "visible: " + visible + "/100" + ", fps: " + Gdx.graphics.getFramesPerSecond(), 0, 20);
  batch.end();
}

代码示例来源:origin: libgdx/libgdx

shadowLight.begin(character.transform.getTranslation(tmpVector), cam.direction);
shadowBatch.begin(shadowLight.getCamera());
if (character != null) shadowBatch.render(character);

代码示例来源:origin: com.badlogicgames.gdx/gdx

private Vector3 getTranslation (Matrix4 worldTransform, Vector3 center, Vector3 output) {
  if (center.isZero())
    worldTransform.getTranslation(output);
  else if (!worldTransform.hasRotationOrScaling())
    worldTransform.getTranslation(output).add(center);
  else
    output.set(center).mul(worldTransform);
  return output;
}

相关文章