示例#1
0
  /**
   * Vrací pozici (v rámci scény) pixelu rastru průmětny na souřadnicích <code>(i, j)</code>.
   *
   * @param i Vertikální souřadnice pixelu v rastru průmětny.
   * @param j Horizontální souřadnice pixelu v rastru průmětny.
   * @return Vrací bod, který popisuje polohu daného pixelu ve scéně.
   */
  protected Point3D getPixelPosition(int i, int j) {
    Point3D pixelPosition = new Point3D(position);

    float u = ((float) (i) / (screenWidth - 1) - 0.5f) * realWidth;
    float v = ((float) (screenHeight - 1 - j) / (screenHeight - 1) - 0.5f) * realHeight;
    pixelPosition = pixelPosition.move(right.mul(u)).move(up.mul(v));
    return pixelPosition;
  }
示例#2
0
 /**
  * Implicitní konstruktor. Vytvoří kameru s pozicí v počátku soustavy souřadnic scény - bod (0, 0,
  * 0), vektorem up (0, 0, 1), vektorem pohledu (1, 0, 0), a rozlišením rastru (100 x 100) px.
  */
 protected AbstractCamera() {
   super();
   position = new Point3D();
   direction = new Vector3(1, 0, 0);
   up = new Vector3(0, 0, 1);
   right = direction.cross(up).normalized();
   up = right.cross(direction).normalized();
   screenWidth = 100;
   screenHeight = 100;
   realWidth = 2;
   realHeight = 2;
   computeRealUVSteps();
 }
示例#3
0
  protected List<Point3D> getPixelPositionSuperSampledList(int i, int j, int r) {
    final int count = getSuperSampledCount(r);
    final List<Point3D> pixelPositionList = new ArrayList<>(count);
    Point3D currentPixelPosition = null;

    final float du = getSuperSampledDU(r);
    final float dv = getSuperSampledDV(r);
    for (int k = -r; k <= r; k++) {
      for (int l = -r; l <= r; l++) {
        currentPixelPosition = new Point3D(position);
        float u = ((float) (i) / (screenWidth - 1) - 0.5f) * realWidth + k * du;
        float v =
            ((float) (screenHeight - 1 - j) / (screenHeight - 1) - 0.5f) * realHeight + l * dv;
        pixelPositionList.add(currentPixelPosition.move(right.mul(u)).move(up.mul(v)));
      }
    }

    return pixelPositionList;
  }
示例#4
0
  /**
   * Vytvoří kameru s danými atributy.
   *
   * @param position Pozice kamery ve scéně.
   * @param direction Vektor určující směr pohledu kamery.
   * @param up Vektor určující směr nahoru.
   * @param screenWidth Šířka rastru průmětny.
   * @param screenHeight Výška rastru průmětny.
   */
  public AbstractCamera(
      Point3D position, Vector3 direction, Vector3 up, int screenWidth, int screenHeight) {
    this.position = position;
    this.direction = direction.normalized();
    this.up = up.normalized();
    right = this.direction.cross(this.up).normalized();
    this.up = right.cross(this.direction).normalized();
    this.screenWidth = screenWidth;
    this.screenHeight = screenHeight;

    if (screenWidth > screenHeight) {
      realHeight = 2.0f;
      realWidth = screenWidth * realHeight / screenHeight;
    } else {
      realWidth = 2.0f;
      realHeight = screenHeight * realWidth / screenWidth;
    }

    computeRealUVSteps();
  }