fogón

← AnimalesObjeto 3Dfogon/rana

Rana

de fogonCC015560 bloques
RanaArrastrá para girarlo
// «Rana» · gpt-6-sol (medium)
// A cartoon green frog sitting facing front (-y): a squat green body with a lighter yellow belly, big bulging round eyes on top of the head, a wide smile, front legs straight and big folded back legs with webbed feet. It sits on a round green lily pad.

// Lily pad
const padDark = "#2d8d38", padGreen = "#43ad45", padLight = "#72cb5a";
cylinder(24, 24, 0, 20, 2, padDark);
cylinder(24, 24, 2, 19, 1, padGreen);

// A little wedge-shaped notch in the edge of the leaf
for (let x = 34; x <= 45; x++) {
  for (let y = 14; y <= 30; y++) {
    if (Math.abs(y - 22) < (x - 34) * 0.55) {
      for (let z = 0; z <= 2; z++) set(x, y, z, null);
    }
  }
}
for (let a = 0; a < 8; a++) {
  const angle = a * Math.PI / 4;
  line(24, 24, 3,
       24 + 16 * Math.cos(angle), 24 + 16 * Math.sin(angle), 3,
       0, "#62c457");
}

// The frog hops gently while the pad stays still.
part("frog", [24, 24, 3]);
animate("frog", { type: "bob", axis: "z", speed: 3, amplitude: 1 });

const dark = "#328d32", green = "#49b83f", light = "#70ce55";
const belly = "#e5db75", bellyShade = "#c5bd65";

// Big folded hind legs, set behind the body
for (const side of [-1, 1]) {
  const thighX = 24 + side * 12;
  ellipsoid(thighX, 28, 9, 5, 7, 7, dark);
  ellipsoid(thighX, 27, 10, 4.5, 6, 5.5, green);
  line(thighX, 29, 8, 24 + side * 15, 17, 5, 3, green);

  const footX = 24 + side * 15;
  ellipsoid(footX, 14, 4, 4, 5, 2, green);
  for (let t = -1; t <= 1; t++) {
    ellipsoid(footX + t * 2.5, 9 + Math.abs(t), 3,
              1.8, 3, 1.5, light);
  }
}

// Squat round body and broad yellow bib
ellipsoid(24, 25, 12, 11, 10, 9, dark);
ellipsoid(24, 24, 14, 10, 9, 8, green);
ellipsoid(24, 16, 11, 8.5, 3.5, 6.5, bellyShade);
ellipsoid(24, 15.5, 12, 7.5, 3.2, 5.5, belly);

// Straight little front legs
for (const x of [17, 31]) {
  line(x, 18, 13, x, 13, 5, 2.4, dark);
  line(x, 17, 13, x, 13, 6, 1.9, green);
  ellipsoid(x, 11, 4, 3, 4, 2, green);
  for (let t = -1; t <= 1; t++) {
    ellipsoid(x + t * 2, 8, 3, 1.5, 2.4, 1.3, light);
  }
}

// Oversized, cheerful head and softly rounded muzzle
ellipsoid(24, 19, 19, 13, 10, 8, dark);
ellipsoid(24, 19, 20, 12.5, 9.5, 7.5, green);
ellipsoid(24, 16, 22, 11, 8, 4.5, light);
ellipsoid(24, 14, 17.5, 11, 5, 4.5, green);

// Bulging eye turrets, white eyes, and simple black pupils
for (const x of [17, 31]) {
  ellipsoid(x, 16, 27, 5.2, 5, 5.5, dark);
  ellipsoid(x, 15.5, 27.7, 4.8, 4.7, 5.1, light);
  ellipsoid(x, 11.5, 28, 3.2, 2, 3.5, "#fff9dd");
  ellipsoid(x, 9.6, 28, 1.35, 1, 1.8, "#202b25");
  set(x - 1, 8, 29, "#ffffff");
}

// Tiny nostrils
ellipsoid(20.5, 9.1, 21, 0.8, 0.5, 0.7, dark);
ellipsoid(27.5, 9.1, 21, 0.8, 0.5, 0.7, dark);

// A wide smile that follows the front curve of the face
for (let x = 15; x <= 33; x += 0.45) {
  const dx = x - 24;
  const z = 16.4 + 0.047 * dx * dx;
  const y = 14 - 5 * Math.sqrt(Math.max(0.1,
    1 - (dx * dx) / 121 - ((z - 17.5) ** 2) / 20.25));
  sphere(x, y - 0.8, z, 0.65, "#276f30");
}
sphere(15, 12, 20, 0.9, dark);
sphere(33, 12, 20, 0.9, dark);

// Subtle toy-like mottling, only on exposed green blocks
forEach((x, y, z, color) => {
  if (color === green && rand() < 0.035) {
    set(x, y, z, rand() < 0.65 ? "#50bd43" : "#43ad3b");
  }
});