org.lwjglb.engine.items.Terrain类的使用及代码示例

x33g5p2x  于2022-01-30 转载在 其他  
字(14.8k)|赞(0)|评价(0)|浏览(113)

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

Terrain介绍

暂无

代码示例

代码示例来源:origin: lwjglgamedev/lwjglbook

protected Vector3f[] getTriangle(Vector3f position, Box2D boundingBox, GameItem terrainBlock) {
  // Get the column and row of the heightmap associated to the current position
  float cellWidth = boundingBox.width / (float) verticesPerCol;
  float cellHeight = boundingBox.height / (float) verticesPerRow;
  int col = (int) ((position.x - boundingBox.x) / cellWidth);
  int row = (int) ((position.z - boundingBox.y) / cellHeight);
  Vector3f[] triangle = new Vector3f[3];
  triangle[1] = new Vector3f(
      boundingBox.x + col * cellWidth,
      getWorldHeight(row + 1, col, terrainBlock),
      boundingBox.y + (row + 1) * cellHeight);
  triangle[2] = new Vector3f(
      boundingBox.x + (col + 1) * cellWidth,
      getWorldHeight(row, col + 1, terrainBlock),
      boundingBox.y + row * cellHeight);
  if (position.z < getDiagonalZCoord(triangle[1].x, triangle[1].z, triangle[2].x, triangle[2].z, position.x)) {
    triangle[0] = new Vector3f(
        boundingBox.x + col * cellWidth,
        getWorldHeight(row, col, terrainBlock),
        boundingBox.y + row * cellHeight);
  } else {
    triangle[0] = new Vector3f(
        boundingBox.x + (col + 1) * cellWidth,
        getWorldHeight(row + 2, col + 1, terrainBlock),
        boundingBox.y + (row + 1) * cellHeight);
  }
  return triangle;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

public float getHeight(Vector3f position) {
  float result = Float.MIN_VALUE;
  // For each terrain block we get the bounding box, translate it to view coodinates
  // and check if the position is contained in that bounding box
  Box2D boundingBox = null;
  boolean found = false;
  GameItem terrainBlock = null;
  for (int row = 0; row < terrainSize && !found; row++) {
    for (int col = 0; col < terrainSize && !found; col++) {
      terrainBlock = gameItems[row * terrainSize + col];
      boundingBox = boundingBoxes[row][col];
      found = boundingBox.contains(position.x, position.z);
    }
  }
  // If we have found a terrain block that contains the position we need
  // to calculate the height of the terrain on that position
  if (found) {
    Vector3f[] triangle = getTriangle(position, boundingBox, terrainBlock);
    result = interpolateHeight(triangle[0], triangle[1], triangle[2], position.x, position.z);
  }
  return result;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

gameItems[row * terrainSize + col] = terrainBlock;
boundingBoxes[row][col] = getBoundingBox(terrainBlock);

代码示例来源:origin: lwjglgamedev/lwjglbook

@Override
public void update(float interval, MouseInput mouseInput) {
  // Update camera based on mouse            
  if (mouseInput.isRightButtonPressed()) {
    Vector2f rotVec = mouseInput.getDisplVec();
    camera.moveRotation(rotVec.x * MOUSE_SENSITIVITY, rotVec.y * MOUSE_SENSITIVITY, 0);
  }
  // Update camera position
  Vector3f prevPos = new Vector3f(camera.getPosition());
  camera.movePosition(cameraInc.x * CAMERA_POS_STEP, cameraInc.y * CAMERA_POS_STEP, cameraInc.z * CAMERA_POS_STEP);
  // Check if there has been a collision. If true, set the y position to
  // the maximum height
  float height = terrain != null ? terrain.getHeight(camera.getPosition()) : -Float.MAX_VALUE;
  if (camera.getPosition().y <= height) {
    camera.setPosition(prevPos.x, prevPos.y, prevPos.z);
  }
  lightAngle += angleInc;
  if (lightAngle < 0) {
    lightAngle = 0;
  } else if (lightAngle > 180) {
    lightAngle = 180;
  }
  float zValue = (float) Math.cos(Math.toRadians(lightAngle));
  float yValue = (float) Math.sin(Math.toRadians(lightAngle));
  Vector3f lightDirection = this.scene.getSceneLight().getDirectionalLight().getDirection();
  lightDirection.x = 0;
  lightDirection.y = yValue;
  lightDirection.z = zValue;
  lightDirection.normalize();
}

代码示例来源:origin: lwjglgamedev/lwjglbook

gameItems[row * terrainSize + col] = terrainBlock;
boundingBoxes[row][col] = getBoundingBox(terrainBlock);

代码示例来源:origin: lwjglgamedev/lwjglbook

@Override
public void update(float interval, MouseInput mouseInput) {
  // Update camera based on mouse            
  if (mouseInput.isRightButtonPressed()) {
    Vector2f rotVec = mouseInput.getDisplVec();
    camera.moveRotation(rotVec.x * MOUSE_SENSITIVITY, rotVec.y * MOUSE_SENSITIVITY, 0);
  }
  // Update camera position
  Vector3f prevPos = new Vector3f(camera.getPosition());
  camera.movePosition(cameraInc.x * CAMERA_POS_STEP, cameraInc.y * CAMERA_POS_STEP, cameraInc.z * CAMERA_POS_STEP);
  // Check if there has been a collision. If true, set the y position to
  // the maximum height
  float height = terrain != null ? terrain.getHeight(camera.getPosition()) : -Float.MAX_VALUE;
  if (camera.getPosition().y <= height) {
    camera.setPosition(prevPos.x, prevPos.y, prevPos.z);
  }
  lightAngle += angleInc;
  if (lightAngle < 0) {
    lightAngle = 0;
  } else if (lightAngle > 180) {
    lightAngle = 180;
  }
  float zValue = (float) Math.cos(Math.toRadians(lightAngle));
  float yValue = (float) Math.sin(Math.toRadians(lightAngle));
  Vector3f lightDirection = this.scene.getSceneLight().getDirectionalLight().getDirection();
  lightDirection.x = 0;
  lightDirection.y = yValue;
  lightDirection.z = zValue;
  lightDirection.normalize();
}

代码示例来源:origin: lwjglgamedev/lwjglbook

public float getHeight(Vector3f position) {
  float result = Float.MIN_VALUE;
  // For each terrain block we get the bounding box, translate it to view coodinates
  // and check if the position is contained in that bounding box
  Box2D boundingBox = null;
  boolean found = false;
  GameItem terrainBlock = null;
  for (int row = 0; row < terrainSize && !found; row++) {
    for (int col = 0; col < terrainSize && !found; col++) {
      terrainBlock = gameItems[row * terrainSize + col];
      boundingBox = boundingBoxes[row][col];
      found = boundingBox.contains(position.x, position.z);
    }
  }
  // If we have found a terrain block that contains the position we need
  // to calculate the height of the terrain on that position
  if (found) {
    Vector3f[] triangle = getTriangle(position, boundingBox, terrainBlock);
    result = interpolateHeight(triangle[0], triangle[1], triangle[2], position.x, position.z);
  }
  return result;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

protected Vector3f[] getTriangle(Vector3f position, Box2D boundingBox, GameItem terrainBlock) {
  // Get the column and row of the heightmap associated to the current position
  float cellWidth = boundingBox.width / (float) verticesPerCol;
  float cellHeight = boundingBox.height / (float) verticesPerRow;
  int col = (int) ((position.x - boundingBox.x) / cellWidth);
  int row = (int) ((position.z - boundingBox.y) / cellHeight);
  Vector3f[] triangle = new Vector3f[3];
  triangle[1] = new Vector3f(
      boundingBox.x + col * cellWidth,
      getWorldHeight(row + 1, col, terrainBlock),
      boundingBox.y + (row + 1) * cellHeight);
  triangle[2] = new Vector3f(
      boundingBox.x + (col + 1) * cellWidth,
      getWorldHeight(row, col + 1, terrainBlock),
      boundingBox.y + row * cellHeight);
  if (position.z < getDiagonalZCoord(triangle[1].x, triangle[1].z, triangle[2].x, triangle[2].z, position.x)) {
    triangle[0] = new Vector3f(
        boundingBox.x + col * cellWidth,
        getWorldHeight(row, col, terrainBlock),
        boundingBox.y + row * cellHeight);
  } else {
    triangle[0] = new Vector3f(
        boundingBox.x + (col + 1) * cellWidth,
        getWorldHeight(row + 2, col + 1, terrainBlock),
        boundingBox.y + (row + 1) * cellHeight);
  }
  return triangle;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

gameItems[row * terrainSize + col] = terrainBlock;
boundingBoxes[row][col] = getBoundingBox(terrainBlock);

代码示例来源:origin: lwjglgamedev/lwjglbook

@Override
public void update(float interval, MouseInput mouseInput) {
  // Update camera based on mouse            
  if (mouseInput.isRightButtonPressed()) {
    Vector2f rotVec = mouseInput.getDisplVec();
    camera.moveRotation(rotVec.x * MOUSE_SENSITIVITY, rotVec.y * MOUSE_SENSITIVITY, 0);
  }
  // Update camera position
  Vector3f prevPos = new Vector3f(camera.getPosition());
  camera.movePosition(cameraInc.x * CAMERA_POS_STEP, cameraInc.y * CAMERA_POS_STEP, cameraInc.z * CAMERA_POS_STEP);
  // Check if there has been a collision. If true, set the y position to
  // the maximum height
  float height = terrain != null ? terrain.getHeight(camera.getPosition()) : -Float.MAX_VALUE;
  if (camera.getPosition().y <= height) {
    camera.setPosition(prevPos.x, prevPos.y, prevPos.z);
  }
  lightAngle += angleInc;
  if (lightAngle < 0) {
    lightAngle = 0;
  } else if (lightAngle > 180) {
    lightAngle = 180;
  }
  float zValue = (float) Math.cos(Math.toRadians(lightAngle));
  float yValue = (float) Math.sin(Math.toRadians(lightAngle));
  Vector3f lightDirection = this.scene.getSceneLight().getDirectionalLight().getDirection();
  lightDirection.x = 0;
  lightDirection.y = yValue;
  lightDirection.z = zValue;
  lightDirection.normalize();
}

代码示例来源:origin: lwjglgamedev/lwjglbook

public float getHeight(Vector3f position) {
  float result = Float.MIN_VALUE;
  // For each terrain block we get the bounding box, translate it to view coodinates
  // and check if the position is contained in that bounding box
  Box2D boundingBox = null;
  boolean found = false;
  GameItem terrainBlock = null;
  for (int row = 0; row < terrainSize && !found; row++) {
    for (int col = 0; col < terrainSize && !found; col++) {
      terrainBlock = gameItems[row * terrainSize + col];
      boundingBox = boundingBoxes[row][col];
      found = boundingBox.contains(position.x, position.z);
    }
  }
  // If we have found a terrain block that contains the position we need
  // to calculate the height of the terrain on that position
  if (found) {
    Vector3f[] triangle = getTriangle(position, boundingBox, terrainBlock);
    result = interpolateHeight(triangle[0], triangle[1], triangle[2], position.x, position.z);
  }
  return result;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

protected Vector3f[] getTriangle(Vector3f position, Box2D boundingBox, GameItem terrainBlock) {
  // Get the column and row of the heightmap associated to the current position
  float cellWidth = boundingBox.width / (float) verticesPerCol;
  float cellHeight = boundingBox.height / (float) verticesPerRow;
  int col = (int) ((position.x - boundingBox.x) / cellWidth);
  int row = (int) ((position.z - boundingBox.y) / cellHeight);
  Vector3f[] triangle = new Vector3f[3];
  triangle[1] = new Vector3f(
      boundingBox.x + col * cellWidth,
      getWorldHeight(row + 1, col, terrainBlock),
      boundingBox.y + (row + 1) * cellHeight);
  triangle[2] = new Vector3f(
      boundingBox.x + (col + 1) * cellWidth,
      getWorldHeight(row, col + 1, terrainBlock),
      boundingBox.y + row * cellHeight);
  if (position.z < getDiagonalZCoord(triangle[1].x, triangle[1].z, triangle[2].x, triangle[2].z, position.x)) {
    triangle[0] = new Vector3f(
        boundingBox.x + col * cellWidth,
        getWorldHeight(row, col, terrainBlock),
        boundingBox.y + row * cellHeight);
  } else {
    triangle[0] = new Vector3f(
        boundingBox.x + (col + 1) * cellWidth,
        getWorldHeight(row + 2, col + 1, terrainBlock),
        boundingBox.y + (row + 1) * cellHeight);
  }
  return triangle;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

gameItems[row * terrainSize + col] = terrainBlock;
boundingBoxes[row][col] = getBoundingBox(terrainBlock);

代码示例来源:origin: lwjglgamedev/lwjglbook

@Override
public void update(float interval, MouseInput mouseInput) {
  // Update camera based on mouse            
  if (mouseInput.isRightButtonPressed()) {
    Vector2f rotVec = mouseInput.getDisplVec();
    camera.moveRotation(rotVec.x * MOUSE_SENSITIVITY, rotVec.y * MOUSE_SENSITIVITY, 0);
  }
  // Update camera position
  Vector3f prevPos = new Vector3f(camera.getPosition());
  camera.movePosition(cameraInc.x * CAMERA_POS_STEP, cameraInc.y * CAMERA_POS_STEP, cameraInc.z * CAMERA_POS_STEP);
  // Check if there has been a collision. If true, set the y position to
  // the maximum height
  float height = terrain != null ? terrain.getHeight(camera.getPosition()) : -Float.MAX_VALUE;
  if (camera.getPosition().y <= height) {
    camera.setPosition(prevPos.x, prevPos.y, prevPos.z);
  }
  // Update directional light direction, intensity and colour
  SceneLight sceneLight = scene.getSceneLight();
  DirectionalLight directionalLight = sceneLight.getDirectionalLight();
  double angRad = Math.toRadians(lightAngle);
  directionalLight.getDirection().x = (float) Math.sin(angRad);
  directionalLight.getDirection().y = (float) Math.cos(angRad);
}

代码示例来源:origin: lwjglgamedev/lwjglbook

public float getHeight(Vector3f position) {
  float result = Float.MIN_VALUE;
  // For each terrain block we get the bounding box, translate it to view coodinates
  // and check if the position is contained in that bounding box
  Box2D boundingBox = null;
  boolean found = false;
  GameItem terrainBlock = null;
  for (int row = 0; row < terrainSize && !found; row++) {
    for (int col = 0; col < terrainSize && !found; col++) {
      terrainBlock = gameItems[row * terrainSize + col];
      boundingBox = boundingBoxes[row][col];
      found = boundingBox.contains(position.x, position.z);
    }
  }
  // If we have found a terrain block that contains the position we need
  // to calculate the height of the terrain on that position
  if (found) {
    Vector3f[] triangle = getTriangle(position, boundingBox, terrainBlock);
    result = interpolateHeight(triangle[0], triangle[1], triangle[2], position.x, position.z);
  }
  return result;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

protected Vector3f[] getTriangle(Vector3f position, Box2D boundingBox, GameItem terrainBlock) {
  // Get the column and row of the heightmap associated to the current position
  float cellWidth = boundingBox.width / (float) verticesPerCol;
  float cellHeight = boundingBox.height / (float) verticesPerRow;
  int col = (int) ((position.x - boundingBox.x) / cellWidth);
  int row = (int) ((position.z - boundingBox.y) / cellHeight);
  Vector3f[] triangle = new Vector3f[3];
  triangle[1] = new Vector3f(
      boundingBox.x + col * cellWidth,
      getWorldHeight(row + 1, col, terrainBlock),
      boundingBox.y + (row + 1) * cellHeight);
  triangle[2] = new Vector3f(
      boundingBox.x + (col + 1) * cellWidth,
      getWorldHeight(row, col + 1, terrainBlock),
      boundingBox.y + row * cellHeight);
  if (position.z < getDiagonalZCoord(triangle[1].x, triangle[1].z, triangle[2].x, triangle[2].z, position.x)) {
    triangle[0] = new Vector3f(
        boundingBox.x + col * cellWidth,
        getWorldHeight(row, col, terrainBlock),
        boundingBox.y + row * cellHeight);
  } else {
    triangle[0] = new Vector3f(
        boundingBox.x + (col + 1) * cellWidth,
        getWorldHeight(row + 2, col + 1, terrainBlock),
        boundingBox.y + (row + 1) * cellHeight);
  }
  return triangle;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

gameItems[row * terrainSize + col] = terrainBlock;
boundingBoxes[row][col] = getBoundingBox(terrainBlock);

代码示例来源:origin: lwjglgamedev/lwjglbook

float height = terrain != null ? terrain.getHeight(camera.getPosition()) : -Float.MAX_VALUE;
if (camera.getPosition().y <= height) {
  camera.setPosition(prevPos.x, prevPos.y, prevPos.z);

代码示例来源:origin: lwjglgamedev/lwjglbook

public float getHeight(Vector3f position) {
  float result = Float.MIN_VALUE;
  // For each terrain block we get the bounding box, translate it to view coodinates
  // and check if the position is contained in that bounding box
  Box2D boundingBox = null;
  boolean found = false;
  GameItem terrainBlock = null;
  for (int row = 0; row < terrainSize && !found; row++) {
    for (int col = 0; col < terrainSize && !found; col++) {
      terrainBlock = gameItems[row * terrainSize + col];
      boundingBox = boundingBoxes[row][col];
      found = boundingBox.contains(position.x, position.z);
    }
  }
  // If we have found a terrain block that contains the position we need
  // to calculate the height of the terrain on that position
  if (found) {
    Vector3f[] triangle = getTriangle(position, boundingBox, terrainBlock);
    result = interpolateHeight(triangle[0], triangle[1], triangle[2], position.x, position.z);
  }
  return result;
}

代码示例来源:origin: lwjglgamedev/lwjglbook

protected Vector3f[] getTriangle(Vector3f position, Box2D boundingBox, GameItem terrainBlock) {
  // Get the column and row of the heightmap associated to the current position
  float cellWidth = boundingBox.width / (float) verticesPerCol;
  float cellHeight = boundingBox.height / (float) verticesPerRow;
  int col = (int) ((position.x - boundingBox.x) / cellWidth);
  int row = (int) ((position.z - boundingBox.y) / cellHeight);
  Vector3f[] triangle = new Vector3f[3];
  triangle[1] = new Vector3f(
      boundingBox.x + col * cellWidth,
      getWorldHeight(row + 1, col, terrainBlock),
      boundingBox.y + (row + 1) * cellHeight);
  triangle[2] = new Vector3f(
      boundingBox.x + (col + 1) * cellWidth,
      getWorldHeight(row, col + 1, terrainBlock),
      boundingBox.y + row * cellHeight);
  if (position.z < getDiagonalZCoord(triangle[1].x, triangle[1].z, triangle[2].x, triangle[2].z, position.x)) {
    triangle[0] = new Vector3f(
        boundingBox.x + col * cellWidth,
        getWorldHeight(row, col, terrainBlock),
        boundingBox.y + row * cellHeight);
  } else {
    triangle[0] = new Vector3f(
        boundingBox.x + (col + 1) * cellWidth,
        getWorldHeight(row + 2, col + 1, terrainBlock),
        boundingBox.y + (row + 1) * cellHeight);
  }
  return triangle;
}

相关文章