← Casa completaObjeto 3Dfogon/cama-de-gato
Cama de gato
Arrastrá para girarlo// «Cama de gato» · gpt-6-sol (medium)
// A round cat bed: a plush donut-shaped cushion in grey with a fluffy cream inner pad, with a small orange cat curled up asleep in it.
const cx = 24, cy = 24;
// Solid base beneath the cushion.
for (let x = 4; x <= 44; x++)
for (let y = 4; y <= 44; y++) {
const d = Math.hypot(x - cx, y - cy);
if (d > 18.8) continue;
for (let z = 0; z <= 3; z++) {
set(x, y, z, z === 0 ? "#77777b" : "#99999c");
}
}
// Fluffy cream pad, puffed up inside the raised rim.
ellipsoid(cx, cy, 3.8, 13.5, 13.5, 3.4, "#f3e8d0");
ellipsoid(cx, cy, 5.0, 11.5, 11.5, 2.1, "#fff2dc");
// Rounded grey donut rim, with a subtly lighter top.
for (let x = 4; x <= 44; x++)
for (let y = 4; y <= 44; y++)
for (let z = 1; z <= 12; z++) {
const r = Math.hypot(x - cx, y - cy);
const a = (r - 15.8) / 4.5;
const b = (z - 6.1) / 5.8;
if (a * a + b * b > 1) continue;
let color = z <= 3 ? "#89898e" :
z >= 10 ? "#bdbdc0" :
z >= 7 ? "#afafb3" : "#9d9da2";
if (rand() < 0.08) color = z >= 8 ? "#c7c6c7" : "#aaa9ad";
set(x, y, z, color);
}
// Short, soft-looking seams across the top of the cushion.
for (let i = 0; i < 12; i++) {
const angle = i * Math.PI / 6;
for (let r = 14.3; r <= 17.4; r += 0.8) {
const z = Math.round(6.1 + 5.8 * Math.sqrt(1 - ((r - 15.8) / 4.5) ** 2));
set(cx + Math.cos(angle) * r, cy + Math.sin(angle) * r, z, "#d4d2d1");
}
}
// A little woven label on the front.
box(29, 4, 3, 33, 4, 5, "#e7b7a7");
box(30, 3, 4, 32, 3, 4, "#f6d4c5");
// Tiny tufts on the exposed inner pad.
for (let i = 0; i < 85; i++) {
const x = 13 + Math.floor(rand() * 23);
const y = 13 + Math.floor(rand() * 23);
if (Math.hypot(x - cx, y - cy) > 11.5) continue;
for (let z = 7; z >= 5; z--) {
if (get(x, y, z) === "#fff2dc" || get(x, y, z) === "#f3e8d0") {
set(x, y, z, rand() < 0.5 ? "#fff8e9" : "#e9dcc4");
break;
}
}
}
// The sleeping cat's curled, chunky body.
ellipsoid(21, 25, 9, 9.3, 7.0, 4.0, "#d97b37");
ellipsoid(20, 24, 10, 7.3, 5.7, 3.0, "#ed9850");
ellipsoid(22, 27, 7, 5.0, 3.0, 1.5, "#e9a66c");
// Broad, gentle tabby stripes over its back.
line(15, 21, 11, 17, 24, 13, 0, "#be632f");
line(18, 19, 11, 20, 22, 13, 0, "#c66a31");
line(22, 19, 11, 24, 22, 12, 0, "#c66a31");
line(17, 28, 12, 19, 30, 11, 0, "#c66a31");
// Tail curls around the outside of the body and tucks in.
line(14, 23, 9, 13, 27, 9, 2, "#c76b32");
line(13, 27, 9, 16, 30, 9, 2, "#d97b37");
line(16, 30, 9, 22, 31, 9, 2, "#e78b41");
line(22, 31, 9, 26, 28, 9, 2, "#e78b41");
sphere(26, 28, 9, 2, "#f0ad68");
line(17, 29, 11, 19, 30, 11, 0, "#bd622f");
line(21, 31, 11, 23, 30, 11, 0, "#bd622f");
// Head tucked toward the viewer.
ellipsoid(29, 19, 11, 5.0, 5.0, 4.3, "#e68a42");
ellipsoid(29, 18, 12, 4.2, 3.6, 3.2, "#f3a65d");
// Upright triangular ears, with peach-pink inner fur.
for (const ex of [26, 32]) {
box(ex - 2, 17, 14, ex + 2, 19, 15, "#d47839");
box(ex - 1, 16, 16, ex + 1, 18, 17, "#e68a42");
box(ex, 17, 18, ex, 18, 19, "#e68a42");
box(ex, 15, 16, ex, 15, 17, "#df9b91");
}
// Cream muzzle and a tiny pink nose.
ellipsoid(28, 14, 9, 2.0, 1.2, 1.5, "#fff0d4");
ellipsoid(31, 14, 9, 2.0, 1.2, 1.5, "#fff0d4");
set(29, 12, 10, "#dc8582");
set(29, 13, 9, "#9a5846");
// Closed, smiling eyes.
set(25, 16, 12, "#704436");
set(26, 15, 11, "#704436");
set(27, 14, 11, "#704436");
set(31, 14, 11, "#704436");
set(32, 15, 11, "#704436");
set(33, 16, 12, "#704436");
// Whiskers and a few warm cheek flecks.
set(24, 15, 9, "#fff0d4");
set(25, 14, 9, "#fff0d4");
set(33, 14, 9, "#fff0d4");
set(34, 15, 9, "#fff0d4");
set(25, 16, 10, "#c87342");
set(33, 16, 10, "#c87342");import { draw } from "./assets/voxel";
import { camaDeGato } from "./assets/cama-de-gato";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, camaDeGato, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add cama-de-gato
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["cama-de-gato"] })
# Queda en client/assets/cama-de-gato.ts
# https://fogon.page/object/cama-de-gato