← AnimalesObjeto 3Dfogon/rinoceronte
Rinoceronte
Arrastrá para girarlo// «Rinoceronte» · gpt-6-sol (medium)
// A chunky cartoon rhinoceros, horizontal along y, head at the front (-y): a heavy grey armored-looking body with darker folds, four thick legs, a long head with a big curved horn on the nose and a smaller horn behind it, small eyes and small ears. A short thin tail.
// Four independently swinging, chunky legs.
function leg(name, x, y, speed) {
part(name, [x, y, 13]);
ellipsoid(x, y, 10, 5, 5, 7, "#788489");
ellipsoid(x, y - 1, 5, 5, 5, 5, "#899598");
ellipsoid(x, y - 2, 3, 5, 5, 3, "#929da0");
// Three broad little toenails on the front of each foot.
for (const dx of [-3, 0, 3]) {
box(x + dx, y - 6, 1, x + dx + 1, y - 5, 3, "#d1ccbb");
}
animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
leg("frontLeft", 15, 16, 3);
leg("frontRight", 33, 16, -3);
leg("rearLeft", 15, 33, -3);
leg("rearRight", 33, 33, 3);
part("body");
// Rounded barrel, with dark edges between its overlapping armor plates.
ellipsoid(24, 29, 19, 14, 11, 11, "#69757b");
ellipsoid(24, 30, 19, 13, 10, 10, "#899498");
ellipsoid(24, 20, 19, 15, 11, 11, "#6d797e");
ellipsoid(24, 19, 20, 14, 10, 10, "#929da0");
ellipsoid(24, 17, 15, 12, 8, 7, "#859195");
// Gentle top lighting and a little mottling on the broad grey surfaces.
forEach((x, y, z, color) => {
if (color === "#929da0" || color === "#899498") {
if (z >= 25 && rand() < 0.65) set(x, y, z, "#a6afb0");
else if (z < 15 && rand() < 0.35) set(x, y, z, "#7e8b8f");
else if (rand() < 0.035) set(x, y, z, "#a0aaac");
}
});
// Broad shoulder fold and a smaller crease near the rump.
for (const side of [-1, 1]) {
const sx = side < 0 ? 10 : 38;
line(sx, 21, 13, sx, 20, 24, 1, "#68757b");
line(sx, 34, 14, sx, 35, 23, 0, "#748086");
}
line(14, 19, 28, 24, 18, 30, 0, "#79868a");
line(24, 18, 30, 34, 19, 28, 0, "#79868a");
// Big, low head and wide soft muzzle.
ellipsoid(24, 13, 21, 11, 10, 9, "#68757a");
ellipsoid(24, 12, 21, 10, 9, 8, "#9ba6a7");
ellipsoid(24, 8, 18, 9, 6, 6, "#7b878b");
ellipsoid(24, 7, 19, 9, 6, 6, "#a4adae");
ellipsoid(24, 5, 16, 7, 3, 3, "#929da0");
// Ears: small, upright cups with visible darker interiors.
for (const x of [14, 34]) {
ellipsoid(x, 16, 31, 3, 3, 5, "#69767c");
ellipsoid(x, 14, 32, 2, 1, 3, "#b88f91");
set(x, 14, 35, "#a3adae");
}
// Simple black dot eyes and tiny white catchlights.
for (const x of [14, 34]) {
sphere(x, 10, 25, 1.5, "#242c30");
set(x, 9, 26, "#ffffff");
}
// Dark nostrils on the front corners of the muzzle.
sphere(18, 3, 17, 1, "#515d62");
sphere(30, 3, 17, 1, "#515d62");
// Exaggerated curved front horn, tapering and bending toward the viewer.
ellipsoid(24, 6, 25, 4, 4, 3, "#c9bda2");
sphere(24, 6, 28, 3, "#e6d9b5");
sphere(24, 5, 30, 2.5, "#eee2bf");
sphere(24, 4, 32, 2, "#f1e7cb");
line(24, 4, 32, 24, 3, 35, 1, "#f4ebd5");
set(24, 2, 36, "#f4ebd5");
// Shorter horn immediately behind the main one.
ellipsoid(24, 15, 29, 3, 3, 2, "#cbbfa5");
sphere(24, 15, 31, 2, "#e8dcb9");
line(24, 15, 32, 24, 14, 34, 1, "#f0e5c9");
// Short, thin tail and a dark tuft.
line(24, 39, 19, 24, 43, 17, 1, "#788489");
ellipsoid(24, 44, 16, 2, 2, 2, "#626e73");import { draw } from "./assets/voxel";
import { rinoceronte } from "./assets/rinoceronte";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, rinoceronte, 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 rinoceronte
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["rinoceronte"] })
# Queda en client/assets/rinoceronte.ts
# https://fogon.page/object/rinoceronte