private void calcArgbEndcap(boolean tCylinder) {
   tEndcapOpen = false;
   if ((endcaps == Graphics3D.ENDCAPS_SPHERICAL) || (dzB == 0)) return;
   xEndcap = xA;
   yEndcap = yA;
   zEndcap = zA;
   int[] shadesEndcap;
   if (dzB >= 0 || !tCylinder) {
     intensityEndcap = Shade3D.calcIntensity(-dxB, -dyB, dzB);
     colixEndcap = colixA;
     shadesEndcap = shadesA;
     // Logger.debug("endcap is A");
   } else {
     intensityEndcap = Shade3D.calcIntensity(dxB, dyB, -dzB);
     colixEndcap = colixB;
     shadesEndcap = shadesB;
     xEndcap += dxB;
     yEndcap += dyB;
     zEndcap += dzB;
     // Logger.debug("endcap is B");
   }
   // limit specular glare on endcap
   if (intensityEndcap > Graphics3D.intensitySpecularSurfaceLimit)
     intensityEndcap = Graphics3D.intensitySpecularSurfaceLimit;
   argbEndcap = shadesEndcap[intensityEndcap];
   tEndcapOpen = (endcaps == Graphics3D.ENDCAPS_OPEN);
 }
  private void calcRotatedPoint(float t, int i, boolean isPrecision) {
    tRaster[i] = t;
    double tPI = t * Math.PI;
    double xT = Math.sin(tPI) * cosTheta;
    double yT = Math.cos(tPI);
    double xR = radius * (xT * cosPhi - yT * sinPhi);
    double yR = radius * (xT * sinPhi + yT * cosPhi);
    double z2 = radius2 - (xR * xR + yR * yR);
    double zR = (z2 > 0 ? Math.sqrt(z2) : 0);

    if (isPrecision) {
      txRaster[i] = (float) xR;
      tyRaster[i] = (float) yR;
      tzRaster[i] = (float) zR;
    } else if (tEvenDiameter) {
      xRaster[i] = (int) (xR - 0.5);
      yRaster[i] = (int) (yR - 0.5);
      zRaster[i] = (int) (zR + 0.5);
    } else {
      xRaster[i] = (int) (xR);
      yRaster[i] = (int) (yR);
      zRaster[i] = (int) (zR + 0.5);
    }
    fp8IntensityUp[i] = Shade3D.calcFp8Intensity((float) xR, (float) yR, (float) zR);
  }
  void renderCone(
      short colix,
      byte endcap,
      int diameter,
      float xA,
      float yA,
      float zA,
      float xTip,
      float yTip,
      float zTip) {
    if (diameter > (g3d.width + g3d.height) * MAX_FIX) return;
    dxBf = (xTip) - (xAf = xA);
    dyBf = (yTip) - (yAf = yA);
    dzBf = (zTip) - (zAf = zA);
    this.xA = (int) Math.floor(xAf);
    this.yA = (int) Math.floor(yAf);
    this.zA = (int) Math.floor(zAf);
    this.dxB = (int) Math.floor(dxBf);
    this.dyB = (int) Math.floor(dyBf);
    this.dzB = (int) Math.floor(dzBf);
    this.xTip = xTip;
    this.yTip = yTip;
    this.zTip = zTip;

    colixA = colix;
    shadesA = g3d.getShades(colix);
    isScreenedA = (colixA & Graphics3D.TRANSLUCENT_MASK) != 0;
    int intensityTip = Shade3D.calcIntensity(dxB, dyB, -dzB);
    g3d.plotPixelClipped(shadesA[intensityTip], isScreenedA, (int) xTip, (int) yTip, (int) zTip);

    this.diameter = diameter;
    if (diameter <= 1) {
      if (diameter == 1)
        line3d.plotLineDelta(
            colixA,
            isScreenedA,
            colixA,
            isScreenedA,
            this.xA,
            this.yA,
            this.zA,
            dxB,
            dyB,
            dzB,
            notClipped);
      return;
    }
    // float r2 = dxB*dxB + dyB*dyB + dzB*dzB;
    // System.out.println(r2);
    this.endcaps = endcap;
    calcArgbEndcap(false);
    generateBaseEllipsePrecisely();
    if (endcaps == Graphics3D.ENDCAPS_FLAT) renderFlatEndcap(false);
    for (int i = rasterCount; --i >= 0; ) plotRasterCone(i);
  }
Exemple #4
0
 public static int[] getShades(short colix) {
   int[] shades = ashades[colix];
   if (shades == null) shades = ashades[colix] = Shade3D.getShades(argbs[colix]);
   return shades;
 }