pocketmine\level\generator\noise\Perlin::getNoise3D PHP Method

getNoise3D() public method

public getNoise3D ( $x, $y, $z )
    public function getNoise3D($x, $y, $z)
    {
        $x += $this->offsetX;
        $y += $this->offsetY;
        $z += $this->offsetZ;
        $floorX = (int) $x;
        $floorY = (int) $y;
        $floorZ = (int) $z;
        $X = $floorX & 0xff;
        $Y = $floorY & 0xff;
        $Z = $floorZ & 0xff;
        $x -= $floorX;
        $y -= $floorY;
        $z -= $floorZ;
        //Fade curves
        //$fX = self::fade($x);
        //$fY = self::fade($y);
        //$fZ = self::fade($z);
        $fX = $x * $x * $x * ($x * ($x * 6 - 15) + 10);
        $fY = $y * $y * $y * ($y * ($y * 6 - 15) + 10);
        $fZ = $z * $z * $z * ($z * ($z * 6 - 15) + 10);
        //Cube corners
        $A = $this->perm[$X] + $Y;
        $B = $this->perm[$X + 1] + $Y;
        $AA = $this->perm[$A] + $Z;
        $AB = $this->perm[$A + 1] + $Z;
        $BA = $this->perm[$B] + $Z;
        $BB = $this->perm[$B + 1] + $Z;
        $AA1 = self::grad($this->perm[$AA], $x, $y, $z);
        $BA1 = self::grad($this->perm[$BA], $x - 1, $y, $z);
        $AB1 = self::grad($this->perm[$AB], $x, $y - 1, $z);
        $BB1 = self::grad($this->perm[$BB], $x - 1, $y - 1, $z);
        $AA2 = self::grad($this->perm[$AA + 1], $x, $y, $z - 1);
        $BA2 = self::grad($this->perm[$BA + 1], $x - 1, $y, $z - 1);
        $AB2 = self::grad($this->perm[$AB + 1], $x, $y - 1, $z - 1);
        $BB2 = self::grad($this->perm[$BB + 1], $x - 1, $y - 1, $z - 1);
        $xLerp11 = $AA1 + $fX * ($BA1 - $AA1);
        $zLerp1 = $xLerp11 + $fY * ($AB1 + $fX * ($BB1 - $AB1) - $xLerp11);
        $xLerp21 = $AA2 + $fX * ($BA2 - $AA2);
        return $zLerp1 + $fZ * ($xLerp21 + $fY * ($AB2 + $fX * ($BB2 - $AB2) - $xLerp21) - $zLerp1);
        /*
        return self::lerp(
        	$fZ,
        	self::lerp(
        		$fY,
        		self::lerp(
        			$fX,
        			self::grad($this->perm[$AA], $x, $y, $z),
        			self::grad($this->perm[$BA], $x - 1, $y, $z)
        		),
        		self::lerp(
        			$fX,
        			self::grad($this->perm[$AB], $x, $y - 1, $z),
        			self::grad($this->perm[$BB], $x - 1, $y - 1, $z)
        		)
        	),
        	self::lerp(
        		$fY,
        		self::lerp(
        			$fX,
        			self::grad($this->perm[$AA + 1], $x, $y, $z - 1),
        			self::grad($this->perm[$BA + 1], $x - 1, $y, $z - 1)
        		),
        		self::lerp(
        			$fX,
        			self::grad($this->perm[$AB + 1], $x, $y - 1, $z - 1),
        			self::grad($this->perm[$BB + 1], $x - 1, $y - 1, $z - 1)
        		)
        	)
        );
        */
    }